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

1"""Tests for format check normalization in execute_ruff_check.""" 

2 

3from __future__ import annotations 

4 

5from typing import cast 

6from unittest.mock import MagicMock, patch 

7 

8from assertpy import assert_that 

9 

10from lintro.parsers.ruff.ruff_format_issue import RuffFormatIssue 

11from lintro.tools.implementations.ruff.check import execute_ruff_check 

12 

13 

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. 

18 

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" 

24 

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 ] 

48 

49 result = execute_ruff_check(mock_ruff_tool, ["/test/project"]) 

50 

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")