Coverage for tests / unit / utils / output / test_file_writer_plain.py: 100%

23 statements  

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

1"""Unit tests for write_output_file function - Plain/Grid format. 

2 

3Tests verify plain text output structure with proper headers and totals. 

4""" 

5 

6from __future__ import annotations 

7 

8from pathlib import Path 

9from typing import TYPE_CHECKING 

10 

11from assertpy import assert_that 

12 

13from lintro.enums.action import Action 

14from lintro.enums.output_format import OutputFormat 

15from lintro.utils.output.file_writer import write_output_file 

16 

17if TYPE_CHECKING: 

18 from collections.abc import Callable 

19 

20 from .conftest import MockToolResult 

21 

22 

23def test_write_plain_file_creates_valid_structure( 

24 tmp_path: Path, 

25 mock_tool_result_factory: Callable[..., MockToolResult], 

26) -> None: 

27 """Verify plain text file contains report header and summary totals. 

28 

29 Args: 

30 tmp_path: Temporary directory path for test output. 

31 mock_tool_result_factory: Factory for creating mock tool results. 

32 """ 

33 output_path = tmp_path / "report.txt" 

34 results = [mock_tool_result_factory(name="ruff", issues_count=5, output="5 issues")] 

35 

36 write_output_file( 

37 output_path=str(output_path), 

38 output_format=OutputFormat.PLAIN, 

39 all_results=results, # type: ignore[arg-type] 

40 action=Action.CHECK, 

41 total_issues=5, 

42 total_fixed=0, 

43 ) 

44 

45 assert_that(output_path.exists()).is_true() 

46 content = output_path.read_text() 

47 

48 assert_that(content).contains("Lintro Check Report") 

49 assert_that(content).contains("=" * 40) 

50 assert_that(content).contains("ruff: 5 issues") 

51 assert_that(content).contains("Total Issues: 5") 

52 

53 

54def test_write_plain_file_shows_fixed_count_for_fix_action( 

55 tmp_path: Path, 

56 sample_results_empty: list[MockToolResult], 

57) -> None: 

58 """Verify fix action report includes 'Total Fixed' instead of just issues. 

59 

60 Args: 

61 tmp_path: Temporary directory path for test output. 

62 sample_results_empty: Mock tool results with no issues. 

63 """ 

64 output_path = tmp_path / "report.txt" 

65 

66 write_output_file( 

67 output_path=str(output_path), 

68 output_format=OutputFormat.PLAIN, 

69 all_results=sample_results_empty, # type: ignore[arg-type] 

70 action=Action.FIX, 

71 total_issues=0, 

72 total_fixed=5, 

73 ) 

74 

75 content = output_path.read_text() 

76 

77 assert_that(content).contains("Lintro Fix Report") 

78 assert_that(content).contains("Total Fixed: 5")