Files
govoplan-campaign/tests/test_workflow_definitions.py
zemion 1bd24f9b5b
Module Package Release / publish-packages (push) Successful in 13s
feat: orchestrate accountable Campaign work
2026-08-22 02:14:35 +02:00

43 lines
1.6 KiB
Python

from __future__ import annotations
from govoplan_campaign.backend.manifest import get_manifest
from govoplan_campaign.backend.workflow_definitions import (
campaign_workflow_definitions,
)
from govoplan_core.core.campaigns import CAPABILITY_CAMPAIGNS_WORK_ORCHESTRATION
def test_campaign_work_handoff_is_an_opt_in_reusable_template() -> None:
contribution = campaign_workflow_definitions(module_version="0.1.23")[0]
assert contribution.origin_module_id == "campaigns"
assert contribution.definition_kind == "template"
assert contribution.activate_on_install is False
assert contribution.allow_reuse is True
assert contribution.required_capabilities == (
CAPABILITY_CAMPAIGNS_WORK_ORCHESTRATION,
)
assert contribution.policy_metadata["assignment_authorization_neutral"] is True
nodes = {
str(node["id"]): node
for node in contribution.graph["nodes"] # type: ignore[index]
}
prepare = nodes["prepare"]
handoff = nodes["campaign_work"]
assert prepare["config"]["operation"] == "campaigns.work.prepare" # type: ignore[index]
assert handoff["type"] == "workflow.external_handoff"
assert handoff["config"]["event_type"] == "campaign.work.changed" # type: ignore[index]
assert handoff["config"]["terminal_outcomes"] == { # type: ignore[index]
"completed": "completed",
"rejected": "rejected",
"cancelled": "cancelled",
}
def test_manifest_contributes_the_current_campaign_work_template() -> None:
manifest = get_manifest()
assert len(manifest.workflow_definitions) == 1
assert manifest.workflow_definitions[0].origin_module_version == manifest.version