# ============================================================================== # Author: Simon-Pierre Boucher # File: tests/test_gloriafood.py # Desc: Connecteur GloriaFood (Palier 1, takeout, enrichissement) — # build_menu tolérant : categories[].items[] avec variantes `sizes` # -> options Format en price_delta, payload liste toléré, doublons # de catégories écartés. # ============================================================================== from restoka.connectors.gloriafood import build_menu PAYLOAD = {"categories": [ {"name": "Pizzas", "items": [ {"name": "Margherita", "description": "Tomate, basilic", "price": 12.0, "sizes": [{"name": "Petite", "price": 12.0}, {"name": "Grande", "price": 18.5}, {"name": "", "price": 99.0}]}, # sans nom : écartée {"name": "Sans prix", "price": 0}, ]}, {"name": "Pizzas", "items": [{"name": "Dup", "price": 1.0}]}, "pas-un-dict", ]} def test_build_menu_sizes_en_options(): m = build_menu(PAYLOAD, "2026-08-25T00:00:00Z") assert m["price_context"] == "takeout" assert m["price_source"] == "gloriafood" assert len(m["sections"]) == 1 # doublon écarté items = m["sections"][0]["items"] assert items[0]["price"] == 12.0 fmt = items[0]["options"][0] assert fmt["group"] == "Format" and fmt["required"] is True assert fmt["choices"] == [ {"name": "Petite", "price_delta": 0.0}, {"name": "Grande", "price_delta": 6.5}] assert items[1]["price"] is None # prix 0 -> inconnu assert "options" not in items[1] def test_build_menu_payload_liste_et_vide(): # payload directement en liste de catégories : toléré m = build_menu(PAYLOAD["categories"], "x") assert m and m["sections"] assert build_menu({}, "x") is None assert build_menu({"categories": []}, "x") is None