Files
LoraMapTester/server/tests/test_elevation.py
T
2026-06-11 09:09:28 +03:00

96 lines
2.6 KiB
Python

import core.elevation as elev
class _FakeResponse:
def __init__(self, payload):
self._payload = payload
def raise_for_status(self):
return None
def json(self):
return self._payload
class _FakeClient:
def __init__(self, **kwargs):
self.kwargs = kwargs
def __enter__(self):
return self
def __exit__(self, *args):
return False
def get(self, url, params=None):
return _FakeResponse({"elevation": [152.0]})
def test_probe_elevation_api_ok(monkeypatch):
monkeypatch.setattr(elev, "_probe_checked_at", 0.0)
monkeypatch.setattr(elev.httpx, "Client", _FakeClient)
status = elev.probe_elevation_api(force=True)
assert status["ok"] is True
assert status["error"] is None
def test_fetch_skips_when_unreachable(monkeypatch):
monkeypatch.setattr(
elev,
"probe_elevation_api",
lambda force=False: {"ok": False, "url": elev.ELEVATION_API_URL, "error": "down"},
)
vals = elev.fetch_elevations_batch([55.75], [37.62])
assert vals == [None]
def test_build_profile_reports_unreachable(monkeypatch):
monkeypatch.setattr(
elev,
"probe_elevation_api",
lambda force=False: {"ok": False, "url": elev.ELEVATION_API_URL, "error": "down"},
)
profile = elev.build_elevation_profile(
[{"lat": 55.75, "lon": 37.62}, {"lat": 55.76, "lon": 37.63}],
10,
)
assert profile["points"] == []
assert "unreachable" in profile["api_error"]
def test_find_nearest_hill_unreachable(monkeypatch):
monkeypatch.setattr(
elev,
"probe_elevation_api",
lambda force=False: {"ok": False, "url": elev.ELEVATION_API_URL, "error": "down"},
)
result = elev.find_nearest_hill(55.75, 37.62)
assert result["ok"] is False
def test_find_nearest_hill_picks_nearest_peak(monkeypatch):
monkeypatch.setattr(elev, "_probe_checked_at", 0.0)
monkeypatch.setattr(elev, "probe_elevation_api", lambda force=False: {"ok": True, "error": None})
def fake_batch(lats, lons):
out = []
for la, lo in zip(lats, lons):
if abs(la - 55.75) < 1e-4 and abs(lo - 37.62) < 1e-4:
out.append(100.0)
elif la > 55.75:
out.append(130.0)
else:
out.append(95.0)
return out
monkeypatch.setattr(elev, "fetch_elevations_batch", fake_batch)
result = elev.find_nearest_hill(55.75, 37.62, radius_m=2000, step_m=300, min_prominence_m=8)
assert result["ok"] is True
assert result["hill"]["elevation_m"] >= 120.0