Resto·Ka — tous les restaurants du Québec, menus complets et prix réels (famille ·Ka)
Python 69.3%
TypeScript 16.7%
CSS 7.9%
JavaScript 4.7%
HTML 1.4%
1# ==============================================================================2# Author: Simon-Pierre Boucher <contact@spboucher.ai>3# File: tests/test_menullm.py4# Desc: Validation aval des menus structurés par LLM — la barre de qualité5# est STRICTE : jamais de menu douteux en base (prix implausibles6# neutralisés, volume minimal, ratio de prix minimal).7# ==============================================================================8from restoka.menullm import validate91011def _raw(items, is_menu=True):12 return {"is_menu": is_menu,13 "sections": [{"name": "Plats", "items": items}]}141516def test_menu_valide():17 out = validate(_raw([{"name": f"Plat {i}", "price": 10.0 + i}18 for i in range(6)]))19 assert out and len(out["sections"][0]["items"]) == 620 assert out["sections"][0]["items"][0]["price"] == 10.021 assert out["sections"][0]["items"][0]["currency"] == "CAD"222324def test_pas_un_menu():25 assert validate(_raw([{"name": "Plat", "price": 10.0}], is_menu=False)) is None26 assert validate(None) is None272829def test_trop_peu_de_prix():30 # 4 plats avec prix < minimum de 5 -> rejeté31 assert validate(_raw([{"name": f"P{i}", "price": 12.0} for i in range(4)])) is None323334def test_ratio_de_prix_insuffisant():35 items = ([{"name": f"P{i}", "price": 12.0} for i in range(5)]36 + [{"name": f"S{i}", "price": None} for i in range(10)])37 assert validate(_raw(items)) is None # 5/15 = 33 % < 40 %383940def test_prix_implausible_neutralise():41 items = ([{"name": f"P{i}", "price": 12.0} for i in range(5)]42 + [{"name": "Erreur OCR", "price": 12345.0}])43 out = validate(_raw(items))44 assert out is not None45 bad = next(i for i in out["sections"][0]["items"] if i["name"] == "Erreur OCR")46 assert bad["price"] is None # jamais un prix aberrant en base474849def test_nom_trop_long_ecarte():50 items = ([{"name": f"P{i}", "price": 12.0} for i in range(5)]51 + [{"name": "x" * 300, "price": 9.0}])52 out = validate(_raw(items))53 assert all(len(i["name"]) <= 120 for i in out["sections"][0]["items"])54