backoffice: consider roles when displaying done/all forms in listing (#15818)

This commit is contained in:
Frédéric Péters 2017-04-11 11:13:55 +02:00
parent 4d586ac5ef
commit 6c45cec968
2 changed files with 31 additions and 0 deletions

View File

@ -2179,6 +2179,34 @@ def test_global_listing(pub):
resp = resp.forms['listing-settings'].submit()
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 33
# change role handling a formdef, make sure they do not appear anylonger in
# the all/done views.
role = Role(name='whatever')
role.store()
formdef = FormDef.get_by_urlname('form-title')
formdef.workflow_roles = {'_receiver': role.id}
formdef.store()
formdef.data_class().rebuild_security()
resp = app.get('/backoffice/management/listing?limit=500')
resp.forms['listing-settings']['status'] = 'waiting'
resp = resp.forms['listing-settings'].submit()
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 20
assert not 'form-title' in resp.body
resp.forms['listing-settings']['status'] = 'open'
resp = resp.forms['listing-settings'].submit()
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 20
assert not 'form-title' in resp.body
resp.forms['listing-settings']['status'] = 'all'
resp = resp.forms['listing-settings'].submit()
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 20
assert not 'form-title' in resp.body
resp.forms['listing-settings']['status'] = 'done'
resp = resp.forms['listing-settings'].submit()
assert resp.body[resp.body.index('<tbody'):].count('<tr') == 0
assert not 'form-title' in resp.body
def test_global_listing_with_no_formdefs(pub):
if not pub.is_using_postgresql():
pytest.skip('this requires SQL')

View File

@ -727,6 +727,9 @@ class ManagementDirectory(Directory):
criterias.append(Intersects('concerned_roles_array', user_roles))
elif status == 'done':
criterias.append(Equal('is_at_endpoint', True))
criterias.append(Intersects('concerned_roles_array', user_roles))
elif status == 'all':
criterias.append(Intersects('concerned_roles_array', user_roles))
if get_request().form.get('submission_channel'):
if get_request().form.get('submission_channel') == 'web':
criterias.append(Null('submission_channel'))