diff --git a/CHANGELOG.md b/CHANGELOG.md index 29bfe7ad..457dc1e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ # Changelog +## Sprint 28 dataset workflow hook hardening (2026-06-17) + +- Moved dataset selection, upload, detail loading, dataset jobs and raster/vector operation orchestration from `App.tsx` into `useDatasetWorkflow`. +- Kept project dataset listing in `App.tsx` so project/area loading remains the shared workbench boundary. +- Added regression coverage to verify `App.tsx` still wires dataset, raster and vector UI callbacks while operation API ownership stays inside the focused hook. +- No API contracts, backend behavior, migrations, product features, provider fetching, AI behavior or UI redesign were introduced. + ## Sprint 27 export and QA workflow hook hardening (2026-06-17) - Moved Export Center orchestration state and API calls from `App.tsx` into `useExportWorkflow`. diff --git a/backend/tests/test_sprint28_dataset_workflow_hook.py b/backend/tests/test_sprint28_dataset_workflow_hook.py new file mode 100644 index 00000000..c857c928 --- /dev/null +++ b/backend/tests/test_sprint28_dataset_workflow_hook.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[2] + + +def test_app_uses_dataset_workflow_hook() -> None: + app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") + + assert "useDatasetWorkflow" in app + assert "from './hooks/useDatasetWorkflow'" in app + assert "datasetsApi.upload" not in app + assert "jobsApi" not in app + assert "datasetsApi.vectorClip" not in app + assert "datasetsApi.rasterTile" not in app + + +def test_dataset_workflow_hook_owns_dataset_api_calls() -> None: + hook = (ROOT / "frontend" / "src" / "hooks" / "useDatasetWorkflow.ts").read_text(encoding="utf-8") + + assert "datasetsApi.upload" in hook + assert "datasetsApi.getContent" in hook + assert "datasetsApi.vectorSummary" in hook + assert "datasetsApi.vectorClip" in hook + assert "datasetsApi.vectorBuffer" in hook + assert "datasetsApi.vectorIntersect" in hook + assert "datasetsApi.inspectRaster" in hook + assert "datasetsApi.rasterPreview" in hook + assert "datasetsApi.rasterStats" in hook + assert "datasetsApi.rasterReproject" in hook + assert "datasetsApi.rasterClip" in hook + assert "datasetsApi.rasterTile" in hook + assert "datasetsApi.rasterNdvi" in hook + assert "datasetsApi.rasterNdwi" in hook + assert "datasetsApi.rasterNdbi" in hook + assert "datasetsApi.refreshMetadata" in hook + assert "jobsApi.list" in hook + + +def test_app_still_wires_dataset_ui_callbacks() -> None: + app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") + + assert "