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

30 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 - CSV format. 

2 

3Tests verify CSV output structure with proper headers and data rows. 

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 .conftest import MockToolResult 

19 

20 

21def test_write_csv_file_creates_valid_file_with_headers( 

22 tmp_path: Path, 

23 sample_results_empty: list[MockToolResult], 

24) -> None: 

25 """Verify CSV file contains proper header row with all required columns. 

26 

27 Args: 

28 tmp_path: Temporary directory path for test output. 

29 sample_results_empty: Mock tool results with no issues. 

30 """ 

31 output_path = tmp_path / "report.csv" 

32 

33 write_output_file( 

34 output_path=str(output_path), 

35 output_format=OutputFormat.CSV, 

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

37 action=Action.CHECK, 

38 total_issues=0, 

39 total_fixed=0, 

40 ) 

41 

42 assert_that(output_path.exists()).is_true() 

43 content = output_path.read_text() 

44 lines = content.strip().split("\n") 

45 

46 assert_that(lines).is_not_empty() 

47 header = lines[0] 

48 assert_that(header).contains("tool") 

49 assert_that(header).contains("issues_count") 

50 assert_that(header).contains("file") 

51 assert_that(header).contains("line") 

52 assert_that(header).contains("code") 

53 assert_that(header).contains("message") 

54 

55 

56def test_write_csv_file_includes_issue_data( 

57 tmp_path: Path, 

58 sample_results_with_issues: list[MockToolResult], 

59) -> None: 

60 """Verify CSV output includes issue details in data rows. 

61 

62 Args: 

63 tmp_path: Temporary directory path for test output. 

64 sample_results_with_issues: Mock tool results containing issues. 

65 """ 

66 output_path = tmp_path / "report.csv" 

67 

68 write_output_file( 

69 output_path=str(output_path), 

70 output_format=OutputFormat.CSV, 

71 all_results=sample_results_with_issues, # type: ignore[arg-type] 

72 action=Action.CHECK, 

73 total_issues=1, 

74 total_fixed=0, 

75 ) 

76 

77 content = output_path.read_text() 

78 lines = content.strip().split("\n") 

79 

80 assert_that(lines).is_length(2) # header + 1 data row 

81 assert_that(content).contains("src/main.py") 

82 assert_that(content).contains("E001") 

83 assert_that(content).contains("ruff")