From 5a5f2eb71ae35476092076b0c83ae20a9eab63c1 Mon Sep 17 00:00:00 2001 From: Paul Marillonnet Date: Thu, 2 Aug 2018 14:35:31 +0200 Subject: [PATCH] workflows: do not crash on global action name duplicate (#20874) --- tests/test_admin_pages.py | 8 +++++++- wcs/admin/workflows.py | 11 ++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index 5cda23540..172e02e32 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -2979,7 +2979,13 @@ def test_workflows_global_actions(pub): resp = resp.click('add global action') resp.forms[0]['name'] = 'Global Action' resp = resp.forms[0].submit('submit') - assert Workflow.get(workflow.id).global_actions[0].name == 'Global Action' + + # test adding action with same name + resp = app.get('/backoffice/workflows/%s/' % workflow.id) + resp = resp.click('add global action') + resp.forms[0]['name'] = 'Global Action' + resp = resp.forms[0].submit('submit') + assert 'There is already an action with that name.' in resp.body # test rename resp = app.get('/backoffice/workflows/%s/' % workflow.id) diff --git a/wcs/admin/workflows.py b/wcs/admin/workflows.py index 38d253426..c6c252ca3 100644 --- a/wcs/admin/workflows.py +++ b/wcs/admin/workflows.py @@ -1302,9 +1302,14 @@ class GlobalActionsDirectory(Directory): if form.is_submitted() and not form.has_errors(): name = form.get_widget('name').parse() - action = self.workflow.add_global_action(name) - self.workflow.store() - return redirect('%s/' % action.id) + try: + action = self.workflow.add_global_action(name) + except DuplicateGlobalActionNameError: + form.get_widget('name').set_error( + _('There is already an action with that name.')) + else: + self.workflow.store() + return redirect('%s/' % action.id) get_response().breadcrumb.append(('new', _('New Global Action'))) html_top('workflows', title=_('New Global Action'))