Coverage for tests / unit / utils / result_formatters / test_ruff_formatting.py: 100%

28 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Tests for ruff formatting issue detection in print_tool_result.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING, Any 

6 

7from assertpy import assert_that 

8 

9from lintro.utils.result_formatters import print_tool_result 

10 

11if TYPE_CHECKING: 

12 from collections.abc import Callable 

13 

14 

15def test_ruff_detects_would_reformat_files( 

16 console_capture_with_kwargs: tuple[ 

17 Callable[..., None], 

18 list[tuple[str, dict[str, Any]]], 

19 ], 

20 success_capture: tuple[Callable[[str], None], list[str]], 

21) -> None: 

22 """Verify ruff 'Would reformat' lines are counted as formatting issues. 

23 

24 Args: 

25 console_capture_with_kwargs: Mock console output capture with kwargs. 

26 success_capture: Mock success message capture. 

27 """ 

28 mock_console, console_output = console_capture_with_kwargs 

29 mock_success, _ = success_capture 

30 

31 output = "Would reformat: file1.py\nWould reformat: file2.py\n[*] 2 fixable" 

32 

33 print_tool_result( 

34 console_output_func=mock_console, 

35 success_func=mock_success, 

36 tool_name="ruff", 

37 output=output, 

38 issues_count=4, 

39 action="check", 

40 ) 

41 

42 yellow_texts = [ 

43 t for t, kwargs in console_output if kwargs.get("color") == "yellow" 

44 ] 

45 combined = " ".join(yellow_texts) 

46 assert_that(combined).contains("formatting/linting issue(s)") 

47 

48 

49def test_ruff_detects_files_would_be_reformatted_summary( 

50 console_capture_with_kwargs: tuple[ 

51 Callable[..., None], 

52 list[tuple[str, dict[str, Any]]], 

53 ], 

54 success_capture: tuple[Callable[[str], None], list[str]], 

55) -> None: 

56 """Verify ruff 'N files would be reformatted' summary is detected. 

57 

58 Args: 

59 console_capture_with_kwargs: Mock console output capture with kwargs. 

60 success_capture: Mock success message capture. 

61 """ 

62 mock_console, console_output = console_capture_with_kwargs 

63 mock_success, _ = success_capture 

64 

65 output = "Formatting issues:\n3 files would be reformatted" 

66 

67 print_tool_result( 

68 console_output_func=mock_console, 

69 success_func=mock_success, 

70 tool_name="ruff", 

71 output=output, 

72 issues_count=3, 

73 action="check", 

74 ) 

75 

76 yellow_texts = [ 

77 t for t, kwargs in console_output if kwargs.get("color") == "yellow" 

78 ] 

79 combined = " ".join(yellow_texts) 

80 assert_that(combined).contains("formatting/linting issue(s)") 

81 

82 

83def test_ruff_tool_name_case_insensitive_for_formatting_detection( 

84 console_capture_with_kwargs: tuple[ 

85 Callable[..., None], 

86 list[tuple[str, dict[str, Any]]], 

87 ], 

88 success_capture: tuple[Callable[[str], None], list[str]], 

89) -> None: 

90 """Verify ruff formatting detection works regardless of tool name case. 

91 

92 Args: 

93 console_capture_with_kwargs: Mock console output capture with kwargs. 

94 success_capture: Mock success message capture. 

95 """ 

96 mock_console, console_output = console_capture_with_kwargs 

97 mock_success, _ = success_capture 

98 

99 output = "Would reformat: file.py\nFormatting issues:" 

100 

101 print_tool_result( 

102 console_output_func=mock_console, 

103 success_func=mock_success, 

104 tool_name="Ruff", 

105 output=output, 

106 issues_count=1, 

107 action="check", 

108 ) 

109 

110 yellow_texts = [ 

111 t for t, kwargs in console_output if kwargs.get("color") == "yellow" 

112 ] 

113 combined = " ".join(yellow_texts) 

114 assert_that(combined).contains("formatting/linting issue(s)")