# ============================================================================== # Author: Simon-Pierre Boucher # File: tests/test_skip.py # Desc: Connecteur SkipTheDishes (enrichissement livraison) — décodage # __NEXT_DATA__, téléphone dans les disclaimers, locationDetails # « Ville, PROV, POSTAL, CAN », menu en cents -> dollars, croisement # CONSERVATEUR verify_partner (rejet hors-QC, téléphone ou # postal+civique seulement). # ============================================================================== import json from restoka.connectors.skip import (build_menu, decode_next_data, parse_location_details, partner_payload, partner_phone, verify_partner) PARTNER = { "name": "Chez Test", "location": "123 Rue Principale", "locationDetails": "Montréal, QC, H2X 1Y4, CAN", "disclaimerModal": {"disclaimers": [ {"text": "Pour toute question, appelez le (514) 555-1234."}, ]}, } MENU_V2 = {"categories": [ {"name": "Poutines", "menuItems": [ {"name": "Classique", "description": "Frites, fromage, sauce", "subtotal": 1250}, {"name": "Sans prix", "subtotal": 0}, ]}, {"name": "", "menuItems": [{"name": "Orphelin", "subtotal": 100}]}, ]} def test_decode_next_data_et_payload(): state = {"props": {"pageProps": {"partner": PARTNER, "menuV2": MENU_V2}}} html = ('") decoded = decode_next_data(html) partner, menu = partner_payload(decoded) assert partner["name"] == "Chez Test" assert menu["categories"] assert decode_next_data("") is None def test_partner_phone_et_location_details(): assert partner_phone(PARTNER) == "+15145551234" assert parse_location_details("Windsor, ON, N9E 1S3, CAN") \ == ("Windsor", "ON", "N9E1S3") assert parse_location_details("n'importe quoi") == ("", "", "") def test_build_menu_cents_vers_dollars(): m = build_menu(MENU_V2, "2026-08-25T00:00:00Z") assert m["price_context"] == "delivery" and m["price_source"] == "skip" assert len(m["sections"]) == 1 # section sans nom écartée items = m["sections"][0]["items"] assert items[0]["price"] == 12.50 # 1250 cents assert items[1]["price"] is None # subtotal 0 -> prix inconnu assert build_menu({}, "x") is None def _row(**over): base = {"uid": "osm:1", "name": "Chez Test", "address": "123 Rue Principale", "city": "Montréal", "postal_code": "H2X 1Y4", "phone": "514-555-1234"} base.update(over) return base def test_verify_partner_telephone(): assert verify_partner(_row(), PARTNER) == "telephone" def test_verify_partner_postal_civique(): assert verify_partner(_row(phone=""), PARTNER) == "postal+civique" def test_verify_partner_rejets(): # hors Québec : rejet immédiat même si le téléphone matche hors_qc = dict(PARTNER, locationDetails="Windsor, ON, N9E 1S3, CAN") assert verify_partner(_row(), hors_qc) == "" # ni téléphone ni postal+civique : rejet assert verify_partner( _row(phone="", postal_code="G1A 1A1", address="999 Autre Rue"), PARTNER) == ""