Coverage for tests / unit / tools / ruff / check / test_format_normalization.py: 100%
16 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Tests for format check normalization in execute_ruff_check."""
3from __future__ import annotations
5from typing import cast
6from unittest.mock import MagicMock, patch
8from assertpy import assert_that
10from lintro.parsers.ruff.ruff_format_issue import RuffFormatIssue
11from lintro.tools.implementations.ruff.check import execute_ruff_check
14def test_execute_ruff_check_normalizes_format_paths_to_absolute(
15 mock_ruff_tool: MagicMock,
16) -> None:
17 """Normalize format check file paths to absolute paths.
19 Args:
20 mock_ruff_tool: Mock RuffTool instance for testing.
21 """
22 mock_ruff_tool.options["format_check"] = True
23 mock_ruff_tool._get_cwd.return_value = "/test/project"
25 with (
26 patch(
27 "lintro.tools.implementations.ruff.check.walk_files_with_excludes",
28 return_value=["/test/project/test.py"],
29 ),
30 patch(
31 "lintro.tools.implementations.ruff.check.run_subprocess_with_timeout",
32 ) as mock_subprocess,
33 patch(
34 "lintro.tools.implementations.ruff.check.parse_ruff_output",
35 return_value=[],
36 ),
37 patch(
38 "lintro.tools.implementations.ruff.check.parse_ruff_format_check_output",
39 return_value=["test.py"], # Relative path from format check
40 ),
41 patch("os.path.isabs", return_value=False),
42 patch("os.path.abspath", return_value="/test/project/test.py"),
43 ):
44 mock_subprocess.side_effect = [
45 (True, "[]"),
46 (False, "Would reformat: test.py"),
47 ]
49 result = execute_ruff_check(mock_ruff_tool, ["/test/project"])
51 # Format issues should have normalized absolute paths
52 assert_that(result.issues_count).is_equal_to(1)
53 assert_that(result.issues).is_not_none()
54 format_issue = cast(RuffFormatIssue, result.issues[0]) # type: ignore[index] # validated via is_not_none
55 assert_that(format_issue.file).contains("/test/project")