From 8e03915e343d86378aaede065637017a9ad79113 Mon Sep 17 00:00:00 2001 From: Chris Josten Date: Fri, 6 Feb 2026 13:30:48 +0100 Subject: [PATCH] /workflows/bulk-cancel: also cancel task with status INIT and WAIT Previously, only tasks with status PROGRESS were cancelled. This brings it in line with /workflow/{id}/cancel. Also added a test to verify the behaviour and changed the tasks in `setUp()` with state 'pending' to 'wait', since 'pending' is not a valid task state. Fixes finmars-platform/finmars-core#92 --- workflow/tests/test_workflow_view_set.py | 22 +++++++++++++++++++--- workflow/views.py | 4 +++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/workflow/tests/test_workflow_view_set.py b/workflow/tests/test_workflow_view_set.py index 08660fb..2dba391 100644 --- a/workflow/tests/test_workflow_view_set.py +++ b/workflow/tests/test_workflow_view_set.py @@ -27,7 +27,7 @@ def setUp(self): owner=self.user, name="Workflow 1", user_code="workflow1", - status="init", + status=Workflow.STATUS_INIT, payload_data='{"key": "test1"}', ) self.workflow1.created_at = date(2024, 6, 1) @@ -38,7 +38,7 @@ def setUp(self): owner=self.user, name="Workflow 2", user_code="workflow2", - status="pending", + status=Workflow.STATUS_WAIT, payload_data='{"key": "test2"}', ) self.workflow2.created_at = date(2024, 7, 1) @@ -50,7 +50,7 @@ def setUp(self): owner=self.user, name="Workflow 3", user_code="workflow3", - status="pending", + status=Workflow.STATUS_WAIT, payload_data='{"key": "test3"}', workflow_template=workflow_template, ) @@ -95,3 +95,19 @@ def test_workflow_verions_2(self): response = self.client.get(f"{self.url_prefix}{self.workflow3.id}/") self.assertEqual(response.status_code, 200) self.assertEqual(response.data["workflow_version"], 2) + + def test_workflow_cancel_bulk(self): + workflows = [self.workflow1, self.workflow2, self.workflow3] + workflow_ids = list([w.id for w in workflows]) + + response = self.client.post( + f"{self.url_prefix}bulk-cancel/", + { + "ids": workflow_ids, + }, + ) + + self.assertEqual(response.status_code, 200) + workflows = Workflow.objects.filter(pk__in=workflow_ids) + for workflow in workflows: + self.assertEqual(workflow.status, Workflow.STATUS_CANCELED) diff --git a/workflow/views.py b/workflow/views.py index 5ea9dd7..1f7415d 100644 --- a/workflow/views.py +++ b/workflow/views.py @@ -225,7 +225,9 @@ def bulk_cancel(self, request, *args, **kwargs): valid = serializer.is_valid(raise_exception=False) # noqa: F841 data = serializer.validated_data - workflows = Workflow.objects.filter(id__in=data["ids"], status=Workflow.STATUS_PROGRESS) + workflows = Workflow.objects.filter( + id__in=data["ids"], status__in=[Workflow.STATUS_INIT, Workflow.STATUS_PROGRESS, Workflow.STATUS_WAIT] + ) for workflow in workflows: workflow.cancel()