from __future__ import annotations from pathlib import Path from tests.frontend_contract import assert_calls, assert_wired, read_map_workspace, read_feature ROOT = Path(__file__).resolve().parents[2] def read(path: str) -> str: return (ROOT / path).read_text(encoding="utf-8") def test_map_first_explorer_is_the_default_product_flow() -> None: app = read_feature("shell") workspace = read_map_workspace() assert "useState('map')" in app assert "Gebied analyseren" in workspace assert "Focus" in workspace assert "Inzichten" in workspace assert "Teken rechthoek" in workspace assert "Volledig werkgebied" in workspace assert "Gekozen thema" in workspace assert "Kies kleiner gebied" in workspace # Wording changed; the availability statement itself is the contract. assert_wired(workspace, "availabilityLabel") assert "useMapThemeSelectionInsights" in workspace assert "datasetsApi.selectVectorFeatures" in read("frontend/src/hooks/useMapThemeSelectionInsights.ts") assert "activeSelectionResult" in workspace assert "downloadActiveThemeResult" in workspace assert "disabled={!activeSelectionResult}" in workspace assert "bboxesEqual(mapSelectionBbox, selectedAreaBbox)" in workspace def test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None: workspace = read_map_workspace() geomap = read("frontend/src/components/GeoMap.tsx") styles = read("frontend/src/styles/app.css") assert "onMapBboxPreview={handleMapBboxPreview}" in workspace assert "onMapBboxSelect={handleMapBboxSelect}" in workspace assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace assert "const areaIdForSelection" in workspace assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace assert_wired(workspace, "selectedAreaBbox") assert_calls(workspace, "analyzeSelection", first_argument="bbox") assert "map.on('mousedown'" in geomap assert "map.on('mousemove'" in geomap assert "map.on('mouseup'" in geomap assert "onMapBboxSelectRef.current?.(bbox)" in geomap assert "new ResizeObserver" in geomap assert "resizeObserver.observe(containerRef.current)" in geomap assert "fitDataOnChangeRef.current" in geomap # Counting identical call sites tests formatting. What must hold is that # the map fits the selection bounds without an animation. assert "map.fitBounds(" in geomap assert "duration: 0" in geomap assert "if (!map || !map.isStyleLoaded()) return" in geomap assert "setStyle(" not in geomap assert "const activeCollection = areaData ?? (fitDataOnChange ? data : null)" in geomap assert "data && fitDataOnChange && !areaData" in geomap assert "resizeObserver.disconnect()" in geomap assert ".workbench-main .geo-map-canvas .map-container" in styles assert "position: absolute;" in styles assert "inset: 0;" in styles assert "grid-template-rows: clamp(34rem, calc(100dvh - 10rem), 52rem) auto;" in styles def test_dataset_detail_responses_cannot_overwrite_the_latest_map_layer() -> None: workflow = read_feature("datasets") assert "const datasetDetailRequestSequence = useRef(0)" in workflow assert "const detailRequestId = ++datasetDetailRequestSequence.current" in workflow assert "detailRequestId !== datasetDetailRequestSequence.current" in workflow assert "detailRequestId === datasetDetailRequestSequence.current" in workflow assert "datasetDetailRequestSequence.current += 1" in workflow def test_selection_contract_reports_total_intersections_separately_from_preview() -> None: schema = read("backend/app/schemas/operations.py") service = read("backend/app/services/vector_feature_service.py") frontend_types = read("frontend/src/types.ts") assert "total_feature_count: int | None = None" in schema assert '"total_feature_count": total_feature_count' in service assert "total_feature_count?: number | null" in frontend_types def test_official_mol_context_provisioner_uses_existing_dataset_flow() -> None: script = read("scripts/provision_mol_context_layers.py") dockerfile = read("deploy/unraid/Dockerfile.all-in-one") readiness = read("scripts/run_readiness_check.sh") assert '("Wegsegment",)' in script assert '("WTZ", "WLAS", "WGR")' in script assert '("ADP",)' in script assert '"dataset_role": "reference"' in script assert '"source_name": "grb"' in script assert "/datasets/upload" in script assert "provision_mol_context_layers.py" in dockerfile assert "py_compile scripts/provision_mol_context_layers.py" in readiness