osint-dashboard/tests
Sirius DevOps 665aaec22f feat(aircraft): planespotters.net photo in aircraft popup
Add planespotters.net latest-photo lookup for ADS-B aircraft.

- app/live_layers.py: fetch_planespotters_photo() (hex preferred, reg
  fallback) + _normalize_planespotter_photo(); 24h TTL cache (their ToS cap).
- app/main.py: GET /api/aircraft/photo?hex=...|reg=... (422/404/502).
- app/static/index.html: .ps-photo block in ADS-B popup; lazy load on
  popupopen; thumbnail links to photo page + photographer credit.

Server-side proxy, not browser fetch(): planespotters 403s any request
carrying an Origin header (every browser fetch() sends one). The thumbnail
binary is loaded by the browser straight from their CDN, never re-hosted.

Tests: 4 unit + 4 API contract (38 pass in the two files).
2026-08-28 22:58:04 -04:00
..
conftest.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
test_api_fires.py Add NASA FIRMS active-fire ingest + /api/fires; API keys management page 2026-08-24 15:37:42 -04:00
test_api_live_layers.py feat(aircraft): planespotters.net photo in aircraft popup 2026-08-28 22:58:04 -04:00
test_api_news.py feat: 23:00 daily news recap; prompts drop futures 2026-08-28 22:53:31 -04:00
test_api_settings.py feat: persist summarizer model in app_settings 2026-08-28 17:06:55 -04:00
test_bg_jobs.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_cache_and_timeline.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_camera_popup_contract.py fix: hydrate camera popup from GET /api/cameras/{id} 2026-08-28 20:04:53 -04:00
test_event_ingest.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_fire_aircraft.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_fire_ingest.py fix: chunk FIRMS bulk inserts under asyncpg 32767 bind cap 2026-08-28 22:22:12 -04:00
test_fire_sources.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_frontend_reliability.py feat: 23:00 daily news recap; prompts drop futures 2026-08-28 22:53:31 -04:00
test_geofence.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_health_ready.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_live_layers.py feat(aircraft): planespotters.net photo in aircraft popup 2026-08-28 22:58:04 -04:00
test_map_payloads.py perf: slim fires/cameras/events/news map payloads 2026-08-27 21:19:42 -04:00
test_new_sources.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_news_scraper.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_phase1_guardrails.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_phase2_api.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_tracks.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00
test_upstream_cache.py fix: pipeline reliability — WS, summarizer, ingest, health 2026-08-28 21:49:05 -04:00
test_ws_manager.py feat: lean-Pi WS fan-out, geofences, DVR playback, fire/aircraft correlation 2026-08-28 09:35:18 -04:00