mirror of
https://github.com/ansible/awx.git
synced 2026-03-04 10:11:05 -03:30
Extend SmartFilter to expand search and related search fields
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
# Python
|
||||
import pytest
|
||||
import mock
|
||||
from collections import namedtuple
|
||||
|
||||
# AWX
|
||||
from awx.main.utils.filters import SmartFilter
|
||||
@@ -10,6 +11,10 @@ from awx.main.utils.filters import SmartFilter
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
Field = namedtuple('Field', 'name')
|
||||
Meta = namedtuple('Meta', 'fields')
|
||||
|
||||
|
||||
class mockObjects:
|
||||
def filter(self, *args, **kwargs):
|
||||
return Q(*args, **kwargs)
|
||||
@@ -19,9 +24,10 @@ class mockHost:
|
||||
def __init__(self):
|
||||
print("Host mock created")
|
||||
self.objects = mockObjects()
|
||||
self._meta = Meta(fields=(Field(name='name'), Field(name='description')))
|
||||
|
||||
|
||||
@mock.patch('awx.main.utils.filters.get_host_model', return_value=mockHost())
|
||||
@mock.patch('awx.main.utils.filters.get_model', return_value=mockHost())
|
||||
class TestSmartFilterQueryFromString():
|
||||
@pytest.mark.parametrize("filter_string,q_expected", [
|
||||
('facts__facts__blank=""', Q(**{u"facts__facts__blank": u""})),
|
||||
@@ -109,6 +115,20 @@ class TestSmartFilterQueryFromString():
|
||||
assert unicode(q) == unicode(q_expected)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("filter_string,q_expected", [
|
||||
('search=foo', Q(**{u"name": u"foo"}) | Q(**{ u"description": u"foo"})),
|
||||
('group__search=foo', Q(**{u"group__name": u"foo"}) | Q(**{u"group__description": u"foo"})),
|
||||
('search=foo and group__search=foo', Q(
|
||||
Q(**{u"name": u"foo"}) | Q(**{ u"description": u"foo"}),
|
||||
Q(**{u"group__name": u"foo"}) | Q(**{u"group__description": u"foo"}))),
|
||||
('search=foo or ansible_facts__a=null',
|
||||
(Q(**{u"name": u"foo"}) | Q(**{u"description": u"foo"})) |
|
||||
Q(**{u"ansible_facts__contains": {u"a": u"null"}})),
|
||||
])
|
||||
def test_search_related_fields(self, mock_get_host_model, filter_string, q_expected):
|
||||
q = SmartFilter.query_from_string(filter_string)
|
||||
assert unicode(q) == unicode(q_expected)
|
||||
|
||||
'''
|
||||
#('"facts__quoted_val"="f\"oo"', 1),
|
||||
#('facts__facts__arr[]="foo"', 1),
|
||||
|
||||
Reference in New Issue
Block a user