wcs: add support for |filter_by_identifier (#85618)
gitea/publik-django-templatetags/pipeline/head This commit looks good
Details
gitea/publik-django-templatetags/pipeline/head This commit looks good
Details
This commit is contained in:
parent
7bb34ba534
commit
6ad1cc0911
|
@ -147,7 +147,7 @@ class LazyCardDefObjectsManager:
|
|||
if isinstance(value, bool):
|
||||
value = str(value).lower()
|
||||
op = getattr(self, 'pending_op', 'eq')
|
||||
if self.pending_attr in ['internal_id', 'number', 'user', 'status', 'distance']:
|
||||
if self.pending_attr in ['internal_id', 'number', 'identifier', 'user', 'status', 'distance']:
|
||||
return getattr(self, 'filter_by_%s' % self.pending_attr)(value, op)
|
||||
qs._filters['filter-%s' % self.pending_attr] = value
|
||||
qs._filters['filter-%s-operator' % self.pending_attr] = op
|
||||
|
@ -205,6 +205,12 @@ class LazyCardDefObjectsManager:
|
|||
qs._filters['filter-number'] = number
|
||||
return qs
|
||||
|
||||
def filter_by_identifier(self, identifier, op='eq'):
|
||||
qs = self._clone()
|
||||
if identifier:
|
||||
qs._filters['filter-identifier'] = identifier
|
||||
return qs
|
||||
|
||||
def filter_by_user(self, user, op='eq'):
|
||||
qs = self._clone()
|
||||
if user:
|
||||
|
|
|
@ -144,6 +144,14 @@ def filter_by_number(queryset, number):
|
|||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by_identifier(queryset, identifier):
|
||||
try:
|
||||
return queryset.filter_by_identifier(identifier)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by_user(queryset, user):
|
||||
try:
|
||||
|
|
|
@ -498,6 +498,45 @@ def test_filter_by_number(mock_send, context, nocache):
|
|||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_filter_by_identifier(mock_send, context, nocache):
|
||||
t = Template('{{ cards|objects:"foo"|list }}')
|
||||
t.render(context)
|
||||
assert 'filter-identifier' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
for tpl in ['filter_by_identifier', 'filter_by:"identifier"|filter_value']:
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ cards|objects:"foo"|%s:None|list }}' % tpl)
|
||||
t.render(context)
|
||||
assert 'filter-identifier' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ cards|objects:"foo"|%s:""|list }}' % tpl)
|
||||
t.render(context)
|
||||
assert 'filter-identifier' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ cards|objects:"foo"|%s:"42-35"|list }}' % tpl)
|
||||
t.render(context)
|
||||
assert 'filter-identifier=42-35&' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
for filter_op, api_op in OPERATORS:
|
||||
mock_send.reset_mock()
|
||||
t = Template(
|
||||
'{{ cards|objects:"foo"|filter_by:"identifier"|%s|filter_value:"42-35"|list }}' % filter_op
|
||||
)
|
||||
t.render(context)
|
||||
assert 'filter-identifier=42-35&' in mock_send.call_args_list[0][0][0].url
|
||||
# not for this filter
|
||||
assert 'filter-identifier-operator=%s&' % api_op not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|filter_by_identifier:"42"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_filter_by_user(mock_send, context, nocache):
|
||||
context['nameid'] = 'zyx'
|
||||
|
|
Loading…
Reference in New Issue