Projet

Général

Profil

0001-backoffice-global-view-filtered-bu-category_slugs-53.patch

Lauréline Guérin, 27 avril 2021 14:38

Télécharger (7,56 ko)

Voir les différences:

Subject: [PATCH] backoffice: global view filtered bu category_slugs (#53373)

 tests/backoffice_pages/test_all.py | 78 ++++++++++++++++++++++++------
 wcs/backoffice/management.py       | 36 +++++++++++---
 2 files changed, 92 insertions(+), 22 deletions(-)
tests/backoffice_pages/test_all.py
3170 3170
        pytest.skip('this requires SQL')
3171 3171
        return
3172 3172

  
3173
    FormDef.wipe()
3174
    Category.wipe()
3175

  
3173 3176
    create_user(pub)
3174
    create_environment(pub)
3177

  
3178
    formdef = FormDef()
3179
    formdef.name = 'form-3'
3180
    formdef.workflow_roles = {'_receiver': 1}
3181
    formdef.store()
3182
    formdata = formdef.data_class()()
3183
    formdata.just_created()
3184
    formdata.jump_status('new')
3185
    formdata.store()
3175 3186

  
3176 3187
    app = login(get_app(pub))
3177 3188
    resp = app.get('/backoffice/management/listing?limit=500')
3178
    assert 'category_id' not in resp.forms['listing-settings'].fields
3189
    assert 'category_ids$element0' not in resp.forms['listing-settings'].fields
3179 3190

  
3180 3191
    cat1 = Category(name='cat1')
3192
    cat1.position = 1
3181 3193
    cat1.store()
3182
    formdef = FormDef.get_by_urlname('form-title')
3194
    formdef = FormDef()
3195
    formdef.name = 'form-1'
3183 3196
    formdef.category_id = cat1.id
3197
    formdef.workflow_roles = {'_receiver': 1}
3184 3198
    formdef.store()
3199
    formdata = formdef.data_class()()
3200
    formdata.just_created()
3201
    formdata.jump_status('new')
3202
    formdata.store()
3185 3203

  
3186 3204
    cat2 = Category(name='cat2')
3205
    cat1.position = 2
3187 3206
    cat2.store()
3188
    formdef = FormDef.get_by_urlname('other-form')
3207
    formdef = FormDef()
3208
    formdef.name = 'form-2'
3189 3209
    formdef.category_id = cat2.id
3210
    formdef.workflow_roles = {'_receiver': 1}
3190 3211
    formdef.store()
3212
    formdata = formdef.data_class()()
3213
    formdata.just_created()
3214
    formdata.jump_status('new')
3215
    formdata.store()
3191 3216

  
3192
    resp = app.get('/backoffice/management/listing?limit=500')
3193
    assert 'category_id' in resp.forms['listing-settings'].fields
3194
    assert 'management/other-form/' in resp.text
3195
    assert 'management/form-title/' in resp.text
3217
    resp = app.get('/backoffice/management/listing')
3218
    assert 'category_ids$element0' in resp.forms['listing-settings'].fields
3219
    assert 'management/form-1/' in resp.text
3220
    assert 'management/form-2/' in resp.text
3221
    assert 'management/form-3/' in resp.text
3222

  
3223
    resp.forms['listing-settings']['category_ids$element0'] = cat1.id
3224
    resp = resp.forms['listing-settings'].submit()
3225
    assert 'management/form-1/' in resp.text
3226
    assert 'management/form-2/' not in resp.text
3227
    assert 'management/form-3/' not in resp.text
3196 3228

  
3197
    resp.forms['listing-settings']['category_id'] = cat1.id
3229
    resp.forms['listing-settings']['category_ids$element0'] = cat2.id
3198 3230
    resp = resp.forms['listing-settings'].submit()
3199
    assert 'management/other-form/' not in resp.text
3200
    assert 'management/form-title/' in resp.text
3231
    assert 'management/form-1/' not in resp.text
3232
    assert 'management/form-2/' in resp.text
3233
    assert 'management/form-3/' not in resp.text
3201 3234

  
3202
    resp.forms['listing-settings']['category_id'] = cat2.id
3235
    resp = resp.forms['listing-settings'].submit('category_ids$add_element')
3236
    resp.forms['listing-settings']['category_ids$element0'] = cat1.id
3237
    resp.forms['listing-settings']['category_ids$element1'] = cat2.id
3203 3238
    resp = resp.forms['listing-settings'].submit()
3204
    assert 'management/other-form/' in resp.text
3205
    assert 'management/form-title/' not in resp.text
3239
    assert 'management/form-1/' in resp.text
3240
    assert 'management/form-2/' in resp.text
3241
    assert 'management/form-3/' not in resp.text
3242

  
3243
    resp = app.get('/backoffice/management/listing?category_slugs=cat1')
3244
    assert resp.forms['listing-settings']['category_ids$element0'].value == cat1.id
3245
    assert 'category_ids$element1' not in resp.forms['listing-settings'].fields
3246
    assert 'management/form-1/' in resp.text
3247
    assert 'management/form-2/' not in resp.text
3248
    assert 'management/form-3/' not in resp.text
3249

  
3250
    resp = app.get('/backoffice/management/listing?category_slugs=cat1,cat2')
3251
    assert resp.forms['listing-settings']['category_ids$element0'].value == cat1.id
3252
    assert resp.forms['listing-settings']['category_ids$element1'].value == cat2.id
3253
    assert 'management/form-1/' in resp.text
3254
    assert 'management/form-2/' in resp.text
3255
    assert 'management/form-3/' not in resp.text
3206 3256

  
3207 3257

  
3208 3258
def test_datetime_in_global_listing(pub):
wcs/backoffice/management.py
63 63
    SingleSelectWidget,
64 64
    StringWidget,
65 65
    TextWidget,
66
    WidgetList,
66 67
    WysiwygTextWidget,
67 68
)
68 69
from ..qommon.misc import C_, ellipsize
......
648 649
        if categories:
