diff --git a/policy_eval/tests/test_core.py b/policy_eval/tests/test_core.py new file mode 100644 index 0000000..18d407f --- /dev/null +++ b/policy_eval/tests/test_core.py @@ -0,0 +1,61 @@ +import pytest +from policy_eval import core + +@pytest.fixture +def sample_drift_report(): + return { + "reports": [ + {"status": "warn"}, + {"status": "fail"}, + {"status": "unknown"}, + {"status": "manual_override"}, + {"status": "warn"} + ] + } + +@pytest.fixture +def incomplete_drift_report(): + return { + "reports": [ + {"status": "warn"}, + {}, + {"status": "manual_override"} + ] + } + +@pytest.fixture +def empty_drift_report(): + return {} + + +def test_evaluate_policy_nominal(sample_drift_report): + result = core.evaluate_policy(sample_drift_report) + assert isinstance(result, dict) + assert set(result.keys()) == {"total_warn", "total_fail", "unknowns", "manual_overrides"} + assert result["total_warn"] == 2 + assert result["total_fail"] == 1 + assert result["unknowns"] == 1 + assert result["manual_overrides"] == 1 + + +def test_evaluate_policy_incomplete_fields(incomplete_drift_report): + result = core.evaluate_policy(incomplete_drift_report) + assert result["total_warn"] == 1 + assert result["total_fail"] == 0 + assert result["manual_overrides"] == 1 + assert result["unknowns"] >= 1 # missing field should count as unknown + + +def test_evaluate_policy_empty_report(empty_drift_report): + result = core.evaluate_policy(empty_drift_report) + assert all(result[k] == 0 for k in result.keys()) + + +def test_evaluate_policy_invalid_type(): + with pytest.raises((TypeError, KeyError, ValueError)): + core.evaluate_policy(None) + + +def test_output_format_values_are_ints(sample_drift_report): + result = core.evaluate_policy(sample_drift_report) + assert all(isinstance(result[k], int) for k in result.keys()) \ No newline at end of file