Add AND filter to related search.

Signed-off-by: Yunfan Zhang <yz322@duke.edu>
This commit is contained in:
Yunfan Zhang
2018-08-01 12:20:27 -04:00
committed by Jared Tabor
parent 6b64ef8f64
commit b191f6cfc3
3 changed files with 77 additions and 8 deletions

View File

@@ -0,0 +1,54 @@
# Python
import pytest
import json
# Django Rest Framework
from rest_framework.test import APIRequestFactory
# AWX
from awx.api.views import HostList
from awx.main.models import Host, Group, Inventory
from awx.api.versioning import reverse
@pytest.mark.django_db
class TestSearchFilter:
def test_related_research_filter_relation(self, admin):
inv = Inventory.objects.create(name="inv")
group1 = Group.objects.create(name="g1", inventory=inv)
group2 = Group.objects.create(name="g2", inventory=inv)
host1 = Host.objects.create(name="host1", inventory=inv)
host2 = Host.objects.create(name="host2", inventory=inv)
host3 = Host.objects.create(name="host3", inventory=inv)
host1.groups.add(group1)
host2.groups.add(group1)
host2.groups.add(group2)
host3.groups.add(group2)
host1.save()
host2.save()
host3.save()
# Login the client
factory = APIRequestFactory()
# Actually test the endpoint.
host_list_url = reverse('api:host_list')
# Test if the OR releation works.
request = factory.get(host_list_url, data={'groups__search': ['g1', 'g2']})
request.user = admin
response = HostList.as_view()(request)
response.render()
result = json.loads(response.content)
assert result['count'] == 3
expected_hosts = ['host1', 'host2', 'host3']
for i in result['results']:
expected_hosts.remove(i['name'])
assert not expected_hosts
# Test if the AND relation works.
request = factory.get(host_list_url, data={'groups__search': ['g1,g2']})
request.user = admin
response = HostList.as_view()(request)
response.render()
result = json.loads(response.content)
assert result['count'] == 1
assert result['results'][0]['name'] == 'host2'