Skip to content

Commit 006e870

Browse files
committed
refactor(application): version quarantine state contracts
1 parent fd50d74 commit 006e870

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

src/flameox/application/quarantine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323

2424
class _QuarantineManifest(ContractModel):
25-
schema_version: int = 1
25+
schema_version: Literal[2] = 2
2626
quarantine_id: str
2727
operation: str
2828
detected_at: datetime

tests/application/test_repair.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,23 @@ def test_quarantine_rejects_recovery_options_that_disagree_with_state(
194194
assert error.value.code is ErrorCode.WORKSPACE_INVALID
195195

196196

197+
def test_quarantine_rejects_version_one_manifests(tmp_path: Path) -> None:
198+
workspace = Workspace.initialize(tmp_path)
199+
source = workspace.paths.staging / "partial.bin"
200+
source.write_bytes(b"partial")
201+
service = QuarantineService(workspace)
202+
quarantined = service.quarantine(source, reason="fixture", operation="test")
203+
manifest_path = workspace.paths.quarantine / quarantined.quarantine_id / "manifest.json"
204+
serialized = quarantined.model_dump(mode="json")
205+
serialized["schema_version"] = 1
206+
manifest_path.write_text(json.dumps(serialized))
207+
208+
with pytest.raises(DomainError) as error:
209+
service.restore(quarantined.quarantine_id)
210+
211+
assert error.value.code is ErrorCode.WORKSPACE_INVALID
212+
213+
197214
def test_quarantine_rejects_symbolic_link_sources(tmp_path: Path) -> None:
198215
workspace = Workspace.initialize(tmp_path)
199216
target = workspace.paths.staging / "target.bin"

0 commit comments

Comments
 (0)