Projet

Général

Profil

0001-wcs-use-wcs-category-order-in-backoffice-submission-.patch

Nicolas Roche, 27 septembre 2019 17:20

Télécharger (7,94 ko)

Voir les différences:

Subject: [PATCH] wcs: use wcs category order in backoffice submission cell
 (#29187)

 combo/apps/wcs/models.py                      | 20 ++++++
 .../combo/wcs/backoffice_submission.html      |  3 +-
 tests/test_wcs.py                             | 63 +++++++++++++++----
 3 files changed, 71 insertions(+), 15 deletions(-)
combo/apps/wcs/models.py
557 557
            for formdef in site_formdefs['data']:
558 558
                if not 'category' in formdef:
559 559
                    formdef['category'] = _('Misc')
560

  
561
        # group formdef by categories, keeping the w.c.s. categories order
562
        for site_formdefs in context['all_formdefs'].values():
563
            category_names = []
564
            tmp_categories = {}
565
            for formdef in site_formdefs['data']:
566
                category_name = formdef['category']
567

  
568
                # remind first seen category order
569
                if category_name not in category_names:
570
                    category_names.append(category_name)
571
                    tmp_categories[category_name] = []
572
                    site_formdefs['formdefs_by_category'] = []
573

  
574
                tmp_categories[category_name].append(formdef)
575
            for category_name in category_names:
576
                site_formdefs['formdefs_by_category'].append({
577
                    'grouper': category_name,
578
                    'list': tmp_categories[category_name]
579
                })
560 580
        return context
combo/apps/wcs/templates/combo/wcs/backoffice_submission.html
5 5
  <div class="links-list">
6 6
  {% if all_formdefs.keys|length > 1 %}<h3>{{ site_formdefs.title }}</h3>{% endif %}
7 7
  <ul>
8
  {% regroup site_formdefs.data|dictsort:"category" by category as categories_formdefs %}
9
  {% for category_formdefs in categories_formdefs %}
8
  {% for category_formdefs in site_formdefs.formdefs_by_category %}
10 9
    <li><h4>{{ category_formdefs.grouper }}</h4></li>
11 10
    {% for formdef in category_formdefs.list|dictsort:"title" %}
12 11
      <li><a href="{{formdef.backoffice_submission_url}}?NameID={{name_id}}&ReturnURL={{ absolute_uri|iriencode }}">{{formdef.title}}</a></li>
tests/test_wcs.py
72 72
   cat = Category()
73 73
   cat.name = 'Test %d' % i
74 74
   cat.description = 'Hello world'
75
   cat.position = 10-i  # not using alphabetical order
75 76
   cat.store()
76 77
   cats.append(cat)
77 78

  
......
139 140
    code.id = 'CNPHNTFB'
140 141
    code.formdata = formdata
141 142

  
142
# a private formdef
143
# private formdefs
143 144
role = Role(name='Blah')
144 145
role.store()
145 146

  
146
formdef = FormDef()
147
formdef.name = 'a private form'
148
formdef.category_id = cats[2].id
149
formdef.roles = [role.id]
150
formdef.backoffice_submission_roles = [role.id]
151
formdef.fields = []
152
formdef.store()
147
for i in range(4,0,-1):  # not using aphabetical order
148
    category_id = 2+i%2  # not ordered by categories
149
    formdef = FormDef()
150
    formdef.category_id = cats[category_id].id
151
    formdef.name = 'private form %d (category %s)' % (i, formdef.category_id)
152
    formdef.roles = [role.id]
153
    formdef.backoffice_submission_roles = [role.id]
154
    formdef.fields = []
155
    formdef.store()
153 156

  
154 157
user2 = get_publisher().user_class()  # agent
155 158
user2.name = 'foo2 bar2'
......
259 262
    form_class = cell.get_default_form_class()
260 263
    form = form_class()
261 264
    assert form.fields['formdef_reference'].widget.choices == [
262
            (u'default:a-private-form', u'test : a private form'),
263 265
            (u'default:a-second-form-title', u'test : a second form title'),
264 266
            (u'default:form-title', u'test : form title'),
267
            (u'default:private-form-1-category-4', u'test : private form 1 (category 4)'),
268
            (u'default:private-form-2-category-3', u'test : private form 2 (category 3)'),
269
            (u'default:private-form-3-category-4', u'test : private form 3 (category 4)'),
270
            (u'default:private-form-4-category-3', u'test : private form 4 (category 3)'),
265 271
            (u'default:third-form-title', u'test : third form title'),
266
            (u'other:a-private-form', u'test2 : a private form'),
267 272
            (u'other:a-second-form-title', u'test2 : a second form title'),
268 273
            (u'other:form-title', u'test2 : form title'),
274
            (u'other:private-form-1-category-4', u'test2 : private form 1 (category 4)'),
275
            (u'other:private-form-2-category-3', u'test2 : private form 2 (category 3)'),
276
            (u'other:private-form-3-category-4', u'test2 : private form 3 (category 4)'),
277
            (u'other:private-form-4-category-3', u'test2 : private form 4 (category 3)'),
269 278
            (u'other:third-form-title', u'test2 : third form title')]
270 279

  
271 280

  
......
471 480
    form = form_class()
472 481
    assert form.fields['category_reference'].widget.choices == [
473 482
            (u'default:test-3', u'test : Test 3'),
483
            (u'default:test-4', u'test : Test 4'),
474 484
            (u'default:test-9', u'test : Test 9'),
475 485
            (u'other:test-3', u'test2 : Test 3'),
486
            (u'other:test-4', u'test2 : Test 4'),
476 487
            (u'other:test-9', u'test2 : Test 9')]
477 488

  
478 489
@wcs_present
......
589 600

  
590 601
    resp = app.get('/manage/pages/%s/' % page.id)
591 602
    assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text
592
    assert len(resp.form['c%s-categories' % cells[0].get_reference()].options) == 4
593
    resp.form['c%s-categories' % cells[0].get_reference()].value = ['default:test-3', 'default:test-9']
603
    assert len(resp.form['c%s-categories' % cells[0].get_reference()].options) == 6
604
    resp.form['c%s-categories' % cells[0].get_reference()].value = [
605
        'default:test-3', 'default:test-9']
594 606
    resp = resp.form.submit().follow()
595 607
    assert resp.form['c%s-categories' % cells[0].get_reference()].value == ['default:test-3', 'default:test-9']
596 608

  
......
781 793
    context['request'].user = MockUser2()
782 794

  
783 795
    result = cell.render(context)
784
    assert '/backoffice/submission/a-private-form/' in result
796
    # wcs already return a flat ordered structure
797
    site_formdefs = context['all_formdefs'].values()[0]
798
    assert [x['title'] for x in site_formdefs['data']] == [
799
        'private form 1 (category 4)',  # category.order = 6
800
        'private form 3 (category 4)',
801
        'private form 2 (category 3)',  # category.order = 7
802
        'private form 4 (category 3)']
803
    # cell grouped by categories using the same order policy
804
    assert [c['grouper'] for c in
805
            [c for c in site_formdefs['formdefs_by_category']]] == [
806
        'Test 4', 'Test 3']
807
    assert [x['title'] for x in
808
            [f for f in
809
             site_formdefs['formdefs_by_category'][0]['list']]] == [
810
        'private form 1 (category 4)',
811
        'private form 3 (category 4)']
812
    assert [x['title'] for x in
813
            [f for f in
814
             site_formdefs['formdefs_by_category'][1]['list']]] == [
815
        'private form 2 (category 3)',
816
        'private form 4 (category 3)']
817
    assert result.count('/backoffice/submission/private-form-') == 4
818
    index = {}
819
    for i in range(1, 5):
820
        index['form%d' % i] = result.find('/private-form-%d' % i)
821
    assert index['form1'] < index['form3'] < index['form2'] < index['form4']
785
-