Files
IQ.Pilot/iqpilot/selfdrive/ui/tests/test_nav_search.py
2026-08-27 20:17:33 -05:00

96 lines
2.9 KiB
Python

"""
Copyright (c) IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos
"""
from types import SimpleNamespace
from iqpilot.selfdrive.ui.lib import nav_search
class FakeParams:
def get(self, key, *args, **kwargs):
return {
"AmapWebServiceKey": "amap-key",
"OsmLocationName": "CN",
"MapboxToken": "mapbox-key",
}.get(key)
def test_china_search_uses_amap_without_calling_mapbox(monkeypatch):
search = nav_search.NavSearch.__new__(nav_search.NavSearch)
search._params = FakeParams()
search._seq = 1
search._results = []
search._searching = True
search._amap_adcode = ""
import threading
search._lock = threading.Lock()
amap_client = SimpleNamespace(
is_mainland_china_configured=lambda *args, **kwargs: True,
get_key=lambda *args, **kwargs: "amap-key",
status=lambda: "ok",
reverse_adcode=lambda *args, **kwargs: "",
autocomplete=lambda *args, **kwargs: [],
)
monkeypatch.setattr(nav_search, "_amap_client", amap_client)
monkeypatch.setattr(nav_search, "current_or_last_gps_position", lambda *_: (39.9, 116.4, 0.0, True))
monkeypatch.setattr(amap_client, "reverse_adcode", lambda *args, **kwargs: "110000")
monkeypatch.setattr(amap_client, "autocomplete", lambda *args, **kwargs: [
SimpleNamespace(
name="Tiananmen",
address="Dongcheng, Beijing",
provider_id="B000A83M61",
latitude=39.9087,
longitude=116.3975,
),
])
monkeypatch.setattr(nav_search.requests, "get", lambda *args, **kwargs: (_ for _ in ()).throw(AssertionError("Mapbox called")))
search._do_search("Tiananmen", 1)
assert len(search._results) == 1
assert search._results[0].provider == "amap"
assert search._results[0].has_coords
def test_non_china_search_preserves_mapbox_request(monkeypatch):
search = nav_search.NavSearch.__new__(nav_search.NavSearch)
search._params = FakeParams()
search._session = "session"
search._seq = 1
search._results = []
search._searching = True
search._amap_adcode = ""
import threading
search._lock = threading.Lock()
captured = {}
class Response:
def raise_for_status(self):
return None
def json(self):
return {"suggestions": []}
def get(url, *, params, timeout):
captured.update(url=url, params=params, timeout=timeout)
return Response()
monkeypatch.setattr(nav_search, "current_or_last_gps_position", lambda *_: (41.3, -90.2, 0.0, True))
monkeypatch.setattr(nav_search, "resolve_mapbox_token", lambda *_: "mapbox-key")
monkeypatch.setattr(nav_search, "_amap_client", None)
monkeypatch.setattr(nav_search.requests, "get", get)
search._do_search("Home", 1)
assert captured["url"] == f"{nav_search.SEARCHBOX}/suggest"
assert captured["params"] == {
"q": "Home",
"access_token": "mapbox-key",
"session_token": "session",
"limit": nav_search.MAX_RESULTS,
"language": "en",
"proximity": "-90.2,41.3",
}
assert captured["timeout"] == 8