backoffice: fix customview criteria display with template (#78441) #374
|
@ -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 }}'),
|
||||
|
||||
('{}', 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):
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue
ici, avant on avait une chaîne vide en 3e élément, et un affichage vide