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_gloriafood.py4# Desc: Connecteur GloriaFood (Palier 1, takeout, enrichissement) —5# build_menu tolérant : categories[].items[] avec variantes `sizes`6# -> options Format en price_delta, payload liste toléré, doublons7# de catégories écartés.8# ==============================================================================9from restoka.connectors.gloriafood import build_menu1011PAYLOAD = {"categories": [12 {"name": "Pizzas", "items": [13 {"name": "Margherita", "description": "Tomate, basilic",14 "price": 12.0,15 "sizes": [{"name": "Petite", "price": 12.0},16 {"name": "Grande", "price": 18.5},17 {"name": "", "price": 99.0}]}, # sans nom : écartée18 {"name": "Sans prix", "price": 0},19 ]},20 {"name": "Pizzas", "items": [{"name": "Dup", "price": 1.0}]},21 "pas-un-dict",22]}232425def test_build_menu_sizes_en_options():26 m = build_menu(PAYLOAD, "2026-08-25T00:00:00Z")27 assert m["price_context"] == "takeout"28 assert m["price_source"] == "gloriafood"29 assert len(m["sections"]) == 1 # doublon écarté30 items = m["sections"][0]["items"]31 assert items[0]["price"] == 12.032 fmt = items[0]["options"][0]33 assert fmt["group"] == "Format" and fmt["required"] is True34 assert fmt["choices"] == [35 {"name": "Petite", "price_delta": 0.0},36 {"name": "Grande", "price_delta": 6.5}]37 assert items[1]["price"] is None # prix 0 -> inconnu38 assert "options" not in items[1]394041def test_build_menu_payload_liste_et_vide():42 # payload directement en liste de catégories : toléré43 m = build_menu(PAYLOAD["categories"], "x")44 assert m and m["sections"]45 assert build_menu({}, "x") is None46 assert build_menu({"categories": []}, "x") is None47