Commit verified recovery projections atomically
This commit is contained in:
@@ -153,6 +153,42 @@ def test_atomic_terminal_commits_domain_rows_and_recovery_evidence_together() ->
|
||||
engine.dispose()
|
||||
|
||||
|
||||
def test_verified_external_success_commits_projection_and_evidence_together() -> None:
|
||||
engine, factory = _fixture()
|
||||
metadata = MetaData()
|
||||
projection = Table(
|
||||
"test_verified_external_projection",
|
||||
metadata,
|
||||
Column("id", String(36), primary_key=True),
|
||||
)
|
||||
metadata.create_all(engine)
|
||||
try:
|
||||
started = _start(factory, _identity("worker-1", "incarnation-1"))
|
||||
assert started.operation is not None
|
||||
with factory() as session:
|
||||
session.execute(projection.insert().values(id="projection-1"))
|
||||
started.operation.commit_verified_success(
|
||||
session,
|
||||
evidence={
|
||||
"verified": True,
|
||||
"checks": {
|
||||
"provider_result": "accepted",
|
||||
"projection_id": "projection-1",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
with factory() as session:
|
||||
assert session.scalar(select(projection.c.id)) == "projection-1"
|
||||
operation = session.get(RecoveryOperation, started.operation_id)
|
||||
assert operation is not None
|
||||
assert operation.mode == RecoveryMode.COMPENSATION.value
|
||||
assert operation.status == RecoveryStatus.SUCCEEDED.value
|
||||
assert verify_recovery_evidence_chain(session, operation.id)
|
||||
finally:
|
||||
engine.dispose()
|
||||
|
||||
|
||||
def test_failed_atomic_commit_rolls_back_domain_and_terminal_checkpoint() -> None:
|
||||
engine, factory = _fixture()
|
||||
metadata = MetaData()
|
||||
|
||||
Reference in New Issue
Block a user