diff --git a/test/fixtures.py b/test/fixtures.py
index 0800edec6a175435a7af60afa51cb3b99f1301b7..69ae74ad4f62d0b54c2d765b236712cbcb556232 100644
--- a/test/fixtures.py
+++ b/test/fixtures.py
@@ -36,6 +36,7 @@ def site_subscription_factory(faker, geant_partner):
         site_internal_id=None,
         site_tier=SiteTier.TIER1,
         site_ts_address=None,
+        status: SubscriptionLifecycle | None = None,
         partner: dict | None = None,
     ) -> UUIDstr:
         if partner is None:
@@ -68,6 +69,9 @@ def site_subscription_factory(faker, geant_partner):
         site_subscription = SubscriptionModel.from_other_lifecycle(site_subscription, SubscriptionLifecycle.ACTIVE)
         site_subscription.description = description
         site_subscription.start_date = start_date
+        if status:
+            site_subscription.status = status
+
         site_subscription.save()
         db.session.commit()
 
diff --git a/test/workflows/shared/__init__.py b/test/workflows/shared/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test/workflows/shared/cancel_subscription.py b/test/workflows/shared/cancel_subscription.py
new file mode 100644
index 0000000000000000000000000000000000000000..9963b8f21066cfd02408a819b8ce2ae5facf8cba
--- /dev/null
+++ b/test/workflows/shared/cancel_subscription.py
@@ -0,0 +1,30 @@
+import pytest
+from orchestrator.domain.base import SubscriptionModel
+from orchestrator.types import SubscriptionLifecycle
+
+from test.workflows import assert_complete, extract_state, run_workflow
+
+
+@pytest.mark.parametrize(
+    "subscription_factory",
+    [
+        "site_subscription_factory",
+        "juniper_router_subscription_factory",
+        "nokia_router_subscription_factory",
+        "iptrunk_subscription_factory",
+    ],
+)
+@pytest.mark.workflow()
+def test_cancel_workflow_success(subscription_factory, geant_partner, request):
+    subscription_id = request.getfixturevalue(subscription_factory)(
+        status=SubscriptionLifecycle.INITIAL,
+        partner=geant_partner,
+    )
+    initial_site_data = [{"subscription_id": subscription_id}, {}]
+    result, _, _ = run_workflow("cancel_subscription", initial_site_data)
+    assert_complete(result)
+
+    state = extract_state(result)
+    subscription_id = state["subscription_id"]
+    subscription = SubscriptionModel.from_subscription(subscription_id)
+    assert subscription.status == "terminated"