|
|
@@ -5,8 +5,8 @@ from django.urls import reverse
|
|
|
from rest_framework import status
|
|
|
|
|
|
from core.models import ObjectType
|
|
|
+from dcim.choices import LocationStatusChoices
|
|
|
from dcim.models import Site, Location
|
|
|
-from ipam.models import ASN, RIR
|
|
|
from users.models import ObjectPermission
|
|
|
from utilities.testing import disable_warnings, APITestCase, TestCase
|
|
|
|
|
|
@@ -53,10 +53,27 @@ class GraphQLAPITestCase(APITestCase):
|
|
|
sites = (
|
|
|
Site(name='Site 1', slug='site-1'),
|
|
|
Site(name='Site 2', slug='site-2'),
|
|
|
+ Site(name='Site 3', slug='site-3'),
|
|
|
)
|
|
|
Site.objects.bulk_create(sites)
|
|
|
- Location.objects.create(site=sites[0], name='Location 1', slug='location-1'),
|
|
|
- Location.objects.create(site=sites[1], name='Location 2', slug='location-2'),
|
|
|
+ Location.objects.create(
|
|
|
+ site=sites[0],
|
|
|
+ name='Location 1',
|
|
|
+ slug='location-1',
|
|
|
+ status=LocationStatusChoices.STATUS_PLANNED
|
|
|
+ ),
|
|
|
+ Location.objects.create(
|
|
|
+ site=sites[1],
|
|
|
+ name='Location 2',
|
|
|
+ slug='location-2',
|
|
|
+ status=LocationStatusChoices.STATUS_STAGING
|
|
|
+ ),
|
|
|
+ Location.objects.create(
|
|
|
+ site=sites[1],
|
|
|
+ name='Location 3',
|
|
|
+ slug='location-3',
|
|
|
+ status=LocationStatusChoices.STATUS_ACTIVE
|
|
|
+ ),
|
|
|
|
|
|
# Add object-level permission
|
|
|
obj_perm = ObjectPermission(
|
|
|
@@ -68,8 +85,9 @@ class GraphQLAPITestCase(APITestCase):
|
|
|
obj_perm.object_types.add(ObjectType.objects.get_for_model(Location))
|
|
|
obj_perm.object_types.add(ObjectType.objects.get_for_model(Site))
|
|
|
|
|
|
- # A valid request should return the filtered list
|
|
|
url = reverse('graphql')
|
|
|
+
|
|
|
+ # A valid request should return the filtered list
|
|
|
query = '{location_list(filters: {site_id: "' + str(sites[0].pk) + '"}) {id site {id}}}'
|
|
|
response = self.client.post(url, data={'query': query}, format="json", **self.header)
|
|
|
self.assertHttpStatus(response, status.HTTP_200_OK)
|
|
|
@@ -78,6 +96,21 @@ class GraphQLAPITestCase(APITestCase):
|
|
|
self.assertEqual(len(data['data']['location_list']), 1)
|
|
|
self.assertIsNotNone(data['data']['location_list'][0]['site'])
|
|
|
|
|
|
+ # Test OR logic
|
|
|
+ query = """{
|
|
|
+ location_list( filters: {
|
|
|
+ status: \"""" + LocationStatusChoices.STATUS_PLANNED + """\",
|
|
|
+ OR: {status: \"""" + LocationStatusChoices.STATUS_STAGING + """\"}
|
|
|
+ }) {
|
|
|
+ id site {id}
|
|
|
+ }
|
|
|
+ }"""
|
|
|
+ response = self.client.post(url, data={'query': query}, format="json", **self.header)
|
|
|
+ self.assertHttpStatus(response, status.HTTP_200_OK)
|
|
|
+ data = json.loads(response.content)
|
|
|
+ self.assertNotIn('errors', data)
|
|
|
+ self.assertEqual(len(data['data']['location_list']), 2)
|
|
|
+
|
|
|
# An invalid request should return an empty list
|
|
|
query = '{location_list(filters: {site_id: "99999"}) {id site {id}}}' # Invalid site ID
|
|
|
response = self.client.post(url, data={'query': query}, format="json", **self.header)
|