Coverage for tests / unit / output / test_output_manager_reports.py: 100%
25 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 report generation via OutputManager."""
3from __future__ import annotations
5from pathlib import Path
7import pytest
8from assertpy import assert_that
10from lintro.utils.output import OutputManager
13class DummyIssue:
14 """Simple container for issue fields used in reports."""
16 def __init__(self, file: str, line: int, code: str, message: str) -> None:
17 """Initialize an issue container.
19 Args:
20 file: File path where the issue occurred.
21 line: Line number of the issue.
22 code: Issue code identifier.
23 message: Human-readable message.
24 """
25 self.file = file
26 self.line = line
27 self.code = code
28 self.message = message
31class DummyResult:
32 """Simple result container used to exercise report writing."""
34 def __init__(
35 self,
36 name: str,
37 issues_count: int,
38 issues: list[DummyIssue] | None = None,
39 ) -> None:
40 """Initialize a result wrapper.
42 Args:
43 name: Tool name associated with the result.
44 issues_count: Total number of issues.
45 issues: Optional list of issue objects.
46 """
47 self.name = name
48 self.issues_count = issues_count
49 self.issues = issues or []
52def test_output_manager_writes_reports(
53 tmp_path: Path,
54 monkeypatch: pytest.MonkeyPatch,
55) -> None:
56 """Write multiple report formats and verify artifacts exist.
58 Args:
59 tmp_path: Temporary directory for placing report outputs.
60 monkeypatch: Pytest monkeypatch to set output directory.
61 """
62 monkeypatch.setenv("LINTRO_LOG_DIR", str(tmp_path))
63 om = OutputManager()
64 issues = [DummyIssue(file="a.py", line=1, code="X", message="m")]
65 results = [DummyResult(name="ruff", issues_count=1, issues=issues)]
66 om.write_reports_from_results(results=results) # type: ignore[arg-type]
67 assert_that((om.run_dir / "report.md").exists()).is_true()
68 assert_that((om.run_dir / "report.html").exists()).is_true()
69 assert_that((om.run_dir / "summary.csv").exists()).is_true()