feat(01-01): implement WorkflowStateManager with atomic write
GREEN phase: Implement state management with: - Atomic write pattern (temp file + os.replace) - Backup rotation (workflow_state.json -> .bak) - Backup fallback on corruption - get_or_create idempotent creation Fix test to properly create backup before corruption test. All 20 tests pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -281,7 +281,7 @@ class TestBackupFallback:
|
||||
state_file = tmp_path / "workflow_state.json"
|
||||
backup_file = tmp_path / "workflow_state.json.bak"
|
||||
|
||||
# Create valid backup
|
||||
# Create valid backup by saving twice (backup is created on second save)
|
||||
valid_state = WorkflowState(
|
||||
content_id="backup-valid-001",
|
||||
platform="bilibili",
|
||||
@@ -289,11 +289,22 @@ class TestBackupFallback:
|
||||
)
|
||||
manager.save(valid_state)
|
||||
|
||||
# Save again to create backup
|
||||
valid_state2 = WorkflowState(
|
||||
content_id="backup-valid-002",
|
||||
platform="bilibili",
|
||||
source_url="https://www.bilibili.com/video/BV888"
|
||||
)
|
||||
manager.save(valid_state2)
|
||||
|
||||
# Now backup exists with "backup-valid-001", main has "backup-valid-002"
|
||||
assert backup_file.exists()
|
||||
|
||||
# Corrupt main file
|
||||
with open(state_file, 'w', encoding='utf-8') as f:
|
||||
f.write("{ invalid json content }")
|
||||
|
||||
# Should fall back to backup
|
||||
# Should fall back to backup (which has backup-valid-001)
|
||||
loaded = manager.load()
|
||||
|
||||
assert loaded is not None
|
||||
|
||||
Reference in New Issue
Block a user