# ============================================================================== # Author: Simon-Pierre Boucher # File: tests/test_chownow.py # Desc: Connecteur ChowNow (Palier 1, takeout) — parse_geo, build_options # (graphe des modificateurs -> options §5.2), build_menu (size suffixé, # doublons de sections écartés), prix réels non majorés. # ============================================================================== from restoka.connectors.chownow import build_menu, build_options, parse_geo def test_parse_geo(): assert parse_geo("45.5017,-73.5673") == (45.5017, -73.5673) assert parse_geo("") == (None, None) assert parse_geo("n/a") == (None, None) def test_build_options_graphe_modificateurs(): item = {"modifier_categories": [10, 99]} # 99 inconnu : ignoré mod_cats = {"10": {"name": "Format", "min_qty": 1, "modifiers": [1, 2, 3]}} mods = {"1": {"name": "10 pouces", "price": 0}, "2": {"name": "14 pouces", "price": 6.0}, "3": {"name": "", "price": 1.0}} # sans nom : écarté opts = build_options(item, mod_cats, mods) assert len(opts) == 1 assert opts[0]["group"] == "Format" and opts[0]["required"] is True assert opts[0]["choices"] == [ {"name": "10 pouces", "price_delta": 0.0}, {"name": "14 pouces", "price_delta": 6.0}] PAYLOAD = { "menu_categories": [ {"name": "Pizzas", "items": [ {"name": "Margherita", "description": "Tomate, basilic", "price": 16.5, "size": "Regular", "modifier_categories": [10]}, {"name": "Végé", "price": 18.0, "size": "14 pouces"}, ]}, {"name": "Pizzas", "items": [{"name": "Dup", "price": 1.0}]}, {"name": "", "items": [{"name": "Orphelin", "price": 2.0}]}, ], "modifier_categories": [ {"id": 10, "name": "Croûte", "min_qty": 0, "modifiers": [1]}], "modifiers": [{"id": 1, "name": "Sans gluten", "price": 3.0}], } def test_build_menu(): m = build_menu(PAYLOAD, "2026-08-25T00:00:00Z") assert m["price_context"] == "takeout" and m["price_source"] == "chownow" assert len(m["sections"]) == 1 # doublon + sans-nom écartés items = m["sections"][0]["items"] assert items[0]["name"] == "Margherita" # size Regular : pas suffixé assert items[0]["price"] == 16.50 assert items[0]["options"][0]["group"] == "Croûte" assert items[0]["options"][0]["required"] is False assert items[1]["name"] == "Végé (14 pouces)" # size suffixé au nom assert build_menu({}, "x") is None