backoffice: correctly restore bool filters in sidebar (#48574)

This commit is contained in:
Frédéric Péters 2020-11-16 17:53:25 +01:00
parent c97d646594
commit 1561bf579b
2 changed files with 45 additions and 0 deletions

View File

@ -555,3 +555,44 @@ def test_backoffice_custom_view_keep_filters(pub):
resp = app.get('/backoffice/management/form-title/user-custom-test-view/?filter-foo=A&keep-view-filters=on')
assert 'filter-1-value' in resp.forms['listing-settings'].fields
assert 'filter-2-value' in resp.forms['listing-settings'].fields
def test_backoffice_custom_view_boolean_filters(pub):
user = create_superuser(pub)
FormDef.wipe()
pub.custom_view_class.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [
fields.BoolField(
id='1', label='1st field', type='bool',
display_locations=['validation', 'summary', 'listings']),
]
formdef.store()
formdef.data_class().wipe()
for value in [True] * 5 + [False] * 2:
formdata = formdef.data_class()()
formdata.data = {'1': value}
formdata.jump_status('new')
formdata.store()
custom_view = pub.custom_view_class()
custom_view.title = 'custom test view'
custom_view.formdef = formdef
custom_view.visibility = 'owner'
custom_view.columns = {'list': [{'id': '1'}]}
custom_view.filters = {'filter-1': True, 'filter-1-value': 'true', 'filter': 'all'}
custom_view.user = user
custom_view.store()
app = login(get_app(pub))
resp = app.get('/backoffice/management/form-title/user-custom-test-view/')
assert resp.forms['listing-settings']['filter-1-value'].value == 'true'
assert resp.text.count('data-link=') == 5
custom_view.filters = {'filter-1': True, 'filter-1-value': 'false', 'filter': 'all'}
custom_view.store()
resp = app.get('/backoffice/management/form-title/user-custom-test-view/')
assert resp.forms['listing-settings']['filter-1-value'].value == 'false'
assert resp.text.count('data-link=') == 2

View File

@ -1390,6 +1390,10 @@ class FormPage(Directory):
elif filter_field.type == 'bool':
options = [(None, '', ''), (True, _('Yes'), 'true'), (False, _('No'), 'false')]
if filter_field_value == 'true':
filter_field_value = True
elif filter_field_value == 'false':
filter_field_value = False
r += SingleSelectWidget(filter_field_key, title=filter_field.label,
options=options, value=filter_field_value,
render_br=False).render()