Add workflow baseline orchestration contracts
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from fastapi import FastAPI
|
||||
|
||||
from govoplan_core.core.lifecycle import ModuleLifecycleManager
|
||||
from govoplan_core.core.modules import (
|
||||
ModuleInterfaceProvider,
|
||||
ModuleManifest,
|
||||
)
|
||||
from govoplan_core.core.registry import PlatformRegistry
|
||||
from govoplan_core.core.workflows import (
|
||||
CAPABILITY_WORKFLOW_DEFINITION_CONTRIBUTIONS,
|
||||
WorkflowDefinitionContribution,
|
||||
)
|
||||
from govoplan_core.db.session import configure_database, reset_database
|
||||
|
||||
|
||||
class _ContributionProvider:
|
||||
def __init__(self) -> None:
|
||||
self.calls = 0
|
||||
|
||||
def reconcile(self, session, *, tenant_ids=()):
|
||||
del session, tenant_ids
|
||||
self.calls += 1
|
||||
return {"created": 1, "updated": 0}
|
||||
|
||||
|
||||
class WorkflowContributionLifecycleTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
configure_database("sqlite:///:memory:")
|
||||
|
||||
def tearDown(self) -> None:
|
||||
reset_database(dispose=True)
|
||||
|
||||
def test_active_graph_change_reconciles_module_workflow_baselines(self) -> None:
|
||||
provider = _ContributionProvider()
|
||||
workflow_engine = ModuleManifest(
|
||||
id="workflow_engine",
|
||||
name="Workflow Engine",
|
||||
version="1.0.0",
|
||||
provides_interfaces=(
|
||||
ModuleInterfaceProvider(
|
||||
name="workflow.definition_contributions",
|
||||
version="1.0.0",
|
||||
),
|
||||
),
|
||||
capability_factories={
|
||||
CAPABILITY_WORKFLOW_DEFINITION_CONTRIBUTIONS: (
|
||||
lambda _context: provider
|
||||
),
|
||||
},
|
||||
)
|
||||
domain = ModuleManifest(
|
||||
id="permits",
|
||||
name="Permits",
|
||||
version="1.0.0",
|
||||
workflow_definitions=(
|
||||
WorkflowDefinitionContribution(
|
||||
origin_module_id="permits",
|
||||
origin_module_version="1.0.0",
|
||||
definition_key="approve",
|
||||
name="Approve permit",
|
||||
graph={"nodes": [], "edges": []},
|
||||
),
|
||||
),
|
||||
)
|
||||
registry = PlatformRegistry()
|
||||
lifecycle = ModuleLifecycleManager(
|
||||
registry=registry,
|
||||
available_modules={
|
||||
workflow_engine.id: workflow_engine,
|
||||
domain.id: domain,
|
||||
},
|
||||
settings=None,
|
||||
)
|
||||
lifecycle.attach_app(FastAPI())
|
||||
|
||||
result = lifecycle.apply_enabled_modules(
|
||||
("workflow_engine", "permits"),
|
||||
migrate=False,
|
||||
protected_modules=(),
|
||||
)
|
||||
|
||||
self.assertEqual(("permits", "workflow_engine"), result.enabled_modules)
|
||||
self.assertEqual(1, provider.calls)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user