osint-dashboard/news/summerizer/tests/test_intel.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

61 lines
2.5 KiB
Python

from intel import parse_reduce_json, clamp_coords, select_ticker, select_map
FENCED = """```json
{"summary_en": "Brief.", "ticker": [
{"headline": "Blast in Kyiv", "importance": "critical", "url": "https://ex", "location_name": "Kyiv"}
], "map_items": [
{"headline": "Blast in Kyiv", "importance": "critical", "location_name": "Kyiv, Ukraine",
"lat": 50.45, "lon": 30.52, "location_confidence": "city", "category": "military/conflict", "url": "https://ex"}
]}
```"""
def test_parse_strips_fence_and_think_tags():
raw = "<think>nope</think>\n" + FENCED
out = parse_reduce_json(raw)
assert out["summary_en"] == "Brief."
assert len(out["ticker"]) == 1
def test_parse_empty_and_garbage_returns_empty_struct():
assert parse_reduce_json("")["summary_en"] == ""
assert parse_reduce_json("not json")["ticker"] == []
def test_clamp_coords_drops_out_of_range_and_unknown():
assert clamp_coords(50.45, 30.52) == (50.45, 30.52)
assert clamp_coords(95.0, 10.0) is None
assert clamp_coords(None, 10.0) is None
assert clamp_coords("50.45", "30.52") == (50.45, 30.52)
def test_select_ticker_keeps_critical_high_caps_12():
rows = [{"headline": f"h{i}", "importance": "critical"} for i in range(15)]
rows.append({"headline": "skip", "importance": "low"})
out = select_ticker(rows)
assert len(out) == 12
assert all(r["importance"] in ("critical", "high") for r in out)
def test_select_ticker_falls_back_to_medium_low_when_nothing_flagged():
rows = [
{"headline": "shop theft", "importance": "low"},
{"headline": "highway crash", "importance": "medium"},
{"headline": "none", "importance": "none"},
]
out = select_ticker(rows)
assert [r["headline"] for r in out] == ["highway crash", "shop theft"]
def test_select_map_requires_valid_coords_and_flag():
items = [
{"headline": "A", "importance": "critical", "lat": 50.45, "lon": 30.52, "location_name": "Kyiv"},
{"headline": "B", "importance": "critical", "lat": None, "lon": None, "location_name": "Unknown"},
{"headline": "C", "importance": "low", "lat": 1.0, "lon": 2.0, "location_name": "x"},
]
out = select_map(items)
assert [r["headline"] for r in out] == ["A"]
def test_select_map_caps_20():
items = [
{"headline": f"h{i}", "importance": "critical", "lat": 1.0, "lon": 2.0}
for i in range(25)
]
out = select_map(items)
assert len(out) == 20
assert all(r["importance"] in ("critical", "high") for r in out)