backoffice: restore status operator from custom view in listings (#65248)

This commit is contained in:
Frédéric Péters 2022-05-14 12:20:00 +02:00
parent 0ff8b5a8e3
commit 613dec5d33
2 changed files with 72 additions and 1 deletions

View File

@ -375,6 +375,74 @@ def test_backoffice_custom_view_user_filter(pub):
assert resp.text.count('"cell-user">admin<') == 0
def test_backoffice_custom_view_status_filter(pub):
create_superuser(pub)
FormDef.wipe()
pub.custom_view_class.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [
fields.ItemField(
id='1',
label='field',
type='item',
items=['foo', 'bar', 'baz'],
display_locations=['validation', 'summary', 'listings'],
),
]
formdef.workflow_roles = {'_receiver': 1}
formdef.store()
formdef.data_class().wipe()
for i in range(3):
formdata = formdef.data_class()()
formdata.data = {}
if i == 0:
formdata.data['1'] = 'foo'
formdata.data['1_display'] = 'foo'
else:
formdata.data['1'] = 'baz'
formdata.data['1_display'] = 'baz'
formdata.jump_status('new')
formdata.store()
# change status of latest
formdata.jump_status('rejected')
formdata.store()
app = login(get_app(pub))
resp = app.get('/backoffice/management/form-title/')
assert resp.pyquery('tbody tr').length == 2
# filters
resp.forms['listing-settings']['filter'].value = 'rejected'
resp = resp.forms['listing-settings'].submit()
assert resp.pyquery('tbody tr').length == 1
resp.forms['save-custom-view']['title'] = 'custom test view'
resp = resp.forms['save-custom-view'].submit()
assert resp.location.endswith('/user-custom-test-view/')
resp = resp.follow()
assert resp.pyquery('tbody tr').length == 1
resp.forms['listing-settings']['filter-operator'] = 'ne'
resp = resp.forms['listing-settings'].submit()
assert resp.pyquery('tbody tr').length == 2
assert resp.forms['save-custom-view']['update'].checked is True
resp = resp.forms['save-custom-view'].submit()
assert pub.custom_view_class.select()[0].filters == {
'filter-operator': 'ne',
'filter': 'rejected',
'filter-status': 'on',
}
assert resp.location.endswith('/user-custom-test-view/')
resp = resp.follow()
assert resp.forms['listing-settings']['filter-operator'].value == 'ne'
assert resp.pyquery('tbody tr').length == 2
def test_backoffice_custom_view_delete(pub):
create_superuser(pub)

View File

@ -1765,7 +1765,10 @@ class FormPage(Directory):
return 'all'
def get_filter_operator_from_query(self):
operator = get_request().form.get('filter-operator') or 'eq'
default_filter_operator = 'eq'
if self.view:
default_filter_operator = self.view.filters.get('filter-operator', 'eq')
operator = get_request().form.get('filter-operator') or default_filter_operator
if operator not in ['eq', 'ne']:
raise RequestError('Invalid operator "%s" for "filter-operator"' % operator)
return operator