"""Tests for governance/report_generator.py.""" import json import sys from pathlib import Path sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) from cortex.governance.evidence import EvidenceCollector, ControlMapping from cortex.governance.report_generator import ReportGenerator class TestReportGenerator: def _collector_with_mapping(self, tmp_path): import yaml mapping_file = tmp_path / "mapping.yaml" mapping_file.write_text(yaml.dump({ "mappings": [ {"event_types": ["policy_evaluation"], "controls": ["A.5.1", "A.8.1"]}, ] })) return EvidenceCollector(control_mapping=ControlMapping(str(mapping_file))) def test_empty_report(self): collector = EvidenceCollector(control_mapping=ControlMapping("/dev/null")) gen = ReportGenerator(collector) report = gen.generate_compliance_report() assert report["status"] == "no_evidence" def test_report_with_evidence(self, tmp_path): collector = self._collector_with_mapping(tmp_path) collector.record(event_type="policy_evaluation", agent="claudia", action="read", verdict="allow", risk_score=2, risk_level="low") collector.record(event_type="policy_evaluation", agent="claudia", action="write", verdict="deny", risk_score=8, risk_level="high") gen = ReportGenerator(collector) report = gen.generate_compliance_report() assert report["total_evidence"] == 2 assert "A.5.1" in report["controls_covered"] assert report["summary"]["total_deny"] == 1 assert report["summary"]["high_risk_events"] == 1 def test_agent_report(self, tmp_path): collector = self._collector_with_mapping(tmp_path) collector.record(event_type="policy_evaluation", agent="claudia", action="read", verdict="allow") collector.record(event_type="policy_evaluation", agent="other", action="read", verdict="deny") gen = ReportGenerator(collector) report = gen.generate_agent_report("claudia") assert report["agent"] == "claudia" assert report["total_actions"] == 1 def test_export_json(self): collector = EvidenceCollector(control_mapping=ControlMapping("/dev/null")) gen = ReportGenerator(collector) output = gen.export_json() data = json.loads(output) assert "status" in data # empty report