This commit is contained in:
parent
9f59c1277d
commit
b924ee5744
|
@ -1428,50 +1428,100 @@ def test_backoffice_submission_agent_filter(pub):
|
|||
# enable submission-agent column
|
||||
resp.forms['listing-settings']['submission-agent'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
# check the filter is hidden
|
||||
assert resp.pyquery.find('li[hidden] input[name=filter-submission-agent]')
|
||||
assert resp.text.count('>userA</td>') > 0
|
||||
assert resp.text.count('>userB</td>') > 0
|
||||
|
||||
base_url = resp.request.url
|
||||
resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user1.id)
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('<tr') == 2
|
||||
assert resp.pyquery.find('input[value=userA]') # displayed in sidebar
|
||||
# check it persits on filter changes
|
||||
# enable submission-agent filter
|
||||
resp.forms['listing-settings']['filter-submission-agent'].checked = True
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('<tr') == 2
|
||||
|
||||
resp = app.get(base_url + '&filter-submission-agent=on&filter-submission-agent-value=%s' % user2.id)
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') > 0
|
||||
assert resp.text.count('<tr') == 2
|
||||
# check everything is still displayed
|
||||
assert resp.forms['listing-settings']['filter-submission-agent-value'].value == ''
|
||||
assert resp.text.count('>userA</td>') > 0
|
||||
assert resp.text.count('>userB</td>') > 0
|
||||
|
||||
resp = app.get(
|
||||
'/backoffice/management/form-title/?limit=100&filter-submission-agent=on&filter-submission-agent-value=%s'
|
||||
% user2.id
|
||||
)
|
||||
assert resp.text.count('<tr') == 2
|
||||
# check available filter values
|
||||
assert [x.text for x in resp.pyquery('select[name="filter-submission-agent-value"] option')] == [
|
||||
None,
|
||||
'Current user',
|
||||
'admin',
|
||||
]
|
||||
|
||||
# add userA and userB to role for backoffice submission
|
||||
user1.roles = user.roles
|
||||
user1.store()
|
||||
user2.roles = user.roles
|
||||
user2.store()
|
||||
|
||||
# refresh
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert [x.text for x in resp.pyquery('select[name="filter-submission-agent-value"] option')] == [
|
||||
None,
|
||||
'Current user',
|
||||
'admin',
|
||||
'userA',
|
||||
'userB',
|
||||
]
|
||||
|
||||
resp.forms['listing-settings']['filter-submission-agent-value'].value = str(user1.id)
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA</td>') > 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
assert resp.pyquery('tbody tr').length == 1
|
||||
# check it persists on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA</td>') > 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
assert resp.pyquery('tbody tr').length == 1
|
||||
|
||||
resp.forms['listing-settings']['filter-submission-agent-value'].value = str(user2.id)
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA</td>') == 0
|
||||
assert resp.text.count('>userB</td>') > 0
|
||||
assert resp.pyquery('tbody tr').length == 1
|
||||
|
||||
# filter on current user
|
||||
resp.forms['listing-settings']['filter-submission-agent-value'].value = '__current__'
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA</td>') == 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
assert resp.pyquery('tbody tr').length == 0
|
||||
|
||||
old_formdata_agent_id, formdata.submission_agent_id = formdata.submission_agent_id, user.id
|
||||
formdata.store()
|
||||
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA</td>') == 0
|
||||
assert resp.text.count('>admin</td>') == 1
|
||||
assert resp.pyquery('tbody tr').length == 1
|
||||
|
||||
# restore second formadata user
|
||||
formdata.submission_agent_id = old_formdata_agent_id
|
||||
formdata.store()
|
||||
|
||||
# filter on uuid
|
||||
user1.name_identifiers = ['0123456789']
|
||||
user1.store()
|
||||
resp = app.get(base_url + '&filter-submission-agent-uuid=0123456789')
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.pyquery.find('input[value=userA]') # displayed in sidebar
|
||||
resp = app.get(
|
||||
'/backoffice/management/form-title/?filter-submission-agent-uuid=0123456789&submission-agent=on'
|
||||
)
|
||||
assert resp.forms['listing-settings']['filter-submission-agent-value'].value == str(user1.id)
|
||||
assert resp.text.count('>userA</td>') > 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
# check it persists on filter changes
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA<') > 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
assert resp.text.count('>userA</td>') > 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
|
||||
# check with unknown uuid
|
||||
resp = app.get(base_url + '&filter-submission-agent-uuid=XXX')
|
||||
assert resp.text.count('>userA<') == 0
|
||||
assert resp.text.count('>userB<') == 0
|
||||
resp = app.get('/backoffice/management/form-title/?filter-submission-agent-uuid=XXX&submission-agent=on')
|
||||
assert resp.forms['listing-settings']['filter-submission-agent-value'].value == '-1'
|
||||
assert resp.text.count('>userA</td>') == 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
# check it persists on submits
|
||||
resp = resp.forms['listing-settings'].submit()
|
||||
assert resp.text.count('>userA</td>') == 0
|
||||
assert resp.text.count('>userB</td>') == 0
|
||||
|
||||
|
||||
def test_workflow_function_filter(pub):
|
||||
|
|
|
@ -21,7 +21,8 @@ from quixote import get_publisher
|
|||
from quixote.html import TemplateIO, htmltext
|
||||
|
||||
from wcs.qommon import _, misc, pgettext_lazy
|
||||
from wcs.qommon.form import DateWidget, HiddenWidget, SingleSelectWidget, StringWidget
|
||||
from wcs.qommon.form import DateWidget, SingleSelectWidget, StringWidget
|
||||
from wcs.sql_criterias import ArrayContains, Or
|
||||
|
||||
|
||||
def render_filter_widget(filter_widget, operators, filter_field_operator_key, filter_field_operator):
|
||||
|
@ -398,25 +399,38 @@ class SubmissionAgentFilterField(FilterField):
|
|||
id = 'submission-agent'
|
||||
key = 'submission-agent'
|
||||
label = _('Submission Agent')
|
||||
available_for_filter = True
|
||||
addable = False
|
||||
|
||||
@property
|
||||
def available_for_filter(self):
|
||||
return bool(self.formdef.backoffice_submission_roles)
|
||||
|
||||
def get_filter_widget(self, **kwargs):
|
||||
r = TemplateIO(html=True)
|
||||
filter_field_value = self.get_filter_field_value()
|
||||
r += HiddenWidget(self.filter_field_key, value=filter_field_value).render()
|
||||
if filter_field_value:
|
||||
filtered_user = get_publisher().user_class.get(filter_field_value, ignore_errors=True)
|
||||
widget = StringWidget(
|
||||
'_' + self.filter_field_key,
|
||||
title=self.label,
|
||||
value=filtered_user.display_name if filtered_user else _('Unknown'),
|
||||
readonly=True,
|
||||
render_br=False,
|
||||
)
|
||||
widget._parsed = True # make sure value is not replaced by request query
|
||||
r += widget.render()
|
||||
return r.getvalue()
|
||||
options = [
|
||||
('', '', ''),
|
||||
('__current__', _('Current user'), '__current__'),
|
||||
]
|
||||
if filter_field_value == '-1':
|
||||
# this happens when ?filter-submission-agent-uuid is given with an unknown uuid,
|
||||
# an option for "invalid user" is added so refreshs or new filters won't reset
|
||||
# this filter.
|
||||
options.append(('-1', _('Invalid user'), '-1'))
|
||||
options.extend(
|
||||
[
|
||||
(str(x.id), x.display_name, str(x.id))
|
||||
for x in get_publisher().user_class.select(
|
||||
[Or([ArrayContains('roles', [str(y)]) for y in self.formdef.backoffice_submission_roles])]
|
||||
)
|
||||
]
|
||||
)
|
||||
widget = SingleSelectWidget(
|
||||
self.filter_field_key,
|
||||
title=self.label,
|
||||
options=options,
|
||||
value=filter_field_value,
|
||||
render_br=False,
|
||||
)
|
||||
return self.render_filter_widget(widget)
|
||||
|
||||
|
||||
class SubmissionChannelFilterField(FilterField):
|
||||
|
|
|
@ -2133,7 +2133,7 @@ class FormPage(Directory, TempfileDirectoryMixin):
|
|||
elif filter_field.id == 'end-mtime':
|
||||
criterias.append(LessOrEqual('last_update_time', filter_date_value))
|
||||
criterias[-1]._label = '%s: %s' % (filter_field.label, filter_field_value)
|
||||
elif filter_field.key == 'user-id':
|
||||
elif filter_field.key in ('submission-agent', 'user-id'):
|
||||
if filter_field_value == '__current__':
|
||||
context_vars = get_publisher().substitutions.get_context_variables(mode='lazy')
|
||||
if request and request.is_in_backoffice() and context_vars.get('form'):
|
||||
|
@ -2148,10 +2148,10 @@ class FormPage(Directory, TempfileDirectoryMixin):
|
|||
filter_field_value = None
|
||||
if filter_field_value in ('__current__', None):
|
||||
criterias.append(Nothing())
|
||||
else:
|
||||
elif filter_field.key == 'user-id':
|
||||
criterias.append(Equal('user_id', filter_field_value))
|
||||
elif filter_field.key == 'submission-agent':
|
||||
criterias.append(Equal('submission_agent_id', filter_field_value))
|
||||
elif filter_field.key == 'submission-agent':
|
||||
criterias.append(Equal('submission_agent_id', filter_field_value))
|
||||
elif filter_field.key == 'user-function':
|
||||
user_object = None
|
||||
if ':' in filter_field_value:
|
||||
|
|
Loading…
Reference in New Issue