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()