workflows: do not crash on global action name duplicate (#20874)

This commit is contained in:
Paul Marillonnet 2018-08-02 14:35:31 +02:00 committed by Frédéric Péters
parent e916dcf8d2
commit 5a5f2eb71a
2 changed files with 15 additions and 4 deletions

View File

@ -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)

View File

@ -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'))