YELY_AI_Module / tests /test_postprocess.py
danielxdata's picture
Module IA YELY - CRNN fine-tune, API FastAPI, interface demo
b510add
Raw
History Blame Contribute Delete
2.68 kB
import unittest
from app import postprocess
class TestPostprocess(unittest.TestCase):
def test_all_three_fields_consistent(self):
recognized = [
{"field": "prix", "text": "10000", "confidence": 0.98},
{"field": "volume", "text": "14,28", "confidence": 0.95},
{"field": "prix_litre", "text": "700", "confidence": 0.90},
]
res = postprocess.process(recognized, fuel_price=700)
self.assertEqual(res["detected_amount"], 10000.0)
self.assertAlmostEqual(res["detected_liters"], 14.28, places=2)
self.assertEqual(res["fuel_price"], 700.0)
self.assertTrue(res["is_consistent"])
def test_configured_fuel_price_overrides_screen_reading(self):
# Le prix configuré côté YELY doit toujours l'emporter sur celui lu
# à l'écran, même si le CRNN lit une valeur différente (mauvaise
# lecture ou écran mal calibré) — règle métier n°1.
recognized = [
{"field": "prix", "text": "10000", "confidence": 0.98},
{"field": "volume", "text": "14.28", "confidence": 0.95},
{"field": "prix_litre", "text": "650", "confidence": 0.40},
]
res = postprocess.process(recognized, fuel_price=700)
self.assertEqual(res["fuel_price"], 700.0)
def test_liters_only_computes_amount(self):
recognized = [{"field": "volume", "text": "20.00", "confidence": 0.9}]
res = postprocess.process(recognized, fuel_price=875)
self.assertAlmostEqual(res["detected_liters"], 20.0, places=2)
self.assertIsNone(res["detected_amount"])
self.assertEqual(res["calculated_amount"], 17500.0)
def test_amount_only_computes_liters(self):
recognized = [{"field": "prix", "text": "10000", "confidence": 0.9}]
res = postprocess.process(recognized, fuel_price=875)
self.assertIsNone(res["detected_liters"])
self.assertEqual(res["detected_amount"], 10000.0)
self.assertAlmostEqual(res["calculated_liters"], 11.43, places=2)
def test_inconsistent_values_detected(self):
recognized = [
{"field": "prix", "text": "10000", "confidence": 0.9},
{"field": "volume", "text": "20.00", "confidence": 0.9},
]
res = postprocess.process(recognized, fuel_price=875)
self.assertFalse(res["is_consistent"])
def test_no_recognized_fields(self):
res = postprocess.process([], fuel_price=875)
self.assertEqual(res["raw_numbers"], [])
self.assertIsNone(res["detected_liters"])
self.assertIsNone(res["detected_amount"])
if __name__ == "__main__":
unittest.main()