osint-dashboard/tests/test_sentinel1_frontend.py
Sirius DevOps c48788d4b6
fix(map): geofence delete, vessel snapshots, sentinel cache, news briefs
Geofences could be drawn but not removed. VesselAPI Hormuz dots vanished
on restart and DVR skipped between the 5 daily polls. Sentinel-1 re-hit
STAC on every pan and often painted a neighbouring swath. Executive
briefs truncated; ticker stayed empty unless something was critical.

- Layer-panel list + polygon popup DELETE /api/geofences/{id}
- Persist VesselAPI polls to vessels (UTC-day purge, DVR as-of, boot hydrate)
- Cache Sentinel-1 by 2° cell; pick covering scene; clip Leaflet tiles
- Retry truncated LLM JSON; ticker falls back to medium/low; 3-min HUD poll
2026-08-29 20:40:27 -04:00

49 lines
1.8 KiB
Python

"""Sentinel-1 SAR layer: Leaflet toggle contract (no browser STAC/TiTiler)."""
from __future__ import annotations
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
HTML = (ROOT / "app/static/index.html").read_text()
def test_sentinel1_toggle_default_off():
assert 'id="lp-sentinel-on"' in HTML
assert 'id="sentinel-1-sar"' in HTML
assert "Sentinel-1 SAR (Cloud-Penetrating)" in HTML
on = HTML.split('id="lp-sentinel-on"', 1)[1].split(">", 1)[0]
assert "checked" not in on
def test_sentinel1_fetches_backend_not_planetary_computer():
assert "/api/map/sentinel1?bbox=" in HTML
assert "titiler.xyz" not in HTML
js = HTML.split("async function loadSentinel1", 1)[1].split("function loadThermal", 1)[0]
assert "planetarycomputer" not in js.lower()
assert "stac" not in js.lower()
def test_sentinel1_hud_errors_not_alert():
js = HTML.split("async function loadSentinel1", 1)[1].split("function loadThermal", 1)[0]
assert "alert(" not in js
assert "No Sentinel-1 imagery for this view in the last 7 days." in js
assert "retry later" in js
assert "opacity: sentinelOpacity" in js
assert "maxZoom: 18" in js
assert "L.tileLayer(body.tileUrl" in js
def test_sentinel1_not_fetched_on_init_unless_on():
init = HTML.split("function initMap", 1)[1].split("function readMapPrefs", 1)[0]
assert "loadSentinel1()" not in init
refresh = HTML.split("function refreshLiveOverlays", 1)[1].split("function addExtraAttrib", 1)[0]
assert "if (sentinelOn) loadSentinel1();" in refresh
def test_sentinel1_reuses_covering_scene_and_clips_tiles():
js = HTML.split("async function loadSentinel1", 1)[1].split("function loadThermal", 1)[0]
assert "sentinelStillCovers" in HTML
assert "itemId" in js
assert "L.latLngBounds" in js
assert "sentinelBounds" in HTML