File size: 2,137 Bytes
b510add
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import unittest
from app import rules


VALID_QUALITY = {"image_quality": "valid", "quality_score": 0.95}


class TestRulesGate(unittest.TestCase):
    def test_consistent_reading_succeeds(self):
        parsed = {
            "detected_liters": 14.28, "detected_amount": 10000.0, "fuel_price": 700.0,
            "is_consistent": True, "ocr_confidence": 0.95, "raw_numbers": [("10000", 10000.0)],
        }
        gate = rules.evaluate(parsed, VALID_QUALITY, fuel_price=700.0)
        self.assertTrue(gate["success"])

    def test_blurry_image_blocks(self):
        parsed = {"raw_numbers": [("1", 1.0)], "ocr_confidence": 0.9}
        gate = rules.evaluate(parsed, {"image_quality": "blurry", "quality_score": 0.35})
        self.assertFalse(gate["success"])
        self.assertIn("floue", gate["message"])

    def test_inconsistent_data_blocks(self):
        parsed = {
            "detected_liters": 20.0, "detected_amount": 10000.0, "fuel_price": 875.0,
            "is_consistent": False, "ocr_confidence": 0.95, "raw_numbers": [("20", 20.0)],
        }
        gate = rules.evaluate(parsed, VALID_QUALITY, fuel_price=875.0)
        self.assertFalse(gate["success"])
        self.assertIn("Incohérence", gate["message"])

    def test_missing_price_blocks(self):
        parsed = {
            "detected_liters": 20.0, "detected_amount": None, "fuel_price": None,
            "is_consistent": None, "ocr_confidence": 0.9, "raw_numbers": [("20", 20.0)],
        }
        gate = rules.evaluate(parsed, VALID_QUALITY)
        self.assertFalse(gate["success"])
        self.assertIn("Prix du litre manquant", gate["message"])

    def test_low_confidence_blocks(self):
        parsed = {
            "detected_liters": 14.28, "detected_amount": 10000.0, "fuel_price": 700.0,
            "is_consistent": True, "ocr_confidence": 0.05, "raw_numbers": [("10000", 10000.0)],
        }
        gate = rules.evaluate(parsed, {"image_quality": "valid", "quality_score": 0.2}, fuel_price=700.0)
        self.assertFalse(gate["success"])
        self.assertIn("Confiance", gate["message"])


if __name__ == "__main__":
    unittest.main()