Eerste merksite voor Cucina Food.

Statische HTML/CSS/JS: homepage, productlijnen, recepten, zoekbare winkelvinder.
This commit is contained in:
mo
2026-08-29 14:34:18 +02:00
commit 10e510682c
33 changed files with 4091 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
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")