Projet

Général

Profil

0001-backoffice-add-filtering-on-submission-agent-id-4508.patch

Frédéric Péters, 13 juillet 2020 21:57

Télécharger (5,82 ko)

Voir les différences:

Subject: [PATCH] backoffice: add filtering on submission agent id (#45081)

 tests/test_backoffice_pages.py | 49 ++++++++++++++++++++++++++++++++++
 wcs/backoffice/management.py   | 17 +++++++++++-
 2 files changed, 65 insertions(+), 1 deletion(-)
tests/test_backoffice_pages.py
1174 1174
    assert resp.text.count('>userB<') == 0
1175 1175

  
1176 1176

  
1177
def test_backoffice_submission_agent_filter(pub):
1178
    pub.user_class.wipe()
1179
    user = create_superuser(pub)
1180
    create_environment(pub)
1181
    formdef = FormDef.get_by_urlname('form-title')
1182
    formdef.backoffice_submission_roles = user.roles
1183
    formdef.store()
1184

  
1185
    user1 = pub.user_class(name='userA')
1186
    user1.store()
1187
    user2 = pub.user_class(name='userB')
1188
    user2.store()
1189

  
1190
    for i, formdata in enumerate(formdef.data_class().select()):
1191
        formdata.submission_agent_id = str(user1.id if i < 10 else user2.id)
1192
        formdata.status = 'wf-new'
1193
        formdata.store()
1194

  
1195
    app = login(get_app(pub))
1196
    resp = app.get('/backoffice/management/form-title/?limit=100')
1197
    # enable submission-agent column
1198
    resp.forms['listing-settings']['submission_agent'].checked = True
1199
    resp = resp.forms['listing-settings'].submit()
1200
    assert resp.text.count('>userA<') > 0
1201
    assert resp.text.count('>userB<') > 0
1202
    # check the filter is hidden
1203
    assert resp.pyquery.find('li[hidden] input[name=filter-submission-agent]')
1204

  
1205
    base_url = resp.request.url
1206
    resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user1.id)
1207
    assert resp.text.count('>userA<') > 0
1208
    assert resp.text.count('>userB<') == 0
1209
    assert resp.text.count('<tr') == 11
1210
    assert resp.pyquery.find('input[value=userA]')  # displayed in sidebar
1211
    # check it persits on filter changes
1212
    resp = resp.forms['listing-settings'].submit()
1213
    assert resp.text.count('>userA<') > 0
1214
    assert resp.text.count('>userB<') == 0
1215
    assert resp.text.count('<tr') == 11
1216

  
1217
    resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user2.id)
1218
    assert resp.text.count('>userA<') == 0
1219
    assert resp.text.count('>userB<') > 0
1220
    assert resp.text.count('<tr') == 42
1221

  
1222
    resp = app.get('/backoffice/management/form-title/?limit=100&filter-submission-agent=on&filter-submission-agent-value=%s' % user2.id)
1223
    assert resp.text.count('<tr') == 42
1224

  
1225

  
1177 1226
def test_backoffice_csv(pub):
1178 1227
    create_superuser(pub)
1179 1228
    create_environment(pub)
wcs/backoffice/management.py
1171 1171
                cls=misc.JSONEncoder)
1172 1172

  
1173 1173
    def get_filterable_field_types(self):
1174
        types = ['string', 'email', 'item', 'bool', 'items', 'period-date', 'user-id']
1174
        types = ['string', 'email', 'item', 'bool', 'items', 'period-date',
1175
                'user-id', 'submission-agent-id']
1175 1176
        if get_publisher().is_using_postgresql():
1176 1177
            types.append('date')
1177 1178
        return types
......
1184 1185
            FakeField('start', 'period-date', _('Start')),
1185 1186
            FakeField('end', 'period-date', _('End')),
1186 1187
            FakeField('user', 'user-id', _('User'), addable=False),
1188
            FakeField('submission-agent', 'submission-agent-id', _('Submission Agent'), addable=False),
1187 1189
        ]
1188 1190
        default_filters = self.get_default_filters(mode)
1189 1191

  
......
1281 1283
                    widget._parsed = True  # make sure value is not replaced by request query
1282 1284
                    r += widget.render()
1283 1285

  
1286
            elif filter_field.type == 'submission-agent-id':
1287
                r += HiddenWidget(filter_field_key, value=filter_field_value).render()
1288
                if filter_field_value:
1289
                    filtered_user = get_publisher().user_class.get(filter_field_value, ignore_errors=True)
1290
                    widget = StringWidget('_' + filter_field_key, title=filter_field.label,
1291
                            value=filtered_user.display_name if filtered_user else _('Unknown'),
1292
                            readonly=True, render_br=False)
1293
                    widget._parsed = True  # make sure value is not replaced by request query
1294
                    r += widget.render()
1295

  
1284 1296
            elif filter_field.type in ('item', 'items'):
1285 1297
                filter_field.required = False
1286 1298

  
......
1571 1583
            FakeField('start-mtime', 'period-date', _('Start (modification time)')),
1572 1584
            FakeField('end-mtime', 'period-date', _('End (modification time)')),
1573 1585
            FakeField('user', 'user-id', _('User')),
1586
            FakeField('submission-agent', 'submission-agent-id', _('Submission Agent')),
1574 1587
        ]
1575 1588
        criterias = []
1576 1589

  
......
1633 1646
                criterias[-1]._label = '%s: %s' % (filter_field.label, filter_field_value)
1634 1647
            elif filter_field.type == 'user-id':
1635 1648
                criterias.append(Equal('user_id', filter_field_value))
1649
            elif filter_field.type == 'submission-agent-id':
1650
                criterias.append(Equal('submission_agent_id', filter_field_value))
1636 1651
            elif filter_field.type in ('item', 'items') and filter_field_value not in (None, 'None'):
1637 1652
                if filter_field.type == 'item':
1638 1653
                    criterias.append(Equal('f%s' % filter_field.id, filter_field_value))
1639
-