from __future__ import annotations import re from pathlib import Path from tests.frontend_contract import read_feature ROOT = Path(__file__).resolve().parents[2] def test_app_uses_quality_and_map_presentational_components() -> None: app = read_feature("shell") assert "from './components/quality/QualityResultsPanel'" in app assert "from './components/map/MapWorkspace'" in app assert "QA/QC Results" not in app assert "

Map workspace

" not in app assert " None: app = read_feature("shell") styles = (ROOT / "frontend" / "src" / "styles" / "app.css").read_text(encoding="utf-8") assert "activeWorkspace === 'map'" in app assert app.index("activeWorkspace === 'map'") < app.index(" None: quality_panel = ( ROOT / "frontend" / "src" / "components" / "quality" / "QualityResultsPanel.tsx" ).read_text(encoding="utf-8") assert "QualityCheckRead" in quality_panel assert "Kwaliteitsresultaten vernieuwen" in quality_panel assert "Nog geen bewaarde kwaliteitsresultaten" in quality_panel assert "check.metrics.map" in quality_panel assert "fetch(" not in quality_panel assert "api" not in quality_panel.lower() def test_map_workspace_owns_map_controls_and_feature_inspector_markup() -> None: map_workspace = read_feature("map_workspace") assert "GeoMap" in map_workspace assert "map-toolbar" in map_workspace assert "Area" in map_workspace assert "Werkgebied" in map_workspace assert "Actieve kaartlaag" in map_workspace assert "Objectinspectie" in map_workspace assert "onFeatureSelect={onSelectMapFeature}" in map_workspace # The markup layer owns interaction, never transport. Scoped to the # presentational modules because the workspace's hooks do perform # transport, by design. A bare "api" substring also matches # useMapImageOverlays, so name what is actually forbidden. presentation = read_feature("map_workspace_presentation") assert "fetch(" not in presentation assert "services/api" not in presentation assert not re.search(r"\w*[Aa]pi\.(get|post|put|delete)\(", presentation)