Extend SmartFilter to expand search and related search fields

This commit is contained in:
Wayne Witzel III
2017-05-19 16:01:11 -04:00
parent 3cf698d4ae
commit bac1e8b4fe
4 changed files with 67 additions and 15 deletions

View File

@@ -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),