feat(workbench): persist operational workflows and events

This commit is contained in:
2026-09-24 04:19:02 +08:00
parent baff7dfe9e
commit 9335bdc1ea
66 changed files with 16580 additions and 238 deletions
+91
View File
@@ -0,0 +1,91 @@
from contextlib import contextmanager
from uuid import uuid4
import pytest
from scripts.seed_peripheral_sample import (
ACTOR_ID,
previous_seed_result,
restore_seeded_resources,
)
class FakeResult:
def __init__(self, row=None):
self.row = row
def fetchone(self):
return self.row
class FakeConnection:
def __init__(self, row=None):
self.row = row
self.calls = []
def execute(self, statement, parameters):
self.calls.append((" ".join(statement.split()), parameters))
return FakeResult(self.row)
class FakeStore:
def __init__(self, row=None):
self.connection_value = FakeConnection(row)
self.readonly = None
@contextmanager
def connection(self, readonly=False):
self.readonly = readonly
yield self.connection_value
def test_previous_seed_result_reuses_legacy_receipt():
resource_id = str(uuid4())
store = FakeStore({
"command_key": "create_work_order",
"result": {"work_order_id": resource_id},
})
seed_request_id = uuid4()
result = previous_seed_result(
store,
"project-1",
seed_request_id=seed_request_id,
command_key="create_work_order",
)
assert result == {"work_order_id": resource_id}
assert store.readonly is True
assert store.connection_value.calls[0][1] == (
"project-1",
str(ACTOR_ID),
seed_request_id,
)
def test_restore_seeded_resources_only_restores_allowed_tables():
store = FakeStore()
resource_ids = [str(uuid4()), str(uuid4())]
restore_seeded_resources(
store,
"project-1",
table="work_orders",
id_column="work_order_id",
resource_ids=resource_ids,
)
statement, parameters = store.connection_value.calls[0]
assert "UPDATE peripheral_sample.work_orders" in statement
assert "document=document - 'deleted_at' - 'deleted_by'" in statement
assert "deleted_at=NULL, deleted_by=NULL" in statement
assert parameters == ("project-1", resource_ids)
with pytest.raises(ValueError, match="unsupported seeded resource"):
restore_seeded_resources(
store,
"project-1",
table="requests",
id_column="request_id",
resource_ids=resource_ids,
)