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