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