# ============================================================================== # Author: Simon-Pierre Boucher # File: tests/test_mtlalim.py # Desc: Connecteur mtl-alim (découverte Montréal) — whitelist des types # food-service, filtre GPS île de Montréal, services takeout-only, # fiches sans menu qui passent finalize(). # ============================================================================== from restoka.connectors.mtlalim import MtlAlimConnector, TYPE_MAP def _row(**over): base = { "business_id": "12345", "name": "Chez Test", "type": "Restaurant", "statut": "Ouvert", "address": "123 Rue Principale", "city": "Montréal", "latitude": "45.52", "longitude": "-73.58", } base.update(over) return base def test_type_whitelist(): c = MtlAlimConnector() assert c._to_restaurant(_row()) is not None # types hors périmètre (épicerie, distributrice…) : ignorés assert c._to_restaurant(_row(type="Épicerie")) is None assert c._to_restaurant(_row(type="Distributrice")) is None assert c._to_restaurant(_row(type="")) is None def test_mapping_et_services(): c = MtlAlimConnector() r = c._to_restaurant(_row(type="Camion-cuisine")) assert r.establishment_type == "food-truck" assert r.services == ["takeout"] # pas de salle r = c._to_restaurant(_row(type="Restaurant")) assert r.establishment_type == "restaurant" assert "salle" in r.services r = c._to_restaurant(_row(type="Bar laitier saisonnier")) assert r.establishment_type == "casse-croute" def test_gps_hors_ile_rejete(): c = MtlAlimConnector() r = c._to_restaurant(_row(latitude="0", longitude="0")) assert r.lat is None and r.lng is None # aberrant -> géocodage aval r = c._to_restaurant(_row(latitude="46.81", longitude="-71.21")) assert r.lat is None # Québec ≠ île de Montréal r = c._to_restaurant(_row()) assert r.lat == 45.52 and r.lng == -73.58 def test_champs_obligatoires_et_finalize(): c = MtlAlimConnector() assert c._to_restaurant(_row(name="")) is None assert c._to_restaurant(_row(business_id="")) is None r = c._to_restaurant(_row()) r.finalize() assert r.uid == "mtl-alim:12345" assert r.region == "Montréal" assert r.menu is None # découverte : pas de menu def test_type_map_couvre_le_perimetre(): # garde-fou : la whitelist reste food-service seulement assert set(TYPE_MAP.values()) <= { "restaurant", "fast-food", "casse-croute", "bar", "boulangerie-patisserie", "traiteur", "food-truck"}