feat: simplify regional end user workbench
This commit is contained in:
@@ -16,11 +16,11 @@ def test_detection_lab_exposes_run_readiness_contract() -> None:
|
||||
assert "detectionTileManifestPath.trim().length > 0" in lab
|
||||
assert "detectionRunReady" in lab
|
||||
assert 'aria-label="Detection run readiness"' in lab
|
||||
assert "Run readiness" in lab
|
||||
assert "Raster dataset" in lab
|
||||
assert "Model availability" in lab
|
||||
assert "Tile manifest" in lab
|
||||
assert "Ready to submit" in lab
|
||||
assert "Wat is nog nodig?" in lab
|
||||
assert "Luchtbeeld" in lab
|
||||
assert "Analysemodel" in lab
|
||||
assert "Beeldtegels" in lab
|
||||
assert "Klaar om te starten" in lab
|
||||
|
||||
|
||||
def test_segmentation_lab_exposes_run_readiness_contract() -> None:
|
||||
|
||||
@@ -14,8 +14,8 @@ def test_detection_lab_distinguishes_configured_model_from_ui_runnable_action()
|
||||
assert "detectionModelUiRunnable" in lab
|
||||
assert "selectedDetectionModelId !== 'manual-fixture-detector'" in lab
|
||||
assert "detectionRunBlockedReason" in lab
|
||||
assert "Fixture model is explicit test/demo-only" in lab
|
||||
assert "Run action" in lab
|
||||
assert "Het fixturemodel is alleen bedoeld voor expliciete tests" in lab
|
||||
assert "Klaar om gebouwen te zoeken" in lab
|
||||
assert "disabled={runningDetection || !detectionRunReady}" in lab
|
||||
|
||||
|
||||
|
||||
@@ -19,9 +19,9 @@ def test_qa_feature_evidence_contract_is_documented_and_rendered() -> None:
|
||||
assert field_name in api_contracts
|
||||
|
||||
assert "Feature-level QA/QC evidence" in quality_panel
|
||||
assert "Matched feature ids" in quality_panel
|
||||
assert "False positive feature ids" in quality_panel
|
||||
assert "False negative feature ids" in quality_panel
|
||||
assert "Overeenkomende object-ID's" in quality_panel
|
||||
assert "ID's van onterecht gevonden objecten" in quality_panel
|
||||
assert "ID's van gemiste objecten" in quality_panel
|
||||
assert "evidenceLabel" in quality_panel
|
||||
|
||||
|
||||
|
||||
@@ -47,5 +47,5 @@ def test_detection_lab_surfaces_local_model_asset_selection() -> None:
|
||||
assert "Local model assets" in lab
|
||||
assert "onSelectModelAsset" in lab
|
||||
assert "modelAssets={modelAssets}" in app
|
||||
assert "Official reference sources" in provider_panel
|
||||
assert "not AI model choices" in provider_panel
|
||||
assert "Officiële referentiebronnen" in provider_panel
|
||||
assert "live GRB- en OSM-koppelingen staan uit" in provider_panel
|
||||
|
||||
@@ -4,13 +4,15 @@ from pathlib import Path
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
|
||||
|
||||
def test_detection_workflow_does_not_auto_select_runtime_model_assets() -> None:
|
||||
def test_detection_workflow_selects_only_the_active_runtime_model_asset_automatically() -> None:
|
||||
hook = (ROOT / "frontend" / "src" / "hooks" / "useDetectionWorkflow.ts").read_text(encoding="utf-8")
|
||||
|
||||
assert "const activeAsset = assetResponse.items.find" not in hook
|
||||
assert "setSelectedModelAssetId(activeAsset?.model_asset_id ?? '')" not in hook
|
||||
assert "const activeAsset = assetResponse.items.find((asset) => asset.active) ?? null" in hook
|
||||
assert "const selectedAssetStillAvailable" in hook
|
||||
assert "activeAsset?.model_asset_id ?? ''" in hook
|
||||
assert "setSelectedModelAssetId(nextAssetId)" in hook
|
||||
assert "setSelectedModelAssetId(assetResponse.items[0]" not in hook
|
||||
assert "setSelectedModelAssetId('')" in hook
|
||||
assert "getYoloPreflight({ model_asset_id: nextAssetId || null })" in hook
|
||||
|
||||
|
||||
def test_detection_lab_explains_explicit_model_asset_and_threshold_selection() -> None:
|
||||
@@ -18,11 +20,11 @@ def test_detection_lab_explains_explicit_model_asset_and_threshold_selection() -
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert "Explicit model asset" in lab
|
||||
assert "No model file is selected automatically" in lab
|
||||
assert "Operator profiles" in lab
|
||||
assert "Lokaal modelbestand" in lab
|
||||
assert "GeoIntel kiest automatisch het actieve lokale model" in lab
|
||||
assert "Gevalideerde profielen" in lab
|
||||
assert "DETECTION_OPERATOR_PROFILES" in lab
|
||||
assert "Candidate only - not default-approved" in lab
|
||||
assert "kandidaat · extra controle vereist" in lab
|
||||
assert "will_download_models" in lab
|
||||
|
||||
|
||||
@@ -32,5 +34,5 @@ def test_detection_run_readiness_requires_explicit_asset_when_local_assets_exist
|
||||
)
|
||||
|
||||
assert "detectionHasExplicitModelAsset" in lab
|
||||
assert "Select a local model asset deliberately" in lab
|
||||
assert "local model asset" in lab
|
||||
assert "Kies een lokaal modelbestand onder beheer" in lab
|
||||
assert "Lokale modelkeuze" in lab
|
||||
|
||||
@@ -40,7 +40,7 @@ def test_detection_handoff_opens_ai_lab_preflights_manifest_and_keeps_asset_expl
|
||||
assert "setDetectionConfidenceThreshold(0.25)" in app
|
||||
assert "loadYoloPreflight(manifestPath).catch(() => null)" in app
|
||||
assert "setSelectedModelAssetId(" not in app[app.index("const useRasterTileManifestForDetection"):app.index("const {", app.index("const useRasterTileManifestForDetection"))]
|
||||
assert "Linked tile manifest" in lab
|
||||
assert "Gekoppelde beeldtegels" in lab
|
||||
assert "Tile manifest validation" in lab
|
||||
assert "Tile count" in lab
|
||||
assert "will_run_inference" in lab
|
||||
|
||||
@@ -34,17 +34,17 @@ def test_detection_lab_surfaces_profiles_as_deliberate_operator_actions() -> Non
|
||||
)
|
||||
|
||||
assert "DETECTION_OPERATOR_PROFILES" in lab
|
||||
assert "Operator profiles" in lab
|
||||
assert "Gevalideerde profielen" in lab
|
||||
assert "profile.displayName" in lab
|
||||
assert "profile.confidenceThreshold" in lab
|
||||
assert "Candidate only - not default-approved" in lab
|
||||
assert "default-approved" in lab
|
||||
assert "Apply profile" in lab
|
||||
assert "kandidaat · extra controle vereist" in lab
|
||||
assert "standaardprofiel" in lab
|
||||
assert "Profiel gebruiken" in lab
|
||||
assert "onApplyOperatorProfile(profile)" in lab
|
||||
assert "Recommended starting threshold: 0.25" not in lab
|
||||
|
||||
|
||||
def test_detection_workflow_applies_profiles_without_auto_selecting_assets() -> None:
|
||||
def test_detection_workflow_applies_profiles_without_selecting_the_first_arbitrary_asset() -> None:
|
||||
hook = (ROOT / "frontend" / "src" / "hooks" / "useDetectionWorkflow.ts").read_text(encoding="utf-8")
|
||||
app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
|
||||
|
||||
|
||||
@@ -13,8 +13,9 @@ def test_long_context_names_remain_compact_and_inspectable() -> None:
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert "const projectContextLabel = selectedProject?.name ?? 'No project'" in app
|
||||
assert "const datasetContextLabel = selectedDataset?.name ?? (datasets.length > 0 ? 'Select dataset' : 'No dataset')" in app
|
||||
assert "selectedProject?.name === REGIONAL_WORKSPACE_PROJECT_NAME" in app
|
||||
assert "? REGIONAL_WORKSPACE_LABEL" in app
|
||||
assert "const datasetContextLabel = selectedDataset ? getDatasetDisplayName(selectedDataset)" in app
|
||||
assert "<strong title={projectContextLabel}>{projectContextLabel}</strong>" in app
|
||||
assert "<strong title={datasetContextLabel}>{datasetContextLabel}</strong>" in app
|
||||
assert "<strong title={item.value}>{item.value}</strong>" in status
|
||||
|
||||
@@ -29,7 +29,7 @@ def test_frontend_declares_mol_as_primary_operating_focus() -> None:
|
||||
assert "PRIMARY_FOCUS_AREA_GEOJSON" in project_hook
|
||||
assert "4.35,51.28" not in project_hook
|
||||
assert "center: PRIMARY_FOCUS_CENTER" in map_source
|
||||
assert "GeoAI Workbench · Mol / Kempen" in app
|
||||
assert "GeoAI-werkruimte · Mol en de Kempen" in app
|
||||
|
||||
|
||||
def test_operator_workflows_put_mol_first_and_name_future_projects() -> None:
|
||||
|
||||
@@ -16,8 +16,9 @@ def test_workbench_uses_grouped_navigation_and_optional_inspector() -> None:
|
||||
|
||||
assert "import './styles/premium.css'" in app
|
||||
assert "const workspaceNavGroups" in app
|
||||
assert "['overview', 'data', 'map']" in app
|
||||
assert "['map', 'data']" in app
|
||||
assert "['analysis', 'ai']" in app
|
||||
assert "['overview', 'system']" in app
|
||||
assert "const [inspectorOpen, setInspectorOpen] = useState(false)" in app
|
||||
assert "{inspectorOpen ? (" in app
|
||||
assert 'id="workbench-inspector"' in app
|
||||
@@ -31,12 +32,12 @@ def test_data_creation_forms_are_progressively_disclosed() -> None:
|
||||
dataset = read("frontend/src/components/datasets/DatasetPanel.tsx")
|
||||
css = read("frontend/src/styles/premium.css")
|
||||
|
||||
assert '<details className="data-panel-form-block">' in project
|
||||
assert '<summary>Create project</summary>' in project
|
||||
assert '<details className="data-panel-form-block technical-management-block">' in project
|
||||
assert '<summary>Geavanceerd projectbeheer</summary>' in project
|
||||
assert '<details className="data-panel-form-block">' in area
|
||||
assert '<summary>Create spatial scope</summary>' in area
|
||||
assert '<summary>Eigen gebied toevoegen (GeoJSON)</summary>' in area
|
||||
assert '<details className="dataset-upload-block data-panel-form-block">' in dataset
|
||||
assert '<summary>Upload source data</summary>' in dataset
|
||||
assert '<summary>Eigen bronbestand toevoegen</summary>' in dataset
|
||||
assert "details.data-panel-form-block > summary" in css
|
||||
assert ".workspace-grid-data > section:nth-child(n)" in css
|
||||
assert "max-height: calc(100dvh - 10.5rem);" in css
|
||||
|
||||
@@ -129,9 +129,12 @@ def test_kempen_scope_operator_is_packaged_and_exposed_in_map_flow() -> None:
|
||||
assert "py_compile scripts/provision_geographic_scope.py" in readiness
|
||||
assert "Immutable scope dataset" in (ROOT / "scripts/provision_geographic_scope.py").read_text(encoding="utf-8")
|
||||
assert "Kempen (28 gemeenten)" in workspace
|
||||
assert 'aria-label="Regio"' in workspace
|
||||
assert 'aria-label="Regio"' not in workspace
|
||||
assert 'aria-label="Ingeladen regiobereik"' in workspace
|
||||
assert "Gemeente of volledige regio" in workspace
|
||||
assert "projects={projects}" in app
|
||||
assert "onSelectProject={selectProject}" in app
|
||||
map_props = app.split("<MapWorkspace", maxsplit=1)[1].split("/>", maxsplit=1)[0]
|
||||
assert "onSelectProject={selectProject}" not in map_props
|
||||
|
||||
|
||||
def test_project_switches_reset_scoped_state_and_prefer_the_regional_context() -> None:
|
||||
@@ -144,5 +147,6 @@ def test_project_switches_reset_scoped_state_and_prefer_the_regional_context() -
|
||||
assert "resetProjectData()" in selected_project_branch
|
||||
assert "resetDatasetForProject()" in selected_project_branch
|
||||
assert "projectDataRequestSequence" in project_workspace
|
||||
assert "REGIONAL_WORKSPACE_PROJECT_NAME" in project_workspace
|
||||
assert "vervoerregio|operationele grens" in map_state
|
||||
assert "datasets.find(isOperationalScopeBoundaryDataset)" in dataset_workflow
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
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_regional_workspace_is_automatic_and_map_has_one_scope_selector() -> None:
|
||||
project_hook = read("frontend/src/hooks/useProjectWorkspace.ts")
|
||||
map_workspace = read("frontend/src/components/map/MapWorkspace.tsx")
|
||||
|
||||
regional_check = project_hook.index("const regionalProject")
|
||||
municipality_check = project_hook.index("const municipalityProject")
|
||||
assert regional_check < municipality_check
|
||||
assert 'aria-label="Regio"' not in map_workspace
|
||||
assert 'aria-label="Ingeladen regiobereik"' in map_workspace
|
||||
assert "Gemeente of volledige regio" in map_workspace
|
||||
assert 'aria-label="Werkgebied"' in map_workspace
|
||||
|
||||
|
||||
def test_primary_navigation_uses_end_user_language_and_keeps_management_secondary() -> None:
|
||||
app = read("frontend/src/App.tsx")
|
||||
|
||||
for label in ("Kaart", "Bronnen", "Kwaliteit", "Beeldanalyse", "Downloads"):
|
||||
assert f"label: '{label}'" in app
|
||||
assert "{ label: 'Beheer', keys: ['overview', 'system'] }" in app
|
||||
assert 'className="secondary-analysis-disclosure segmentation-disclosure"' in app
|
||||
|
||||
|
||||
def test_technical_projects_and_metadata_are_progressively_disclosed() -> None:
|
||||
projects = read("frontend/src/components/project/ProjectPanel.tsx")
|
||||
areas = read("frontend/src/components/project/AreaPanel.tsx")
|
||||
datasets = read("frontend/src/components/datasets/DatasetPanel.tsx")
|
||||
|
||||
assert "TECHNICAL_PROJECT_PATTERN" in projects
|
||||
assert "technische test- en benchmarkruns" in projects
|
||||
assert "area-catalog-disclosure" in areas
|
||||
assert "dataset-technical-details" in datasets
|
||||
assert "getDatasetDisplayName" in datasets
|
||||
|
||||
|
||||
def test_configured_yolo_and_active_asset_are_selected_without_hiding_limitations() -> None:
|
||||
hook = read("frontend/src/hooks/useDetectionWorkflow.ts")
|
||||
lab = read("frontend/src/components/detection/DetectionLab.tsx")
|
||||
|
||||
assert "useState('yolo-configured')" in hook
|
||||
assert "useState(0.15)" in hook
|
||||
assert "asset.active" in hook
|
||||
assert "getYoloPreflight" in hook
|
||||
assert 'aria-label="Status gebouwdetectie"' in lab
|
||||
assert "resultaten blijven controleplichtig" in lab
|
||||
assert "Modelkalibratie voor beheerders" in lab
|
||||
@@ -58,4 +58,4 @@ def test_frontend_wires_selected_area_map_overlay_contract() -> None:
|
||||
assert "area-fill" in geomap
|
||||
assert "area-line" in geomap
|
||||
assert "onSelectMapArea" in area_panel
|
||||
assert "Show on map" in area_panel
|
||||
assert "Toon op kaart" in area_panel
|
||||
|
||||
@@ -16,9 +16,9 @@ def test_frontend_wires_v1_workbench_status_strip() -> None:
|
||||
assert "qualityChecks={qualityChecks}" in app
|
||||
assert "activeLayerFeatureCount={mapFeatureCount}" in app
|
||||
assert "selectedAreaHasGeometry={Boolean(areaFeatureCollection)}" in app
|
||||
assert "V1 readiness" in component
|
||||
assert "Workbench status" in component
|
||||
assert "Workbench has the core V1 loop populated." in component
|
||||
assert "Platformstatus" in component
|
||||
assert "Workbench status:" in component
|
||||
assert "Kaartwerkruimte is gebruiksklaar" in component
|
||||
assert "workbench-status-strip" in css
|
||||
assert "status-tile-ready" in css
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ def test_app_still_wires_quality_results_and_export_center() -> None:
|
||||
|
||||
assert "<QualityResultsPanel" in app
|
||||
assert "onRefresh={() => loadQualityChecks()}" in app
|
||||
assert "Refresh QA/QC results" in quality_panel
|
||||
assert "Kwaliteitsresultaten vernieuwen" in quality_panel
|
||||
assert "onClick={onRefresh}" in quality_panel
|
||||
assert "<ExportCenter" in app
|
||||
assert "onExportDataset={exportSelectedDatasetGeoJson}" in app
|
||||
|
||||
@@ -26,9 +26,9 @@ def test_app_uses_dataset_presentational_components() -> None:
|
||||
def test_dataset_panel_owns_upload_and_list_markup() -> None:
|
||||
panel = (ROOT / "frontend" / "src" / "components" / "datasets" / "DatasetPanel.tsx").read_text(encoding="utf-8")
|
||||
|
||||
assert "Upload dataset" in panel
|
||||
assert "Refresh metadata" in panel
|
||||
assert "Select / details" in panel
|
||||
assert "Eigen bronbestand toevoegen" in panel
|
||||
assert "Metadata vernieuwen" in panel
|
||||
assert "Details en acties" in panel
|
||||
assert "onLoadDatasetDetails" in panel
|
||||
assert "onRefreshMetadata" in panel
|
||||
|
||||
|
||||
@@ -38,8 +38,8 @@ def test_quality_results_panel_owns_persisted_quality_check_markup() -> None:
|
||||
).read_text(encoding="utf-8")
|
||||
|
||||
assert "QualityCheckRead" in quality_panel
|
||||
assert "Refresh QA/QC results" in quality_panel
|
||||
assert "No persisted QA/QC results yet" 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()
|
||||
|
||||
@@ -19,7 +19,7 @@ def test_data_workspace_panels_use_operator_friendly_cards_and_forms() -> None:
|
||||
|
||||
assert "compact-form" in project_panel
|
||||
assert "entity-card-active" in project_panel
|
||||
assert "AOI manager" in area_panel
|
||||
assert "<h2>Gebieden</h2>" in area_panel
|
||||
assert "compact-form" in area_panel
|
||||
assert "entity-card-active" in area_panel
|
||||
assert "dataset-upload-form" in dataset_panel
|
||||
|
||||
@@ -9,11 +9,11 @@ def test_quality_panel_uses_workbench_summary_and_cards() -> None:
|
||||
ROOT / "frontend" / "src" / "components" / "quality" / "QualityResultsPanel.tsx"
|
||||
).read_text(encoding="utf-8")
|
||||
|
||||
assert 'className="quality-results-panel"' in quality_panel
|
||||
assert "'quality-results-panel quality-results-panel-empty' : 'quality-results-panel'" in quality_panel
|
||||
assert 'className="quality-summary-grid"' in quality_panel
|
||||
assert 'className="quality-check-list"' in quality_panel
|
||||
assert 'className="quality-check-card"' in quality_panel
|
||||
assert "No persisted QA/QC results yet" in quality_panel
|
||||
assert "Nog geen bewaarde kwaliteitsresultaten" in quality_panel
|
||||
assert "check.metrics.map" in quality_panel
|
||||
assert "fetch(" not in quality_panel
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ def test_dataset_panel_exposes_map_and_export_quick_actions() -> None:
|
||||
assert "dataset-card-active" in panel
|
||||
assert "onOpenDatasetInMap" in panel
|
||||
assert "onOpenDatasetExport" in panel
|
||||
assert "Open in map" in panel
|
||||
assert "Export / QA" in panel
|
||||
assert "Open op kaart" in panel
|
||||
assert "Downloaden" in panel
|
||||
assert "disabled={!(dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson')}" in panel
|
||||
|
||||
|
||||
|
||||
@@ -13,12 +13,12 @@ def test_export_center_surfaces_handoff_readiness_context() -> None:
|
||||
assert 'className="handoff-readiness-grid"' in export_center
|
||||
assert 'className="handoff-action-grid"' in export_center
|
||||
assert 'className="export-type-badge"' in export_center
|
||||
assert "Latest handoff artifact" in export_center
|
||||
assert "Project report" in export_center
|
||||
assert "Detection run" in export_center
|
||||
assert "Segmentation run" in export_center
|
||||
assert "selectedDetectionRunId || 'none'" in export_center
|
||||
assert "selectedSegmentationRunId || 'none'" in export_center
|
||||
assert "Laatste bestand" in export_center
|
||||
assert "Leesbaar rapport" in export_center
|
||||
assert "Gebouwanalyse" in export_center
|
||||
assert "Segmentatieanalyse" in export_center
|
||||
assert "selectedDetectionRunId || 'geen'" in export_center
|
||||
assert "selectedSegmentationRunId || 'geen'" in export_center
|
||||
|
||||
|
||||
def test_export_handoff_polish_has_responsive_styles() -> None:
|
||||
|
||||
@@ -11,10 +11,10 @@ def test_dataset_panel_surfaces_role_summary_and_badges() -> None:
|
||||
|
||||
assert "roleSummaries" in dataset_panel
|
||||
assert "dataset-role-summary-grid" in dataset_panel
|
||||
assert "Selected" in dataset_panel
|
||||
assert "Reference" in dataset_panel
|
||||
assert "Candidate" in dataset_panel
|
||||
assert "Source" in dataset_panel
|
||||
assert "Geselecteerd" in dataset_panel
|
||||
assert "Referentie" in dataset_panel
|
||||
assert "Resultaat" in dataset_panel
|
||||
assert "Eigen bron" in dataset_panel
|
||||
assert "dataset-role-badge" in dataset_panel
|
||||
assert "dataset-role-selected" in dataset_panel
|
||||
assert "dataset-role-reference" in dataset_panel
|
||||
@@ -28,9 +28,9 @@ def test_dataset_cards_expose_scan_friendly_source_and_crs_context() -> None:
|
||||
)
|
||||
|
||||
assert "dataset-card-kicker" in dataset_panel
|
||||
assert "Source: {dataset.source_name ?? dataset.source}" in dataset_panel
|
||||
assert "Layer: {dataset.reference_layer_name}" in dataset_panel
|
||||
assert "CRS: {dataset.crs ?? dataset.vector_summary?.crs ?? 'n/a'}" in dataset_panel
|
||||
assert "Bron: {dataset.source_name ?? dataset.source}" in dataset_panel
|
||||
assert "Laag: {dataset.reference_layer_name}" in dataset_panel
|
||||
assert "CRS: {dataset.crs ?? dataset.vector_summary?.crs ?? 'onbekend'}" in dataset_panel
|
||||
assert "dataset-card-title" in dataset_panel
|
||||
|
||||
|
||||
|
||||
@@ -11,9 +11,9 @@ def test_dataset_panel_explains_recommended_actions() -> None:
|
||||
|
||||
assert "datasetActionHint" in dataset_panel
|
||||
assert "dataset-action-hint" in dataset_panel
|
||||
assert "QA reference layer" in dataset_panel
|
||||
assert "QA candidate layer" in dataset_panel
|
||||
assert "Open on the map or send to Export / QA." in dataset_panel
|
||||
assert "Officiële laag voor kaartanalyse en kwaliteitscontrole." in dataset_panel
|
||||
assert "Bewaard resultaat dat opnieuw op de kaart" in dataset_panel
|
||||
assert "Ingeladen gegevensbron voor verdere analyse." in dataset_panel
|
||||
|
||||
|
||||
def test_dataset_buttons_have_scan_friendly_action_copy() -> None:
|
||||
@@ -22,12 +22,12 @@ def test_dataset_buttons_have_scan_friendly_action_copy() -> None:
|
||||
)
|
||||
|
||||
assert "dataset-action-grid" in dataset_panel
|
||||
assert "Inspect" in dataset_panel
|
||||
assert "Map" in dataset_panel
|
||||
assert "Export / QA" in dataset_panel
|
||||
assert "Bekijken" in dataset_panel
|
||||
assert "Kaart" in dataset_panel
|
||||
assert "Downloaden" in dataset_panel
|
||||
assert "Metadata" in dataset_panel
|
||||
assert "Vector/GeoJSON only" in dataset_panel
|
||||
assert "Raster metadata is automatic" in dataset_panel
|
||||
assert "Enkel vectorlagen" in dataset_panel
|
||||
assert "disabled={dataset.dataset_type === 'raster'}" in dataset_panel
|
||||
|
||||
|
||||
def test_dataset_action_styles_keep_buttons_dense_and_responsive() -> None:
|
||||
|
||||
@@ -23,11 +23,11 @@ def test_quality_panel_surfaces_candidate_reference_handoff_summary() -> None:
|
||||
).read_text(encoding="utf-8")
|
||||
|
||||
assert "quality-handoff-grid" in quality_panel
|
||||
assert "Candidate layers" in quality_panel
|
||||
assert "Reference layers" in quality_panel
|
||||
assert "Latest comparison" in quality_panel
|
||||
assert "Candidate" in quality_panel
|
||||
assert "Reference" in quality_panel
|
||||
assert "Te controleren lagen" in quality_panel
|
||||
assert "Referentielagen" in quality_panel
|
||||
assert "Laatste vergelijking" in quality_panel
|
||||
assert "Te controleren:" in quality_panel
|
||||
assert "referentie:" in quality_panel
|
||||
assert "quality-dataset-name" in quality_panel
|
||||
|
||||
|
||||
|
||||
@@ -28,8 +28,8 @@ def test_quality_panel_renders_metric_evidence_cards_and_raw_metrics() -> None:
|
||||
assert "quality-metric-grid" in quality_panel
|
||||
assert "quality-metric-card" in quality_panel
|
||||
assert "quality-metric-card-critical" in quality_panel
|
||||
assert "Metric evidence" in quality_panel
|
||||
assert "Raw metrics" in quality_panel
|
||||
assert "Gemeten kwaliteit" in quality_panel
|
||||
assert "Alle meetwaarden" in quality_panel
|
||||
assert "check.metrics.map" in quality_panel
|
||||
|
||||
|
||||
|
||||
@@ -17,12 +17,12 @@ def test_quality_panel_adds_result_filters_and_density_limit() -> None:
|
||||
assert "filteredQualityChecks = useMemo" in quality_panel
|
||||
assert "visibleQualityChecks = showAllQualityChecks ? filteredQualityChecks : filteredQualityChecks.slice(0, 8)" in quality_panel
|
||||
assert "quality-history-controls" in quality_panel
|
||||
assert "Search QA/QC results" in quality_panel
|
||||
assert "All statuses" in quality_panel
|
||||
assert "All check types" in quality_panel
|
||||
assert "Reset view" in quality_panel
|
||||
assert "Show all QA/QC results" in quality_panel
|
||||
assert "No QA/QC results match the current filters." in quality_panel
|
||||
assert "Kwaliteitsresultaten zoeken" in quality_panel
|
||||
assert "Alle statussen" in quality_panel
|
||||
assert "Alle types" in quality_panel
|
||||
assert "Filters wissen" in quality_panel
|
||||
assert "Alle kwaliteitsresultaten tonen" in quality_panel
|
||||
assert "Geen kwaliteitsresultaten voldoen aan de filters." in quality_panel
|
||||
|
||||
|
||||
def test_quality_filter_styles_reuse_dense_history_patterns() -> None:
|
||||
|
||||
@@ -16,12 +16,12 @@ def test_project_and_area_panels_expose_selected_summary_regions() -> None:
|
||||
|
||||
assert "const selectedProject = projects.find" in project_panel
|
||||
assert 'className="data-selection-summary data-selection-summary-project"' in project_panel
|
||||
assert 'className="data-panel-form-block"' in project_panel
|
||||
assert 'className="data-panel-form-block technical-management-block"' in project_panel
|
||||
assert 'className="data-panel-list-block"' in project_panel
|
||||
assert "const selectedArea = areas.find" in area_panel
|
||||
assert 'className="data-selection-summary data-selection-summary-area"' in area_panel
|
||||
assert 'className="data-panel-form-block"' in area_panel
|
||||
assert 'className="data-panel-list-block"' in area_panel
|
||||
assert 'className="data-panel-list-block area-catalog-disclosure"' in area_panel
|
||||
|
||||
|
||||
def test_dataset_panel_separates_selected_upload_and_catalog_regions() -> None:
|
||||
|
||||
@@ -11,7 +11,7 @@ def test_quality_results_panel_exposes_structured_surfaces() -> None:
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert 'className="quality-results-panel"' in panel
|
||||
assert "'quality-results-panel quality-results-panel-empty' : 'quality-results-panel'" in panel
|
||||
assert 'className="quality-results-shell"' in panel
|
||||
assert 'className="quality-summary-surface"' in panel
|
||||
assert 'aria-label="QA/QC result summary"' in panel
|
||||
@@ -22,6 +22,7 @@ def test_quality_results_panel_exposes_structured_surfaces() -> None:
|
||||
assert 'className="quality-result-state-stack"' in panel
|
||||
assert 'className="quality-history-surface"' in panel
|
||||
assert 'aria-label="QA/QC result history"' in panel
|
||||
assert 'className="quality-advanced-disclosure"' in panel
|
||||
|
||||
|
||||
def test_quality_results_panel_preserves_existing_refresh_filter_and_history_state() -> None:
|
||||
@@ -34,8 +35,8 @@ def test_quality_results_panel_preserves_existing_refresh_filter_and_history_sta
|
||||
assert "qualityTypeFilter" in panel
|
||||
assert "qualitySearchQuery" in panel
|
||||
assert "visibleQualityChecks.map" in panel
|
||||
assert "Show all QA/QC results" in panel
|
||||
assert "No QA/QC results match the current filters." in panel
|
||||
assert "Alle kwaliteitsresultaten tonen" in panel
|
||||
assert "Geen kwaliteitsresultaten voldoen aan de filters." in panel
|
||||
|
||||
|
||||
def test_quality_workspace_density_css_contracts() -> None:
|
||||
|
||||
@@ -52,7 +52,7 @@ def test_ai_lab_preserves_existing_detection_and_segmentation_controls() -> None
|
||||
assert "onLoadResults" in detection
|
||||
assert "onRunQa" in detection
|
||||
assert "detectionTileManifestPath" in detection
|
||||
assert "Detections loaded: {detectionItems.length}" in detection
|
||||
assert "{detectionItems.length} objecten geladen" in detection
|
||||
assert "Compare detections to reference" in detection
|
||||
|
||||
assert "onRunSegmentation" in segmentation
|
||||
|
||||
@@ -20,7 +20,7 @@ def test_export_center_exposes_final_handoff_surfaces() -> None:
|
||||
assert 'className="export-actions-surface"' in export_center
|
||||
assert 'aria-label="Export artifact actions"' in export_center
|
||||
assert 'className="export-state-stack"' in export_center
|
||||
assert 'className="export-history-surface"' in export_center
|
||||
assert 'className="export-history-surface export-history-disclosure"' in export_center
|
||||
assert 'aria-label="Export history"' in export_center
|
||||
|
||||
|
||||
|
||||
@@ -11,14 +11,14 @@ def test_export_center_groups_latest_handoff_artifacts_by_type() -> None:
|
||||
|
||||
assert "latestHandoffArtifacts" in export_center
|
||||
assert "Latest handoff artifacts" in export_center
|
||||
assert "Project report" in export_center
|
||||
assert "Project metadata" in export_center
|
||||
assert "Dataset GeoJSON" in export_center
|
||||
assert "Detection GeoJSON" in export_center
|
||||
assert "Segmentation GeoJSON" in export_center
|
||||
assert "Leesbaar rapport" in export_center
|
||||
assert "Werkruimtedata" in export_center
|
||||
assert "Kaartlaag (GeoJSON)" in export_center
|
||||
assert "Herkende gebouwen (GeoJSON)" in export_center
|
||||
assert "Segmentaties (GeoJSON)" in export_center
|
||||
assert "latest-artifact-grid" in export_center
|
||||
assert "latest-artifact-card" in export_center
|
||||
assert "No artifact yet" in export_center
|
||||
assert "Nog niet gemaakt" in export_center
|
||||
|
||||
|
||||
def test_export_center_latest_artifact_cards_keep_existing_actions() -> None:
|
||||
|
||||
@@ -12,14 +12,14 @@ def test_quality_results_panel_exposes_selected_check_drilldown() -> None:
|
||||
assert "selectedQualityCheckId" in panel
|
||||
assert "selectedQualityCheck" in panel
|
||||
assert "QA/QC evidence drilldown" in panel
|
||||
assert "Selected check" in panel
|
||||
assert "Candidate layer" in panel
|
||||
assert "Reference layer" in panel
|
||||
assert "Analysis run" in panel
|
||||
assert "Geselecteerde controle" in panel
|
||||
assert "Te controleren laag" in panel
|
||||
assert "Referentielaag" in panel
|
||||
assert "Analyserun" in panel
|
||||
assert "Job" in panel
|
||||
assert "Completed" in panel
|
||||
assert "Inspect latest check" in panel
|
||||
assert "Inspect check" in panel
|
||||
assert "Afgerond" in panel
|
||||
assert "Laatste controle bekijken" in panel
|
||||
assert "Controle bekijken" in panel
|
||||
|
||||
|
||||
def test_quality_results_panel_surfaces_false_positive_negative_evidence() -> None:
|
||||
@@ -27,9 +27,9 @@ def test_quality_results_panel_surfaces_false_positive_negative_evidence() -> No
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert "False positive evidence" in panel
|
||||
assert "False negative evidence" in panel
|
||||
assert "Map evidence handoff" in panel
|
||||
assert "Onterecht gevonden" in panel
|
||||
assert "Gemiste objecten" in panel
|
||||
assert "Controle op de kaart" in panel
|
||||
assert "metricByKey(selectedQualityCheck, 'false_positive_count')" in panel
|
||||
assert "metricByKey(selectedQualityCheck, 'false_negative_count')" in panel
|
||||
assert "selectedQualityCheck.parameters_json" in panel
|
||||
|
||||
@@ -22,8 +22,8 @@ def test_ai_labs_explain_missing_raster_input_before_disabled_runs() -> None:
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert "No raster datasets available for detection." in detection_lab
|
||||
assert "Upload or select a raster dataset in Data before running object detection." in detection_lab
|
||||
assert "Geen luchtbeeld beschikbaar in deze werkruimte." in detection_lab
|
||||
assert "Voeg onder Bronnen een gegeorefereerde GeoTIFF toe." in detection_lab
|
||||
assert "rasterDatasets.length === 0" in detection_lab
|
||||
assert "No raster datasets available for segmentation." in segmentation_lab
|
||||
assert "Upload or select a raster dataset in Data before running segmentation." in segmentation_lab
|
||||
|
||||
Reference in New Issue
Block a user