649 650
            Category.sort_by_position(categories)
650 651
            category_options = [(None, C_('categories|All'), '')] + [(x.id, x.name, x.id) for x in categories]
652
            category_slugs = (params.get('category_slugs') or '').split(',')
653
            category_slugs = [c.strip() for c in category_slugs if c.strip()]
654
            for i, category in enumerate([c for c in categories if c.url_name in category_slugs]):
655
                params['category_ids$element%s' % i] = category.id
651 656
            form.add(
652
                SingleSelectWidget,
653
                'category_id',
654
                title=_('Category'),
655
                options=category_options,
656
                value=params.get('category_id'),
657
                WidgetList,
658
                'category_ids',
659
                title=_('Categories'),
660
                element_type=SingleSelectWidget,
661
                add_element_label=_('Add Category'),
662
                element_kwargs={
663
                    'render_br': False,
664
                    'options': category_options,
665
                },
657 666
            )
658 667

  
659 668
        if bool(get_publisher().get_site_option('welco_url', 'variables')):
......
868 877
                criterias.append(Null('submission_channel'))
869 878
            else:
870 879
                criterias.append(Equal('submission_channel', get_request().form.get('submission_channel')))
871
        if get_request().form.get('category_id'):
872
            category_id = misc.get_int_or_400(get_request().form.get('category_id'))
873
            criterias.append(Equal('category_id', category_id))
880
        category_ids = []
881
        if get_request().form:
882
            prefix = 'category_ids$element'
883
            category_slugs = (get_request().form.get('category_slugs') or '').split(',')
884
            category_slugs = [c.strip() for c in category_slugs if c.strip()]
885
            if category_slugs:
886
                category_ids = [c.id for c in Category.select() if c.url_name in category_slugs]
887
            else:
888
                category_ids = [
889
                    get_request().form.get(k) for k in get_request().form.keys() if k.startswith(prefix)
890
                ]
891
                category_ids = [v for v in category_ids if v]
892
        if category_ids:
893
            criterias.append(Contains('category_id', category_ids))
874 894
        if get_request().form.get('q'):
875 895
            criterias.append(FtsMatch(get_request().form.get('q')))
876 896
        return criterias
877
-