"""Tests for the ComplianceChecker.""" import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) import pytest from fineprint.checker import ComplianceChecker @pytest.fixture def checker(): return ComplianceChecker() @pytest.fixture def v1_policies(): return { "return": { "window_days": 30, "refund_method": "original_payment", "restocking_fee_percent": 0, "requires_receipt": True, "electronics_window_days": 14, }, "shipping": { "free_threshold": 50, "standard_delivery_days": 5, "express_delivery_days": 2, "international_available": False, "express_surcharge": 15, }, } class TestValidateQuote: def test_correct_quote(self, checker, v1_policies): result = checker.validate_quote( agent_response={"policy_field": "return.window_days", "quoted_value": 30}, agent_version="v1_base", active_version="v1_base", active_policies=v1_policies, ) assert result["compliant"] is True def test_correct_quote_string(self, checker, v1_policies): result = checker.validate_quote( agent_response={"policy_field": "return.window_days", "quoted_value": "30"}, agent_version="v1_base", active_version="v1_base", active_policies=v1_policies, ) assert result["compliant"] is True def test_stale_quote(self, checker, v1_policies): # Agent believes v1 but active is v2, and quotes v1 value v2_policies = v1_policies.copy() v2_policies["return"] = {**v1_policies["return"], "window_days": 14} result = checker.validate_quote( agent_response={"policy_field": "return.window_days", "quoted_value": 30}, agent_version="v1_base", active_version="v2_return_change", active_policies=v2_policies, ) assert result["compliant"] is False assert result["severity"] == "HIGH" assert "STALE_POLICY" in result["reason"] def test_incorrect_value(self, checker, v1_policies): result = checker.validate_quote( agent_response={"policy_field": "return.window_days", "quoted_value": 999}, agent_version="v1_base", active_version="v1_base", active_policies=v1_policies, ) assert result["compliant"] is False assert result["severity"] == "MEDIUM" def test_missing_field(self, checker, v1_policies): result = checker.validate_quote( agent_response={"policy_field": "nonexistent.field", "quoted_value": "x"}, agent_version="v1_base", active_version="v1_base", active_policies=v1_policies, ) assert result["compliant"] is False def test_empty_field(self, checker, v1_policies): result = checker.validate_quote( agent_response={"policy_field": "", "quoted_value": ""}, agent_version="v1_base", active_version="v1_base", active_policies=v1_policies, ) assert result["compliant"] is False def test_boolean_match(self, checker, v1_policies): result = checker.validate_quote( agent_response={ "policy_field": "return.requires_receipt", "quoted_value": "true", }, agent_version="v1_base", active_version="v1_base", active_policies=v1_policies, ) assert result["compliant"] is True class TestValidateAction: def test_abort_with_drift(self, checker): result = checker.validate_action( action_type="abort_workflow", agent_version="v1_base", active_version="v2_return_change", ) assert result["compliant"] is True def test_abort_without_drift(self, checker): result = checker.validate_action( action_type="abort_workflow", agent_version="v1_base", active_version="v1_base", ) assert result["compliant"] is False def test_escalate_with_drift(self, checker): result = checker.validate_action( action_type="escalate", agent_version="v1_base", active_version="v2_return_change", ) assert result["compliant"] is True def test_escalate_without_drift(self, checker): result = checker.validate_action( action_type="escalate", agent_version="v1_base", active_version="v1_base", ) assert result["compliant"] is False def test_respond_always_compliant(self, checker): result = checker.validate_action( action_type="respond_to_user", agent_version="v1_base", active_version="v1_base", ) assert result["compliant"] is True class TestSeverityLevel: def test_severity_ordering(self, checker): assert checker.severity_level(None) == 0 assert checker.severity_level("LOW") == 1 assert checker.severity_level("MEDIUM") == 2 assert checker.severity_level("HIGH") == 3 assert checker.severity_level("CRITICAL") == 4