0001-backoffice-add-filtering-on-submission-agent-id-4508.patch
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 |
- |