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
« 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.
3Tests verify CSV output structure with proper headers and data rows.
4"""
6from __future__ import annotations
8from pathlib import Path
9from typing import TYPE_CHECKING
11from assertpy import assert_that
13from lintro.enums.action import Action
14from lintro.enums.output_format import OutputFormat
15from lintro.utils.output.file_writer import write_output_file
17if TYPE_CHECKING:
18 from .conftest import MockToolResult
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.
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"
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 )
42 assert_that(output_path.exists()).is_true()
43 content = output_path.read_text()
44 lines = content.strip().split("\n")
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")
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.
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"
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 )
77 content = output_path.read_text()
78 lines = content.strip().split("\n")
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")