from pathlib import Path from tests.frontend_contract import assert_calls, assert_mentions, assert_wired, read_map_workspace ROOT = Path(__file__).resolve().parents[2] def read(path: str) -> str: return (ROOT / path).read_text(encoding="utf-8") def test_work_area_change_clears_stale_spatial_results_before_switching_area() -> None: workspace = read_map_workspace() assert "const handleSelectMapArea = (areaId: string) => {" in workspace assert "clearAreaSelection()\n onSelectMapArea(areaId)" in workspace # One call site is a formatting rule; the contract is that the area # selector routes through the handler that clears the drawn selection. assert_calls(workspace, "handleSelectMapArea", first_argument="event.target.value") def test_cancelled_selection_requests_cannot_restore_stale_results() -> None: selection_hook = read("frontend/src/hooks/useMapSelectionExtract.ts") themes_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts") assert "const requestSequence = useRef(0)" in selection_hook assert "requestSequence.current += 1\n setMapSelectionBbox(null)" in selection_hook assert "if (requestSequence.current !== sequence)" in selection_hook assert "const requestSequence = useRef(0)" in themes_hook assert "requestSequence.current += 1\n setThemeInsights([])" in themes_hook assert "if (requestSequence.current !== sequence)" in themes_hook def test_viewport_status_uses_end_user_map_language() -> None: hook = read("frontend/src/hooks/useViewportVectorLayer.ts") assert "load buildings from PostGIS" not in hook assert "Zichtbare kaartobjecten laden..." in hook assert "kaartobjecten getoond" in hook assert "PostGIS" not in hook