import json import unicodedata from pathlib import Path ROOT = Path(__file__).resolve().parents[1] def norm(s: str) -> str: s = unicodedata.normalize("NFD", s or "") s = "".join(c for c in s if unicodedata.category(c) != "Mn") return s.lower().replace("'", "").replace("’", "") def search(stores, q, limit=40): q = norm(q).strip() if len(q) < 2: return [] hits = [] for s in stores: blob = norm(" ".join([s.get("city", ""), s.get("address", ""), str(s.get("id", "")), s.get("label", "")])) if q in blob: hits.append(s) if len(hits) >= limit: break return hits def test_amsterdam_not_empty(): stores = json.loads((ROOT / "data/stores.json").read_text()) hits = search(stores, "amsterdam") assert len(hits) >= 5, hits[:3] assert all("amster" in norm(h["city"]) or "amster" in norm(h["label"]) for h in hits[:5]) def test_empty_query(): stores = json.loads((ROOT / "data/stores.json").read_text()) assert search(stores, "") == [] assert search(stores, "a") == [] def test_unknown_city(): stores = json.loads((ROOT / "data/stores.json").read_text()) assert search(stores, "xyzzyfoo") == [] if __name__ == "__main__": test_amsterdam_not_empty() test_empty_query() test_unknown_city() print("ok")