File size: 1,646 Bytes
8b96826 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """Geoapify autocomplete tool with mocked HTTP."""
import requests as requests_lib
from app.tools import geocode
def make_geoapify(features):
return {"features": features}
def feature(name, formatted, lat, lon):
return {"properties": {"name": name, "formatted": formatted, "lat": lat, "lon": lon}}
def test_autocomplete_returns_lucknow_suggestions(monkeypatch, fake_response):
payload = make_geoapify([
feature("Hazratganj", "Hazratganj, Lucknow, UP, India", 26.8488, 80.9436),
feature("Hazratganj Metro", "Hazratganj Metro Station, Lucknow", 26.8501, 80.9442),
])
monkeypatch.setattr(geocode.requests, "get", lambda *a, **k: fake_response(payload))
results = geocode.autocomplete_place("hazra")
assert len(results) == 2
assert results[0]["name"] == "Hazratganj"
assert results[0]["lat"] == 26.8488
def test_autocomplete_filters_out_of_city_results(monkeypatch, fake_response):
payload = make_geoapify([
feature("Hazrat Nizamuddin", "Hazrat Nizamuddin, Delhi", 28.59, 77.25),
])
monkeypatch.setattr(geocode.requests, "get", lambda *a, **k: fake_response(payload))
assert geocode.autocomplete_place("hazrat") == []
def test_autocomplete_empty_on_network_failure(monkeypatch):
def boom(*args, **kwargs):
raise requests_lib.Timeout("slow")
monkeypatch.setattr(geocode.requests, "get", boom)
assert geocode.autocomplete_place("hazra") == []
def test_autocomplete_empty_without_key(monkeypatch):
from app import config
monkeypatch.setattr(config, "geoapify_key", lambda: None)
assert geocode.autocomplete_place("hazra") == []
|