"""Tests for governance/evidence.py — Evidence Collector & Control Mapping.""" import json import sys from pathlib import Path import yaml import pytest sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core")) from governance.evidence import EvidenceCollector, EvidenceRecord, ControlMapping class TestControlMapping: def test_missing_file(self): m = ControlMapping(mapping_path="/nonexistent/path.yaml") assert m.get_controls("anything") == [] def test_load_mapping(self, tmp_path): mapping_file = tmp_path / "mapping.yaml" mapping_file.write_text(yaml.dump({ "mappings": [ {"event_types": ["policy_evaluation"], "controls": ["A.5.1", "A.8.1"]}, {"event_types": ["access_request", "data_export"], "controls": ["A.9.1"]}, ] })) m = ControlMapping(mapping_path=str(mapping_file)) assert "A.5.1" in m.get_controls("policy_evaluation") assert "A.9.1" in m.get_controls("access_request") assert m.get_controls("unknown_event") == [] class TestEvidenceRecord: def test_to_dict(self): r = EvidenceRecord( timestamp="2026-01-01T00:00:00Z", event_type="test", agent="claudia", action="read", verdict="allow", risk_score=2, risk_level="low", controls=["A.5.1"], ) d = r.to_dict() assert d["agent"] == "claudia" assert d["controls"] == ["A.5.1"] class TestEvidenceCollector: def setup_method(self): self.collector = EvidenceCollector(control_mapping=ControlMapping("/dev/null")) def test_record(self): rec = self.collector.record( event_type="policy_evaluation", agent="claudia", action="send_email", verdict="allow", risk_score=3, risk_level="low", ) assert rec.agent == "claudia" assert len(self.collector.evidence) == 1 def test_filter_by_agent(self): self.collector.record(event_type="e", agent="a", action="x", verdict="allow") self.collector.record(event_type="e", agent="b", action="x", verdict="deny") assert len(self.collector.get_evidence(agent="a")) == 1 def test_filter_by_verdict(self): self.collector.record(event_type="e", agent="a", action="x", verdict="allow") self.collector.record(event_type="e", agent="a", action="y", verdict="deny") assert len(self.collector.get_evidence(verdict="deny")) == 1 def test_export_json(self): self.collector.record(event_type="e", agent="a", action="x", verdict="allow") exported = self.collector.export_json() data = json.loads(exported) assert len(data) == 1 assert data[0]["agent"] == "a" def test_empty_evidence(self): assert self.collector.get_evidence() == [] assert json.loads(self.collector.export_json()) == []