File size: 5,358 Bytes
0b6a889
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
"""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