Projet

Général

Profil

0001-forms-redirect-manager-to-backoffice-view-of-formdat.patch

Frédéric Péters, 18 juillet 2018 12:36

Télécharger (5,16 ko)

Voir les différences:

Subject: [PATCH] forms: redirect manager to backoffice view of formdatas
 (#25330)

 tests/test_backoffice_pages.py |  4 +-
 tests/test_form_pages.py       | 73 ++++++++++++++++++++++++++++++++++
 wcs/forms/common.py            |  6 +++
 3 files changed, 82 insertions(+), 1 deletion(-)
tests/test_backoffice_pages.py
2271 2271
    assert 'submission_channel' not in resp.form.fields
2272 2272

  
2273 2273
def test_backoffice_wscall_failure_display(http_requests, pub):
2274
    create_user(pub)
2274
    user = create_user(pub)
2275 2275
    create_environment(pub)
2276 2276
    formdef = FormDef.get_by_urlname('form-title')
2277 2277
    form_class = formdef.data_class()
......
2313 2313
    resp = resp.follow()
2314 2314
    assert 'Error during webservice call' in resp.body
2315 2315

  
2316
    number31.user_id = user.id  # change ownership to stay in frontoffice
2317
    number31.store()
2316 2318
    # the failure message shouldn't be displayed in the frontoffice
2317 2319
    resp = app.get('/form-title/%s/' % number31.id)
2318 2320
    assert (' with the number %s.' % number31.get_display_id()) in resp.body
tests/test_form_pages.py
4105 4105

  
4106 4106
    Role.wipe()
4107 4107
    role = Role(name='xxx')
4108
    role.allows_backoffice_access = False
4108 4109
    role.store()
4109 4110

  
4110 4111
    jump.by = [role.id]
......
4919 4920
    resp = resp.form.submit('submit')
4920 4921
    resp = resp.form.submit('submit')
4921 4922
    assert emails.get('New form2 (test condition on action)')
4923

  
4924
def test_manager_public_access(pub):
4925
    user, manager = create_user_and_admin(pub)
4926

  
4927
    Role.wipe()
4928
    role = Role(name='xxx')
4929
    role.store()
4930

  
4931
    manager.is_admin = False
4932
    manager.roles = [role.id]
4933
    manager.store()
4934
    assert manager.can_go_in_backoffice()
4935

  
4936
    formdef = create_formdef()
4937
    formdef.workflow_roles = {'_receiver': role.id}
4938
    formdef.store()
4939

  
4940
    formdata = formdef.data_class()()
4941
    formdata.user_id = user.id
4942
    formdata.data = {}
4943
    formdata.just_created()
4944
    formdata.store()
4945

  
4946
    # user access to own formdata
4947
    app = login(get_app(pub), username='foo', password='foo')
4948
    resp = app.get(formdata.get_url())
4949
    assert 'The form has been recorded' in resp.body
4950

  
4951
    # agent access to formdata
4952
    app = login(get_app(pub), username='admin', password='admin')
4953
    resp = app.get(formdata.get_url())
4954
    assert resp.location == formdata.get_url(backoffice=True)
4955
    resp = resp.follow()
4956
    assert 'The form has been recorded' in resp.body
4957

  
4958
    # agent access to an unauthorized formdata
4959
    formdef.workflow_roles = {'_receiver': None}
4960
    formdef.store()
4961
    resp = app.get(formdata.get_url(), status=403)
4962

  
4963
    # agent access via a tracking code (stays in frontoffice)
4964
    formdef.workflow_roles = {'_receiver': role.id}
4965
    formdef.enable_tracking_codes = True
4966
    formdef.store()
4967

  
4968
    code = pub.tracking_code_class()
4969
    code.formdata = formdata
4970
    code.store()
4971

  
4972
    resp = app.get('/code/%s/load' % code.id)
4973
    resp = resp.follow() # -> /test/1
4974
    assert not 'backoffice' in resp.location
4975
    resp = resp.follow() # -> /test/1/
4976
    assert 'The form has been recorded' in resp.body
4977

  
4978
    # authorized access but not backoffice access
4979
    app = login(get_app(pub), username='admin', password='admin')  # reset session
4980
    resp = app.get(formdata.get_url())
4981
    assert resp.location == formdata.get_url(backoffice=True)  # check tracking code is no longer effective
4982
    role.allows_backoffice_access = False
4983
    role.store()
4984
    resp = app.get(formdata.get_url())
4985
    assert 'The form has been recorded' in resp.body
4986

  
4987
    # agent access to own formdata (stays in frontoffice)
4988
    formdata = formdef.data_class()()
4989
    formdata.user_id = manager.id
4990
    formdata.data = {}
4991
    formdata.just_created()
4992
    formdata.store()
4993
    resp = app.get(formdata.get_url())
4994
    assert 'The form has been recorded' in resp.body
wcs/forms/common.py
227 227

  
228 228
    def _q_index(self):
229 229
        mine = self.check_auth()
230
        if not mine and not get_request().is_in_backoffice():
231
            # access authorized but the form doesn't belong to the user; if the
232
            # user has access to the backoffice, redirect.
233
            if get_request().user.can_go_in_backoffice():
234
                return redirect(self.filled.get_url(backoffice=True))
235

  
230 236
        get_logger().info('form %s - id: %s - view' % (self.formdef.name, self.filled.id))
231 237

  
232 238
        user = get_request().user
233
-