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.7 KB · 73 lines python
Raw Blame History
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