From a3c567631ded18a552624edf7981c65b51749605 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Thu, 21 Mar 2024 16:00:42 +0100
Subject: [PATCH] Add unit test for cancellation workflow

---
 test/fixtures.py                             |  4 +++
 test/workflows/shared/__init__.py            |  0
 test/workflows/shared/cancel_subscription.py | 30 ++++++++++++++++++++
 3 files changed, 34 insertions(+)
 create mode 100644 test/workflows/shared/__init__.py
 create mode 100644 test/workflows/shared/cancel_subscription.py

diff --git a/test/fixtures.py b/test/fixtures.py
index d1775d8e..f0c55c21 100644
--- a/test/fixtures.py
+++ b/test/fixtures.py
@@ -38,6 +38,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:
@@ -70,6 +71,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 00000000..e69de29b
diff --git a/test/workflows/shared/cancel_subscription.py b/test/workflows/shared/cancel_subscription.py
new file mode 100644
index 00000000..9963b8f2
--- /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"
-- 
GitLab