# ============================================================================== # Author: Simon-Pierre Boucher # File: tests/test_osm.py # Desc: Régression du connecteur de découverte OpenStreetMap — rejeu HORS # LIGNE d'une fixture Overpass réelle : normalisation nœud/chemin, # POI sans nom rejeté, cuisines mappées, région par ville et par # ancre lat/lng, services takeaway/delivery. # ============================================================================== import json from pathlib import Path import pytest from restoka.connectors.osm import OsmConnector FIXTURE = json.loads( (Path(__file__).parent / "fixtures" / "osm" / "elements.json") .read_text(encoding="utf-8")) class OfflineOsm(OsmConnector): def _overpass(self, key, value): return FIXTURE["elements"] if (key, value) == ("amenity", "restaurant") else [] @pytest.fixture(scope="module") def restos(): return [r.finalize() for r in OfflineOsm().fetch()] def test_poi_sans_nom_rejete(restos): assert len(restos) == 2 # le 3e élément n'a pas de nom def test_noeud_complet(restos): r = next(x for x in restos if x.name == "Chez Rioux & Pettigrew") assert r.uid == "osm:node/1234567" assert r.address == "160 Quai Saint-André" assert r.region == "Capitale-Nationale" # via addr:city assert r.postal_code == "G1K 3Y2" assert "quebecois" in r.cuisines and "fruits-de-mer" in r.cuisines assert r.hours["osm"] == "Tu-Sa 17:30-22:00" assert "vegetarien" in r.dietary_options assert "salle" in r.services and "takeout" not in r.services assert r.menu is None # découverte : pas de menu def test_chemin_avec_centre(restos): r = next(x for x in restos if x.name == "Le Gros Jambon") assert r.uid == "osm:way/7654321" assert r.lat == pytest.approx(45.5236) assert r.region == "Montréal" # via ancre lat/lng (pas de ville) assert "quebecois" in r.cuisines assert "takeout" in r.services and "delivery" in r.services