from __future__ import annotations from pathlib import Path 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("frontend/src/App.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx") assert "useState('map')" in app assert "Gebied analyseren" in workspace assert "

Focus op de kaart optioneel

" 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 assert "Bron nog niet ingeladen" in workspace 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("frontend/src/components/map/MapWorkspace.tsx") 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 "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace 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 assert geomap.count("map.fitBounds(bounds, { padding: 40, duration: 0 })") == 3 assert "isStyleLoaded()" 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("frontend/src/hooks/useDatasetWorkflow.ts") 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