Projet

Général

Profil

0001-misc-allow-dynamic-view-filters-to-be-based-on-email.patch

Frédéric Péters, 21 juin 2022 17:49

Télécharger (4,22 ko)

Voir les différences:

Subject: [PATCH] misc: allow dynamic view filters to be based on email fields
 (#64533)

 tests/form_pages/test_live.py | 25 +++++++++++++++++++------
 wcs/backoffice/management.py  |  2 +-
 2 files changed, 20 insertions(+), 7 deletions(-)
tests/form_pages/test_live.py
1184 1184
    assert not resp.form['f2'].attrs.get('value')
1185 1185

  
1186 1186

  
1187
def test_dynamic_item_field_from_custom_view_on_cards(pub):
1187
@pytest.mark.parametrize('field_type', ['item', 'string', 'email'])
1188
def test_dynamic_item_field_from_custom_view_on_cards(pub, field_type):
1188 1189
    if not pub.is_using_postgresql():
1189 1190
        pytest.skip('this requires SQL')
1190 1191
        return
......
1212 1213
    carddef.digest_templates = {'default': '{{form_var_attr}}'}
1213 1214
    carddef.workflow_roles = {'_editor': user.roles[0]}
1214 1215
    carddef.fields = [
1215
        fields.ItemField(id='0', type='item', label='item', varname='item', items=['foo', 'bar', 'baz']),
1216 1216
        fields.StringField(id='1', type='string', label='string', varname='attr'),
1217 1217
    ]
1218
    if field_type == 'item':
1219
        carddef.fields.append(
1220
            fields.ItemField(id='0', type='item', label='item', varname='item', items=['foo', 'bar', 'baz'])
1221
        )
1222
    elif field_type == 'string':
1223
        carddef.fields.append(fields.StringField(id='0', type='string', label='string', varname='item'))
1224
    elif field_type == 'email':
1225
        carddef.fields.append(fields.EmailField(id='0', type='email', label='email', varname='item'))
1218 1226
    carddef.store()
1219 1227
    carddef.data_class().wipe()
1220 1228
    baz_ids = set()
......
1222 1230
        carddata = carddef.data_class()()
1223 1231
        carddata.data = {
1224 1232
            '0': value,
1225
            '0_display': value,
1226 1233
            '1': 'attr%s' % i,
1227 1234
        }
1235
        if field_type == 'item':
1236
            carddata.data['0_display'] = value
1228 1237
        carddata.just_created()
1229 1238
        carddata.store()
1230 1239
        if value == 'baz':
......
1246 1255
    resp.forms['save-custom-view']['visibility'] = 'datasource'
1247 1256
    resp = resp.forms['save-custom-view'].submit().follow()
1248 1257

  
1249
    assert resp.forms['listing-settings']['filter-0-value'].attrs['data-allow-template']
1250
    assert 'custom value' in [x[2] for x in resp.forms['listing-settings']['filter-0-value'].options]
1251
    resp.forms['listing-settings']['filter-0-value'].force_value('{{ form_var_blah }}')
1258
    if field_type == 'item':
1259
        # some javascript to get a text input for filter value
1260
        assert resp.forms['listing-settings']['filter-0-value'].attrs['data-allow-template']
1261
        assert 'custom value' in [x[2] for x in resp.forms['listing-settings']['filter-0-value'].options]
1262
        resp.forms['listing-settings']['filter-0-value'].force_value('{{ form_var_blah }}')
1263
    else:
1264
        resp.forms['listing-settings']['filter-0-value'] = '{{ form_var_blah }}'
1252 1265

  
1253 1266
    resp = resp.forms['listing-settings'].submit()
1254 1267
    assert resp.forms['listing-settings']['filter-0-value'].value == '{{ form_var_blah }}'
wcs/backoffice/management.py
2013 2013
                    filter_field_value = False
2014 2014
                else:
2015 2015
                    raise RequestError('Invalid value "%s" for "%s"' % (filter_field_value, filter_field_key))
2016
            elif filter_field.type in ('item', 'items', 'string'):
2016
            elif filter_field.type in ('item', 'items', 'string', 'email'):
2017 2017
                if Template.is_template_string(filter_field_value):
2018 2018
                    if keep_templates:
2019 2019
                        criterias.append(criteria(filter_field.id, filter_field_value))
2020
-