import json import tempfile import unittest from pathlib import Path from common_util.common_util_workflow import ( load_project_workflow, patch_project_workflow_stale, ) class LoadProjectWorkflowTest(unittest.TestCase): def test_load_project_workflow(self) -> None: with tempfile.TemporaryDirectory() as temporary_directory: project_root = Path(temporary_directory) self.assertEqual( load_project_workflow(project_root), { "current_stage": "scan", "completed": [], "stale_from": None, "stage1_confirmed": None, }, ) saved = {"current_stage": "route", "completed": ["scan"]} (project_root / "workflow.json").write_text( json.dumps(saved, ensure_ascii=False), encoding="utf-8", ) self.assertEqual(load_project_workflow(project_root), saved) (project_root / "workflow.json").write_text("[]", encoding="utf-8") with self.assertRaises(ValueError): load_project_workflow(project_root) def test_patch_project_workflow_stale(self) -> None: with tempfile.TemporaryDirectory() as temporary_directory: project_root = Path(temporary_directory) workflow_path = project_root / "workflow.json" patch_project_workflow_stale(project_root, "route") self.assertFalse(workflow_path.exists()) saved = { "current_stage": "surface", "completed": ["scan"], "stale_from": None, "stage1_confirmed": {"method": "tin"}, } workflow_path.write_text( json.dumps(saved, ensure_ascii=False), encoding="utf-8", ) patch_project_workflow_stale(project_root, "route") updated = json.loads(workflow_path.read_text(encoding="utf-8")) self.assertEqual(updated["stale_from"], "route") self.assertEqual(updated["current_stage"], saved["current_stage"]) self.assertEqual(updated["completed"], saved["completed"]) self.assertEqual(updated["stage1_confirmed"], saved["stage1_confirmed"])