feat(campaigns): add portable campaign transfers
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-22 04:01:39 +02:00
parent 1bd24f9b5b
commit 3934e7fedb
20 changed files with 2310 additions and 18 deletions
+7 -1
View File
@@ -13,6 +13,7 @@ from govoplan_campaign.backend.routes.operations import router as operations_rou
from govoplan_campaign.backend.routes.reports import router as reports_router
from govoplan_campaign.backend.routes.schedules import router as schedules_router
from govoplan_campaign.backend.routes.sharing import router as sharing_router
from govoplan_campaign.backend.routes.transfers import router as transfers_router
from govoplan_campaign.backend.routes.versions import router as versions_router
@@ -27,6 +28,7 @@ def _operation_keys(candidate_router) -> list[tuple[str, str]]:
def test_campaign_router_composes_every_workflow_operation_once() -> None:
workflow_routers = (
operations_router,
transfers_router,
campaigns_router,
assignments_router,
collaboration_router,
@@ -46,7 +48,7 @@ def test_campaign_router_composes_every_workflow_operation_once() -> None:
actual = _operation_keys(router)
assert actual == expected
assert len(actual) == 93
assert len(actual) == 96
assert not [operation for operation, count in Counter(actual).items() if count > 1]
@@ -57,6 +59,10 @@ def test_key_routes_are_owned_by_their_focused_router() -> None:
("POST", "/campaigns/operations/artifacts/reconcile"),
),
(campaigns_router, ("GET", "/campaigns/{campaign_id}/workspace")),
(
transfers_router,
("POST", "/campaign-transfers/imports/preview"),
),
(collaboration_router, ("POST", "/campaigns/{campaign_id}/collaboration")),
(assignments_router, ("POST", "/campaigns/{campaign_id}/assignments")),
(versions_router, ("POST", "/campaigns/versions/{version_id}/build")),