Complete reversible 1C saved-state prepare workflow

This commit is contained in:
2026-07-26 16:49:06 +03:00
parent 9fd4e1ff99
commit a9f95f6328
5 changed files with 431 additions and 17 deletions
+34
View File
@@ -291,6 +291,25 @@ def test_object_property_plan_writes_existing_member_by_name(monkeypatch) -> Non
def test_object_property_apply_verify_and_rollback(monkeypatch) -> None:
install_common_mocks(monkeypatch)
monkeypatch.setattr(
adapter,
"metadata_saved_state_prepare",
lambda _payload: {
"status": "verified",
"applied": True,
"object": {
"kind": "Catalog",
"name": "Номенклатура",
"guid": OBJECT_GUID,
},
"file_names": ["object.0"],
"apply_result": {
"prepare_receipt": {
"receipt_id": "a" * 32,
}
},
},
)
reads = iter([(b"old", {"database": "db"}, None), (b"new", {"database": "db"}, None)])
monkeypatch.setattr(adapter, "read_storage_file_bytes", lambda *_args, **_kwargs: next(reads))
monkeypatch.setattr(
@@ -320,6 +339,19 @@ def test_object_property_apply_verify_and_rollback(monkeypatch) -> None:
"storage_saved_state_rollback",
lambda payload: {"status": "applied", "applied": True, "backup_id": payload["backup_id"]},
)
prepare_rollback: dict[str, Any] = {}
def fake_prepare_rollback(base_id: str, receipt_id: str, *, timeout_seconds: int) -> dict[str, Any]:
prepare_rollback.update(
{
"base_id": base_id,
"receipt_id": receipt_id,
"timeout_seconds": timeout_seconds,
}
)
return {"status": "rolled_back", "applied": True}
monkeypatch.setattr(adapter, "rollback_saved_state_prepare_receipt", fake_prepare_rollback)
result = adapter.metadata_object_property_write(
base_payload(
@@ -332,6 +364,8 @@ def test_object_property_apply_verify_and_rollback(monkeypatch) -> None:
assert result["status"] == "verified_and_rolled_back"
assert result["applied"] is True
assert result["rolled_back"] is True
assert result["prepare_rollback_result"]["status"] == "rolled_back"
assert prepare_rollback["receipt_id"] == "a" * 32
assert result["semantic_verification"] == {
"status": "ok",
"expected": "Номенклатура товаров",
+2 -1
View File
@@ -1062,7 +1062,8 @@ def test_metadata_write_routes_schedule_target_without_changing_existing_form_mo
lambda payload: captured.update(payload) or {"schema": "onec_scheduled_job_schedule_write.v1", "status": "planned"},
)
result = adapter_server.metadata_write(
result = adapter_server.call_method(
"metadata.write",
{
"base_id": "upo_test",
"target": {"kind": "schedule", "ref": "РегламентныеЗадания.ОбменДанными"},