|
| 1 | +"""Tests for reporter helpers.""" |
| 2 | + |
| 3 | +from roast.analyzer import AnalysisReport, Issue |
| 4 | +from roast.reporter import build_report_payload |
| 5 | +from roast.roaster import RoastResult |
| 6 | + |
| 7 | + |
| 8 | +def test_build_report_payload_includes_counts_and_hotspots() -> None: |
| 9 | + report = AnalysisReport( |
| 10 | + total_files=3, |
| 11 | + total_lines=120, |
| 12 | + issues=[ |
| 13 | + Issue(file="app/main.py", line=10, category="AI Slop", severity="high", description="TODO found"), |
| 14 | + Issue(file="app/main.py", line=22, category="AI Slop", severity="medium", description="Magic number"), |
| 15 | + Issue(file="app/api.py", line=8, category="Style", severity="low", description="Missing docstring"), |
| 16 | + ], |
| 17 | + scores={"AI Slop": 78, "Code Quality": 65, "Style": 92, "Overall": 81}, |
| 18 | + ) |
| 19 | + roast = RoastResult( |
| 20 | + headline="Amazingly survivable.", |
| 21 | + roast_lines=["Line one", "Line two", "Line three", "Line four", "Line five"], |
| 22 | + verdict="SHIP IT", |
| 23 | + verdict_emoji="🚀", |
| 24 | + ) |
| 25 | + |
| 26 | + payload = build_report_payload(report, roast) |
| 27 | + |
| 28 | + assert payload["summary"]["total_issues"] == 3 |
| 29 | + assert payload["counts"]["by_severity"]["high"] == 1 |
| 30 | + assert payload["counts"]["by_severity"]["medium"] == 1 |
| 31 | + assert payload["counts"]["by_severity"]["low"] == 1 |
| 32 | + assert payload["counts"]["by_category"]["AI Slop"] == 2 |
| 33 | + assert payload["hotspots"][0] == {"file": "app/main.py", "issue_count": 2} |
| 34 | + assert "brightgreen" in payload["share"]["badge_markdown"] |
0 commit comments