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