osint-dashboard/tests/test_api_live_layers.py

40 lines
1.2 KiB
Python
Raw Permalink Normal View History

"""API contract tests for live overlay endpoints (no DB required)."""
import asyncio
import httpx
from live_layers import overlay_catalog
from main import app
BASE = "http://test"
async def _get(path: str) -> httpx.Response:
transport = httpx.ASGITransport(app=app)
async with httpx.AsyncClient(transport=transport, base_url=BASE) as client:
return await client.get(path)
def test_map_layers_includes_overlays():
body = asyncio.run(_get("/api/map/layers")).json()
assert "layers" in body
overlays = body["overlays"]
for key in ("radar_iem", "radar_rainviewer", "gibs_thermal",
"aircraft", "vessels", "trains", "nws_alerts",
"wfigs_incidents", "wfigs_perimeters"):
assert key in overlays
assert overlay_catalog()["radar_iem"]["tileUrl"].startswith("https://mesonet")
def test_aircraft_requires_bbox():
resp = asyncio.run(_get("/api/aircraft"))
assert resp.status_code == 422
def test_vessels_empty_without_ais_key():
resp = asyncio.run(_get("/api/vessels"))
assert resp.status_code == 200
assert resp.json() == []
assert "max-age" in (resp.headers.get("cache-control") or "").lower()