Install and reconcile module workflow standards

This commit is contained in:
2026-07-31 19:40:04 +02:00
parent 9bccbd68da
commit 43c1f3fb72
8 changed files with 1289 additions and 5 deletions
+153
View File
@@ -0,0 +1,153 @@
from __future__ import annotations
import unittest
from sqlalchemy import create_engine, select
from sqlalchemy.orm import Session, sessionmaker
from govoplan_core.core.configuration_packages import (
ConfigurationExportSelection,
ConfigurationPackageFragment,
ConfigurationPreflightContext,
)
from govoplan_core.db.base import Base
from govoplan_workflow_engine.backend.configuration_provider import (
WORKFLOW_DEFINITIONS_FRAGMENT,
apply_workflow_definitions,
export_workflow_definitions,
preflight_workflow_definitions,
)
from govoplan_workflow_engine.backend.db.models import (
WorkflowDefinition,
WorkflowDefinitionRevision,
)
def fragment(*, label: str = "Review request") -> ConfigurationPackageFragment:
return ConfigurationPackageFragment(
module_id="workflow_engine",
fragment_type=WORKFLOW_DEFINITIONS_FRAGMENT,
fragment_id="permit-workflows",
payload={
"origin_module_id": "permits",
"origin_module_version": "1.0.0",
"items": [
{
"definition_key": "permit-review",
"name": "Permit review",
"scope_type": "system",
"graph": {
"schema_version": 1,
"nodes": [
{
"id": "start",
"type": "workflow.start.manual",
"label": "Start",
"config": {"input_schema_ref": ""},
},
{
"id": "review",
"type": "workflow.activity",
"label": label,
"config": {
"title": label,
"instructions": "",
"assignee": "",
"due_after": "",
},
},
{
"id": "done",
"type": "workflow.end.completed",
"label": "Done",
"config": {"output_mapping": {}},
},
],
"edges": [
{
"id": "start-review",
"source": "start",
"target": "review",
},
{"id": "review-done", "source": "review", "target": "done"},
],
},
},
],
},
)
class WorkflowConfigurationProviderTests(unittest.TestCase):
def setUp(self) -> None:
self.engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(
self.engine,
tables=[
WorkflowDefinition.__table__,
WorkflowDefinitionRevision.__table__,
],
)
self.Session = sessionmaker(bind=self.engine)
self.session: Session = self.Session()
self.context = ConfigurationPreflightContext(
installed_modules={"workflow_engine": "0.1.14"},
)
def tearDown(self) -> None:
self.session.close()
Base.metadata.drop_all(
self.engine,
tables=[
WorkflowDefinitionRevision.__table__,
WorkflowDefinition.__table__,
],
)
self.engine.dispose()
def test_fragment_preflight_apply_update_and_export(self) -> None:
initial = preflight_workflow_definitions(
self.session,
fragment(),
self.context,
)
created = apply_workflow_definitions(
self.session,
fragment(),
self.context,
registry=None,
)
repeated = apply_workflow_definitions(
self.session,
fragment(),
self.context,
registry=None,
)
updated = apply_workflow_definitions(
self.session,
fragment(label="Review corrected request"),
self.context,
registry=None,
)
exported = export_workflow_definitions(
self.session,
ConfigurationExportSelection(scopes=("system",)),
)
definition = self.session.scalar(select(WorkflowDefinition))
assert definition is not None
self.assertEqual("create", initial.plan[0].action)
self.assertIn("permit-review", created.created_refs)
self.assertFalse(repeated.created_refs)
self.assertFalse(repeated.updated_refs)
self.assertIn("permit-review", updated.updated_refs)
self.assertEqual(2, definition.current_revision)
self.assertEqual("workflow_definitions", exported.fragments[0].fragment_type)
self.assertEqual(
"permit-review",
exported.fragments[0].payload["items"][0]["definition_key"],
)
if __name__ == "__main__":
unittest.main()