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_mtlalim.py4# Desc: Connecteur mtl-alim (découverte Montréal) — whitelist des types5# food-service, filtre GPS île de Montréal, services takeout-only,6# fiches sans menu qui passent finalize().7# ==============================================================================8from restoka.connectors.mtlalim import MtlAlimConnector, TYPE_MAP91011def _row(**over):12 base = {13 "business_id": "12345",14 "name": "Chez Test",15 "type": "Restaurant",16 "statut": "Ouvert",17 "address": "123 Rue Principale",18 "city": "Montréal",19 "latitude": "45.52",20 "longitude": "-73.58",21 }22 base.update(over)23 return base242526def test_type_whitelist():27 c = MtlAlimConnector()28 assert c._to_restaurant(_row()) is not None29 # types hors périmètre (épicerie, distributrice…) : ignorés30 assert c._to_restaurant(_row(type="Épicerie")) is None31 assert c._to_restaurant(_row(type="Distributrice")) is None32 assert c._to_restaurant(_row(type="")) is None333435def test_mapping_et_services():36 c = MtlAlimConnector()37 r = c._to_restaurant(_row(type="Camion-cuisine"))38 assert r.establishment_type == "food-truck"39 assert r.services == ["takeout"] # pas de salle40 r = c._to_restaurant(_row(type="Restaurant"))41 assert r.establishment_type == "restaurant"42 assert "salle" in r.services43 r = c._to_restaurant(_row(type="Bar laitier saisonnier"))44 assert r.establishment_type == "casse-croute"454647def test_gps_hors_ile_rejete():48 c = MtlAlimConnector()49 r = c._to_restaurant(_row(latitude="0", longitude="0"))50 assert r.lat is None and r.lng is None # aberrant -> géocodage aval51 r = c._to_restaurant(_row(latitude="46.81", longitude="-71.21"))52 assert r.lat is None # Québec ≠ île de Montréal53 r = c._to_restaurant(_row())54 assert r.lat == 45.52 and r.lng == -73.58555657def test_champs_obligatoires_et_finalize():58 c = MtlAlimConnector()59 assert c._to_restaurant(_row(name="")) is None60 assert c._to_restaurant(_row(business_id="")) is None61 r = c._to_restaurant(_row())62 r.finalize()63 assert r.uid == "mtl-alim:12345"64 assert r.region == "Montréal"65 assert r.menu is None # découverte : pas de menu666768def test_type_map_couvre_le_perimetre():69 # garde-fou : la whitelist reste food-service seulement70 assert set(TYPE_MAP.values()) <= {71 "restaurant", "fast-food", "casse-croute", "bar",72 "boulangerie-patisserie", "traiteur", "food-truck"}73