backoffice: fix customview criteria display with template (#78441) #374

Merged
lguerin merged 1 commits from wip/78441-fix-select2 into main 2023-06-13 15:57:24 +02:00
2 changed files with 90 additions and 1 deletions

View File

@ -1,4 +1,5 @@
import os
import random
import re
import pytest
@ -1216,6 +1217,31 @@ def test_item_options_in_custom_view(pub):
role.store()
CardDef.wipe()
subcarddef = CardDef()
subcarddef.name = 'sub-card-title'
subcarddef.digest_templates = {'default': '{{ form_var_foo }}'}
subcarddef.fields = [
fields.StringField(
id='1',
label='1st field',
type='string',
),
]
subcarddef.workflow_roles = {'_editor': role.id}
subcarddef.store()
data_class = subcarddef.data_class()
data_class.wipe()
subcards = []
for i in range(0, 20):
carddata = data_class()
carddata.data = {
'1': 'plop%s' % (i + 1),
}
carddata.just_created()
carddata.store()
subcards.append(carddata)
carddef = CardDef()
carddef.name = 'card-title'
carddef.digest_templates = {'default': '{{ form_var_foo }}'}
@ -1257,6 +1283,14 @@ def test_item_options_in_custom_view(pub):
display_locations=['validation', 'summary', 'listings'],
display_mode='autocomplete',
),
fields.ItemField(
id='6',
label='6th field',
type='item',
data_source={'type': 'carddef:%s' % subcarddef.slug},
display_locations=['validation', 'summary', 'listings'],
display_mode='list',
),
]
carddef.workflow_roles = {'_editor': role.id}
carddef.store()
@ -1264,8 +1298,11 @@ def test_item_options_in_custom_view(pub):
data_class = carddef.data_class()
data_class.wipe()
used_subcards = set()
for i in range(0, 12):
carddata = data_class()
card = random.choice(subcards)
used_subcards.add(card)
carddata.data = {
'1': 'plop%s' % (i % 2),
'2': 'a%s' % (i % 4),
@ -1276,6 +1313,8 @@ def test_item_options_in_custom_view(pub):
'4_display': 'a%s' % (i % 4),
'5': 'a%s' % (i % 4),
'5_display': 'a%s' % (i % 4),
'6': str(card.id),
'6_display': 'plop%s' % card.id,
}
carddata.just_created()
carddata.store()
@ -1305,6 +1344,7 @@ def test_item_options_in_custom_view(pub):
resp.forms['listing-settings']['filter-3'].checked = True
resp.forms['listing-settings']['filter-4'].checked = True
resp.forms['listing-settings']['filter-5'].checked = True
resp.forms['listing-settings']['filter-6'].checked = True
resp = resp.forms['listing-settings'].submit()
# field 2: select - all used options are listed
@ -1335,6 +1375,14 @@ def test_item_options_in_custom_view(pub):
resp2 = app.get(resp.request.path + 'filter-options?filter_field_id=5&_search=')
assert [x['id'] for x in resp2.json['data']] == ['a0', 'a1', 'a2', 'a3']
# field 6: select - all used options are listed
assert (
len([x[0] for x in resp.forms['listing-settings']['filter-6-value'].options])
== len(used_subcards) + 1
)
resp2 = app.get(resp.request.path + 'filter-options?filter_field_id=6&_search=')
assert len([x['id'] for x in resp2.json['data']]) == len(used_subcards)
resp = app.get('/backoffice/data/card-title/custom-test-view-for-datasource/')
# enable filters
resp.forms['listing-settings']['filter-1'].checked = True
@ -1342,6 +1390,7 @@ def test_item_options_in_custom_view(pub):
resp.forms['listing-settings']['filter-3'].checked = True
resp.forms['listing-settings']['filter-4'].checked = True
resp.forms['listing-settings']['filter-5'].checked = True
resp.forms['listing-settings']['filter-6'].checked = True
resp = resp.forms['listing-settings'].submit()
# field 2: select2 - all items are listed
@ -1364,6 +1413,44 @@ def test_item_options_in_custom_view(pub):
'azertyuiopqsdfghjklmwxcvbn'
)[:15] + ['{}']
# field 6: select2 - all items are listed
assert [x[0] for x in resp.forms['listing-settings']['filter-6-value'].options] == ['', '{}']
resp2 = app.get(resp.request.path + 'filter-options?filter_field_id=6&_search=')
assert len([x['id'] for x in resp2.json['data']]) == 16
datasource_custom_view.filters = {
'filter-5': 'on',
'filter-5-value': '{{ form_var_foo }}',
'filter-6': 'on',
'filter-6-value': '{{ form_var_bar }}',
}
datasource_custom_view.store()
resp = app.get('/backoffice/data/card-title/custom-test-view-for-datasource/')
assert resp.forms['listing-settings']['filter-5-value'].options == [
('', False, ''),
('a', False, 'a'),
('z', False, 'z'),
('e', False, 'e'),
('r', False, 'r'),
('t', False, 't'),
('y', False, 'y'),
('u', False, 'u'),
('i', False, 'i'),
('o', False, 'o'),
('p', False, 'p'),
('q', False, 'q'),
('s', False, 's'),
('d', False, 'd'),
('f', False, 'f'),
('g', False, 'g'),
('{}', False, 'custom value'),
('{{ form_var_foo }}', True, '{{ form_var_foo }}'),
]
assert resp.forms['listing-settings']['filter-6-value'].options == [
('{{ form_var_bar }}', True, '{{ form_var_bar }}'),
Review

ici, avant on avait une chaîne vide en 3e élément, et un affichage vide

ici, avant on avait une chaîne vide en 3e élément, et un affichage vide
('{}', False, 'custom value'),
]
@pytest.mark.parametrize('user_perms', ['admin', 'category_admin', 'category_not_admin', 'agent'])
def test_backoffice_hidden_data_source_custom_view(pub, user_perms):

View File

@ -1323,7 +1323,9 @@ class FormPage(FormdefDirectoryBase):
if not is_multi_values:
value_display = filter_field_value or ''
if filter_field_value:
value_display = filter_field.get_display_value(filter_field_value)
value_display = (
filter_field.get_display_value(filter_field_value) or filter_field_value
)
options = [(filter_field_value, value_display, filter_field_value or '')]
attrs = {'data-remote-options': str(filter_field.contextual_id)}
get_response().add_javascript(