From ef0d52900048aa51c697c04a55ed4728c1603fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 3 Mar 2018 16:05:46 +0100 Subject: [PATCH] misc: allow global actions for submitters (#22228) --- tests/test_form_pages.py | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ wcs/workflows.py | 5 ++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 27ef9158..53491279 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -4083,6 +4083,10 @@ def test_form_custom_select_template(pub): assert '' in resp.body def test_form_status_appearance_keywords(pub): + create_user(pub) + formdef = create_formdef() + formdef.data_class().wipe() + formdef = create_formdef() formdef.fields = [ fields.ItemField(id='1', label='select', type='item', @@ -4111,3 +4115,48 @@ def test_form_status_appearance_keywords(pub): resp = get_app(pub).get('/test/') assert 'class="quixote foobar plop"' in resp.body + +def test_user_global_action(pub): + user = create_user(pub) + + workflow = Workflow.get_default_workflow() + workflow.id = '2' + action = workflow.add_global_action('FOOBAR') + register_comment = action.append_item('register-comment') + register_comment.comment = 'HELLO WORLD GLOBAL ACTION' + jump = action.append_item('jump') + jump.status = 'finished' + trigger = action.triggers[0] + + workflow.store() + + formdef = FormDef() + formdef.name = 'test global action' + formdef.fields = [] + formdef.workflow_id = workflow.id + formdef.workflow_roles = {} + formdef.store() + + formdef.data_class().wipe() + + app = login(get_app(pub), username='foo', password='foo') + resp = app.get(formdef.get_url()) + resp = resp.form.submit('submit') + resp = resp.form.submit('submit') + + assert formdef.data_class().count() == 1 + formdata = formdef.data_class().select()[0] + + resp = app.get(formdata.get_url()) + assert not 'button-action-1' in resp.body + + trigger.roles = ['_submitter'] + workflow.store() + + resp = app.get(formdata.get_url()) + assert 'button-action-1' in resp.form.fields + resp = resp.form.submit('button-action-1') + + resp = app.get(formdata.get_url()) + assert 'HELLO WORLD GLOBAL ACTION' in resp.body + assert formdef.data_class().get(formdata.id).status == 'wf-finished' diff --git a/wcs/workflows.py b/wcs/workflows.py index 260da20e..6e87b374 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -402,8 +402,11 @@ class Workflow(StorableObject): for action in self.global_actions or []: for trigger in action.triggers or []: if isinstance(trigger, WorkflowGlobalActionManualTrigger): + if '_submitter' in (trigger.roles or []) and formdata.is_submitter(user): + actions.append(action) + break roles = [get_role_translation(formdata, x) - for x in (trigger.roles or [])] + for x in (trigger.roles or []) if x != '_submitter'] if set(roles).intersection(user.roles or []): actions.append(action) break -- 2.16.2