| """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") == [] | |