mirror of
https://github.com/zvx-echo6/recon.git
synced 2026-06-10 08:54:34 +02:00
77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
|
|
"""Tests for the /api/wiki-enrich endpoint (extraction #5 prep).
|
||
|
|
|
||
|
|
Plain-assert style (matching the other lib *_test.py; recon's venv has no
|
||
|
|
pytest). Builds a minimal Flask app with only wiki_enrich_bp registered (avoids
|
||
|
|
importing the full recon app) and points place_detail's lazy wiki_index
|
||
|
|
connection at an in-memory fixture DB. Run with pytest, or directly:
|
||
|
|
python -m lib.wiki_enrich_api_test
|
||
|
|
"""
|
||
|
|
import sqlite3
|
||
|
|
|
||
|
|
from flask import Flask
|
||
|
|
|
||
|
|
from lib import place_detail
|
||
|
|
from lib.wiki_enrich_api import wiki_enrich_bp
|
||
|
|
|
||
|
|
|
||
|
|
def _client():
|
||
|
|
"""Fresh in-memory wiki_index fixture + a minimal app with just the route."""
|
||
|
|
conn = sqlite3.connect(":memory:", check_same_thread=False)
|
||
|
|
conn.row_factory = sqlite3.Row
|
||
|
|
conn.execute(
|
||
|
|
"CREATE TABLE wiki_places (wikidata_id TEXT, place_name TEXT, country_code TEXT, "
|
||
|
|
"summary TEXT, wiki_population TEXT, wikipedia_title TEXT, wikivoyage_title TEXT)"
|
||
|
|
)
|
||
|
|
conn.execute(
|
||
|
|
"INSERT INTO wiki_places VALUES (?,?,?,?,?,?,?)",
|
||
|
|
("Q830149", "Filer", "us", "A city in Idaho.", "2508", "Filer, Idaho", "Filer"),
|
||
|
|
)
|
||
|
|
conn.commit()
|
||
|
|
# Point the lazy module-level connection at the fixture so
|
||
|
|
# _get_wiki_index_db()/lookup_wiki_index() use it (bypasses the file path).
|
||
|
|
place_detail._wiki_index_conn = conn
|
||
|
|
app = Flask(__name__)
|
||
|
|
app.register_blueprint(wiki_enrich_bp)
|
||
|
|
return app.test_client()
|
||
|
|
|
||
|
|
|
||
|
|
def test_wiki_enrich_hit_by_wikidata():
|
||
|
|
resp = _client().get("/api/wiki-enrich?wikidata=Q830149")
|
||
|
|
assert resp.status_code == 200, resp.status_code
|
||
|
|
d = resp.get_json()
|
||
|
|
assert d["wiki_summary"] == "A city in Idaho."
|
||
|
|
assert d["wiki_population"] == 2508 # cast to int
|
||
|
|
assert d["wiki_url"] == "https://en.wikipedia.org/wiki/Filer,_Idaho"
|
||
|
|
assert d["wikivoyage_url"] == "https://en.wikivoyage.org/wiki/Filer"
|
||
|
|
|
||
|
|
|
||
|
|
def test_wiki_enrich_no_match_404():
|
||
|
|
resp = _client().get("/api/wiki-enrich?wikidata=Q9999999")
|
||
|
|
assert resp.status_code == 404, resp.status_code
|
||
|
|
|
||
|
|
|
||
|
|
def test_wiki_enrich_name_country_fallback():
|
||
|
|
resp = _client().get("/api/wiki-enrich?name=Filer&country=US")
|
||
|
|
assert resp.status_code == 200, resp.status_code
|
||
|
|
assert resp.get_json()["wiki_summary"] == "A city in Idaho."
|
||
|
|
|
||
|
|
|
||
|
|
def test_wiki_enrich_no_key_400():
|
||
|
|
c = _client()
|
||
|
|
assert c.get("/api/wiki-enrich").status_code == 400
|
||
|
|
# name without country is not a usable key
|
||
|
|
assert c.get("/api/wiki-enrich?name=Filer").status_code == 400
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
failures = 0
|
||
|
|
for _name, _fn in sorted(globals().items()):
|
||
|
|
if _name.startswith("test_") and callable(_fn):
|
||
|
|
try:
|
||
|
|
_fn()
|
||
|
|
print(f"PASS {_name}")
|
||
|
|
except Exception as exc: # noqa: BLE001
|
||
|
|
failures += 1
|
||
|
|
print(f"FAIL {_name}: {exc!r}")
|
||
|
|
print("OK" if failures == 0 else f"{failures} FAILED")
|
||
|
|
raise SystemExit(1 if failures else 0)
|