from pathlib import Path import pytest from pydantic import ValidationError from app.schemas.operations import VectorSelectionBBox, VectorSelectionRequest ROOT = Path(__file__).resolve().parents[2] def test_vector_selection_contract_keeps_an_explicit_bounded_limit() -> None: bbox = VectorSelectionBBox(min_x=5.03, min_y=51.15, max_x=5.25, max_y=51.33) request = VectorSelectionRequest(bbox=bbox, limit=1000) assert request.limit == 1000 with pytest.raises(ValidationError): VectorSelectionRequest(bbox=bbox, limit=1001) def test_large_vector_delivery_uses_existing_postgis_bbox_contract() -> None: config = (ROOT / "frontend" / "src" / "config" / "vectorDelivery.ts").read_text(encoding="utf-8") viewport_hook = (ROOT / "frontend" / "src" / "hooks" / "useViewportVectorLayer.ts").read_text(encoding="utf-8") dataset_hook = (ROOT / "frontend" / "src" / "hooks" / "useDatasetWorkflow.ts").read_text(encoding="utf-8") assert "VECTOR_VIEWPORT_FEATURE_THRESHOLD = 5_000" in config assert "VECTOR_VIEWPORT_MIN_ZOOM = 14" in config assert "VECTOR_VIEWPORT_FEATURE_LIMIT = 1_000" in config assert "datasetsApi.selectVectorFeatures" in viewport_hook assert "response.truncated" in viewport_hook assert "requestSequence" in viewport_hook assert "summary.feature_count ?? dataset.feature_count" in dataset_hook assert "datasetsApi.getContent" in dataset_hook def test_map_reports_viewport_and_does_not_refit_each_slice() -> None: app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8") workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8") assert "useViewportVectorLayer" in app assert "fitMapDataOnChange={!viewportVectorLayerActive}" in app assert "map.on('moveend', emitViewport)" in geo_map assert "fitDataOnChange" in geo_map assert "onViewportChange" in geo_map assert "Zoom verder in" in (ROOT / "frontend" / "src" / "hooks" / "useViewportVectorLayer.ts").read_text(encoding="utf-8") assert "viewport-vector-status" in workspace