SPB Git forge

spb/resto-ka

Public

Resto·Ka — tous les restaurants du Québec, menus complets et prix réels (famille ·Ka)

52commits 1branches 0releases
11.6 MBsize
maindefault branch
19 days agolast push
Python 69.3% TypeScript 16.7% CSS 7.9% JavaScript 4.7% HTML 1.4%
2.6 KB · 59 lines python
Raw Blame History
1# ==============================================================================2# Author: Simon-Pierre Boucher <contact@spboucher.ai>3# File:   tests/test_chownow.py4# Desc:   Connecteur ChowNow (Palier 1, takeout) — parse_geo, build_options5#         (graphe des modificateurs -> options §5.2), build_menu (size suffixé,6#         doublons de sections écartés), prix réels non majorés.7# ==============================================================================8from restoka.connectors.chownow import build_menu, build_options, parse_geo91011def test_parse_geo():12    assert parse_geo("45.5017,-73.5673") == (45.5017, -73.5673)13    assert parse_geo("") == (None, None)14    assert parse_geo("n/a") == (None, None)151617def test_build_options_graphe_modificateurs():18    item = {"modifier_categories": [10, 99]}      # 99 inconnu : ignoré19    mod_cats = {"10": {"name": "Format", "min_qty": 1, "modifiers": [1, 2, 3]}}20    mods = {"1": {"name": "10 pouces", "price": 0},21            "2": {"name": "14 pouces", "price": 6.0},22            "3": {"name": "", "price": 1.0}}      # sans nom : écarté23    opts = build_options(item, mod_cats, mods)24    assert len(opts) == 125    assert opts[0]["group"] == "Format" and opts[0]["required"] is True26    assert opts[0]["choices"] == [27        {"name": "10 pouces", "price_delta": 0.0},28        {"name": "14 pouces", "price_delta": 6.0}]293031PAYLOAD = {32    "menu_categories": [33        {"name": "Pizzas", "items": [34            {"name": "Margherita", "description": "Tomate, basilic",35             "price": 16.5, "size": "Regular",36             "modifier_categories": [10]},37            {"name": "Végé", "price": 18.0, "size": "14 pouces"},38        ]},39        {"name": "Pizzas", "items": [{"name": "Dup", "price": 1.0}]},40        {"name": "", "items": [{"name": "Orphelin", "price": 2.0}]},41    ],42    "modifier_categories": [43        {"id": 10, "name": "Croûte", "min_qty": 0, "modifiers": [1]}],44    "modifiers": [{"id": 1, "name": "Sans gluten", "price": 3.0}],45}464748def test_build_menu():49    m = build_menu(PAYLOAD, "2026-08-25T00:00:00Z")50    assert m["price_context"] == "takeout" and m["price_source"] == "chownow"51    assert len(m["sections"]) == 1                # doublon + sans-nom écartés52    items = m["sections"][0]["items"]53    assert items[0]["name"] == "Margherita"       # size Regular : pas suffixé54    assert items[0]["price"] == 16.5055    assert items[0]["options"][0]["group"] == "Croûte"56    assert items[0]["options"][0]["required"] is False57    assert items[1]["name"] == "Végé (14 pouces)"  # size suffixé au nom58    assert build_menu({}, "x") is None59