Spaces:
Sleeping
Sleeping
| 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() | |