from pathlib import Path ROOT = Path(__file__).resolve().parents[2] def test_raster_workflow_exposes_structured_tile_manifest_handoff() -> None: hook = (ROOT / "frontend" / "src" / "hooks" / "useDatasetWorkflow.ts").read_text(encoding="utf-8") types = (ROOT / "frontend" / "src" / "types.ts").read_text(encoding="utf-8") assert "interface RasterTileHandoff" in types assert "latestRasterTileManifest" in hook assert "toRasterTileHandoff(job)" in hook assert "setLatestRasterTileManifest(manifest)" in hook assert "manifest.manifest_path" in hook def test_raster_controls_show_manifest_details_and_ai_handoff_action() -> None: controls = (ROOT / "frontend" / "src" / "components" / "datasets" / "RasterControls.tsx").read_text( encoding="utf-8" ) assert "latestRasterTileManifest" in controls assert "Tile count" in controls assert "Tile size" in controls assert "Overlap" in controls assert "Use manifest in Detection Lab" in controls assert "Use manifest in Segmentation Lab" in controls def test_detection_handoff_opens_ai_lab_preflights_manifest_and_keeps_asset_explicit() -> None: app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") lab = (ROOT / "frontend" / "src" / "components" / "detection" / "DetectionLab.tsx").read_text( encoding="utf-8" ) assert "setDetectionTileManifestPath(manifestPath)" in app assert "setSelectedDetectionDatasetId(selectedDataset.id)" in app assert "setSelectedDetectionModelId('yolo-configured')" in app 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 "Gekoppelde beeldtegels" in lab assert "Tile manifest validation" in lab assert "Tile count" in lab assert "will_run_inference" in lab