Spaces:
Sleeping
Sleeping
| """Tests for the 2D dispatch visualizer.""" | |
| from __future__ import annotations | |
| from pathlib import Path | |
| from src.models import ( | |
| IncidentSeverity, | |
| IncidentState, | |
| IncidentStatus, | |
| IncidentType, | |
| State, | |
| UnitState, | |
| UnitStatus, | |
| UnitType, | |
| ) | |
| from src.visualizer.viewer import Viewer2D | |
| def _state() -> State: | |
| unit = UnitState( | |
| unit_id="MED-1", | |
| unit_type=UnitType.MEDIC, | |
| status=UnitStatus.AVAILABLE, | |
| location_x=10.0, | |
| location_y=10.0, | |
| assigned_incident_id=None, | |
| eta_seconds=0.0, | |
| crew_count=2, | |
| ) | |
| inc = IncidentState( | |
| incident_id="INC-001", | |
| incident_type=IncidentType.CARDIAC_ARREST, | |
| severity=IncidentSeverity.PRIORITY_1, | |
| location_x=12.0, | |
| location_y=14.0, | |
| reported_at_step=0, | |
| units_assigned=[], | |
| status=IncidentStatus.PENDING, | |
| survival_clock=100.0, | |
| ) | |
| return State( | |
| units={unit.unit_id: unit}, | |
| incidents={inc.incident_id: inc}, | |
| episode_id="ep", | |
| step_count=0, | |
| task_id="single_incident", | |
| city_time=0.0, | |
| metadata={"grid_size": [100, 100]}, | |
| ) | |
| def test_update_syncs_fields() -> None: | |
| viewer = Viewer2D() | |
| st = _state() | |
| viewer.update(st) | |
| assert viewer.step_count == 0 | |
| assert viewer.task_id == "single_incident" | |
| assert "MED-1" in viewer.units | |
| def test_render_png_bytes() -> None: | |
| viewer = Viewer2D() | |
| viewer.update(_state()) | |
| png = viewer.render() | |
| assert png[:8] == b"\x89PNG\r\n\x1a\n" | |
| def test_render_to_file(tmp_path: Path) -> None: | |
| viewer = Viewer2D() | |
| out = tmp_path / "frame.png" | |
| viewer.render_to_file(str(out), _state()) | |
| assert out.exists() | |
| assert out.read_bytes()[:8] == b"\x89PNG\r\n\x1a\n" | |