prevent deletion of last workflow and update configs on deletion
This commit is contained in:
parent
0f03eb1446
commit
6f798357fa
@ -1598,15 +1598,29 @@ class WorkflowViewSet(ModelViewSet, ProtectedErrorMessageMixin):
|
||||
result = False
|
||||
return result
|
||||
|
||||
@transaction.atomic
|
||||
def destroy(self, *args, **kwargs):
|
||||
"""
|
||||
Customized view endpoint to delete a workflow.
|
||||
"""
|
||||
workflow_pk = self.get_object().pk
|
||||
if not Workflow.objects.exclude(pk=workflow_pk).exists():
|
||||
raise ValidationError({"detail": "You cannot delete the last workflow."})
|
||||
|
||||
try:
|
||||
result = super().destroy(*args, **kwargs)
|
||||
except ProtectedError as err:
|
||||
msg = self.getProtectedErrorMessage("workflow", err)
|
||||
raise ValidationError({"detail": msg})
|
||||
|
||||
# Change motion default workflows in the config
|
||||
if int(config["motions_workflow"]) == workflow_pk:
|
||||
config["motions_workflow"] = str(Workflow.objects.first().pk)
|
||||
if int(config["motions_statute_amendments_workflow"]) == workflow_pk:
|
||||
config["motions_statute_amendments_workflow"] = str(
|
||||
Workflow.objects.first().pk
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
|
@ -1972,6 +1972,15 @@ class DeleteWorkflow(TestCase):
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(Workflow.objects.count(), 2)
|
||||
|
||||
def test_delete_last_workflow(self):
|
||||
self.workflow.delete()
|
||||
other_workflow_pk = Workflow.objects.get().pk
|
||||
response = self.client.delete(
|
||||
reverse("workflow-detail", args=[other_workflow_pk])
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(Workflow.objects.count(), 1) # Just the other default one
|
||||
|
||||
|
||||
class DeleteCategory(TestCase):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user