Projet

Général

Profil

0001-forms-fix-is_of_concern_for_user-to-take-formdata-in.patch

Frédéric Péters, 04 janvier 2016 18:23

Télécharger (3,49 ko)

Voir les différences:

Subject: [PATCH] forms: fix is_of_concern_for_user to take formdata into
 account (#9494)

 tests/test_backoffice_pages.py | 33 +++++++++++++++++++++++++++++++++
 wcs/formdef.py                 | 14 +++++++++-----
 2 files changed, 42 insertions(+), 5 deletions(-)
tests/test_backoffice_pages.py
18 18
from wcs.roles import Role
19 19
from wcs.workflows import (Workflow, CommentableWorkflowStatusItem,
20 20
        ChoiceWorkflowStatusItem, EditableWorkflowStatusItem)
21
from wcs.wf.dispatch import DispatchWorkflowStatusItem
21 22
from wcs.wf.jump import JumpWorkflowStatusItem
22 23
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
23 24
from wcs.wf.wscall import WebserviceCallStatusItem
......
757 758
    resp = resp.form.submit('cancel')
758 759
    assert resp.location == 'http://example.net/backoffice/submission/'
759 760

  
761
def test_backoffice_submission_dispatch(pub):
762
    user = create_user(pub)
763
    create_environment(pub)
764

  
765
    wf = Workflow(name='dispatch')
766
    st1 = wf.add_status('Status1')
767
    dispatch = DispatchWorkflowStatusItem()
768
    dispatch.id = '_dispatch'
769
    dispatch.role_key = '_receiver'
770
    dispatch.role_id = '2'
771
    st1.items.append(dispatch)
772
    dispatch.parent = st1
773
    wf.store()
774

  
775
    formdef = FormDef.get_by_urlname('form-title')
776
    formdef.workflow_id = wf.id
777
    formdef.backoffice_submission_roles = user.roles[:]
778
    formdef.store()
779

  
780
    app = login(get_app(pub))
781
    resp = app.get('/backoffice/submission/')
782

  
783
    resp = resp.click(formdef.name)
784
    resp.form['f1'] = 'test submission'
785
    resp.form['f2'] = 'baz'
786
    resp.form['f3'] = 'C'
787
    resp = resp.form.submit('submit') # to validation screen
788
    resp = resp.form.submit('submit') # final submit
789
    # should go the submission screen
790
    assert resp.location == 'http://example.net/backoffice/submission/'
791
    resp = resp.follow()
792

  
760 793
def test_backoffice_submission_tracking_code(pub):
761 794
    user = create_user(pub)
762 795
    create_environment(pub)
wcs/formdef.py
935 935
    def is_of_concern_for_user(self, user, formdata=None):
936 936
        if not self.workflow_roles:
937 937
            self.workflow_roles = {}
938
        for role_id in self.workflow_roles.values():
938
        workflow_roles = self.workflow_roles.copy()
939
        if formdata and formdata.workflow_roles:
940
            workflow_roles.update(formdata.workflow_roles)
941
        for role_id in workflow_roles.values():
939 942
            if role_id in (user.roles or []):
940 943
                return True
941
        data_class = self.data_class()
942
        for role_id in user.roles or []:
943
            if data_class.get_ids_with_indexed_value('workflow_roles', role_id):
944
                return True
944
        if not formdata:
945
            data_class = self.data_class()
946
            for role_id in user.roles or []:
947
                if data_class.get_ids_with_indexed_value('workflow_roles', role_id):
948
                    return True
945 949
        return False
946 950

  
947 951
    def is_user_allowed_read(self, user, formdata=None):
948
-