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

1"""Unit tests for report generation via OutputManager.""" 

2 

3from __future__ import annotations 

4 

5from pathlib import Path 

6 

7import pytest 

8from assertpy import assert_that 

9 

10from lintro.utils.output import OutputManager 

11 

12 

13class DummyIssue: 

14 """Simple container for issue fields used in reports.""" 

15 

16 def __init__(self, file: str, line: int, code: str, message: str) -> None: 

17 """Initialize an issue container. 

18 

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 

29 

30 

31class DummyResult: 

32 """Simple result container used to exercise report writing.""" 

33 

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. 

41 

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 [] 

50 

51 

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. 

57 

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()