mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-07-25 05:00:57 +02:00
fix: restore CCTV layer ingestion and map rendering
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
"""Regression tests for CCTV ingestion and persistence."""
|
||||
|
||||
import threading
|
||||
|
||||
from services import cctv_pipeline
|
||||
|
||||
|
||||
class DummyIngestor(cctv_pipeline.BaseCCTVIngestor):
|
||||
def __init__(self, cameras):
|
||||
self._cameras = cameras
|
||||
|
||||
def fetch_data(self):
|
||||
return self._cameras
|
||||
|
||||
|
||||
def test_ingestor_can_run_from_another_thread(tmp_path, monkeypatch):
|
||||
db_path = tmp_path / "data" / "cctv.db"
|
||||
monkeypatch.setattr(cctv_pipeline, "DB_PATH", db_path)
|
||||
|
||||
ingestor = DummyIngestor(
|
||||
[
|
||||
{
|
||||
"id": "cam-1",
|
||||
"source_agency": "Test",
|
||||
"lat": 51.5,
|
||||
"lon": -0.12,
|
||||
"direction_facing": "North",
|
||||
"media_url": "https://example.com/camera.jpg",
|
||||
"refresh_rate_seconds": 30,
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
thread = threading.Thread(target=ingestor.ingest)
|
||||
thread.start()
|
||||
thread.join()
|
||||
|
||||
cameras = cctv_pipeline.get_all_cameras()
|
||||
assert len(cameras) == 1
|
||||
assert cameras[0]["id"] == "cam-1"
|
||||
assert cameras[0]["media_type"] == "image"
|
||||
|
||||
|
||||
def test_ingest_updates_existing_rows_in_persistent_data_dir(tmp_path, monkeypatch):
|
||||
db_path = tmp_path / "persistent" / "cctv.db"
|
||||
monkeypatch.setattr(cctv_pipeline, "DB_PATH", db_path)
|
||||
|
||||
DummyIngestor(
|
||||
[
|
||||
{
|
||||
"id": "cam-2",
|
||||
"source_agency": "Test",
|
||||
"lat": 40.71,
|
||||
"lon": -74.0,
|
||||
"direction_facing": "East",
|
||||
"media_url": "https://example.com/old.jpg",
|
||||
"refresh_rate_seconds": 60,
|
||||
}
|
||||
]
|
||||
).ingest()
|
||||
DummyIngestor(
|
||||
[
|
||||
{
|
||||
"id": "cam-2",
|
||||
"source_agency": "Test",
|
||||
"lat": 40.71,
|
||||
"lon": -74.0,
|
||||
"direction_facing": "East",
|
||||
"media_url": "https://example.com/live.m3u8",
|
||||
"refresh_rate_seconds": 60,
|
||||
}
|
||||
]
|
||||
).ingest()
|
||||
|
||||
cameras = cctv_pipeline.get_all_cameras()
|
||||
assert db_path.exists()
|
||||
assert len(cameras) == 1
|
||||
assert cameras[0]["media_url"] == "https://example.com/live.m3u8"
|
||||
assert cameras[0]["media_type"] == "hls"
|
||||
Reference in New Issue
Block a user