From d31507985b4549cad8cbef983583b33e9f4e9654 Mon Sep 17 00:00:00 2001 From: struppi Date: Wed, 25 Dec 2019 18:41:59 +0100 Subject: [PATCH 1/3] Closes #3663: add Filter Tests --- netbox/extras/tests/test_api.py | 78 ++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index 3fe36c9ef..be45c94eb 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -1,8 +1,11 @@ +import time +import datetime + from django.contrib.contenttypes.models import ContentType from django.urls import reverse from rest_framework import status -from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Platform, Region, Site +from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Platform, Region, Site, RackGroup, RackRole, Rack from extras.constants import GRAPH_TYPE_SITE from extras.models import ConfigContext, Graph, ExportTemplate, Tag from tenancy.models import Tenant, TenantGroup @@ -520,3 +523,76 @@ class ConfigContextTest(APITestCase): configcontext6.sites.add(site2) rendered_context = device.get_config_context() self.assertEqual(rendered_context['bar'], 456) + + +class CreatedUpdatedFilterTest(APITestCase): + + def setUp(self): + + super().setUp() + + self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') + self.rackgroup1 = RackGroup.objects.create(site=self.site1, name='Test Rack Group 1', slug='test-rack-group-1') + self.rackrole1 = RackRole.objects.create(name='Test Rack Role 1', slug='test-rack-role-1', color='ff0000') + self.rack1 = Rack.objects.create( + site=self.site1, group=self.rackgroup1, role=self.rackrole1, name='Test Rack 1', u_height=42, + ) + self.rack2 = Rack.objects.create( + site=self.site1, group=self.rackgroup1, role=self.rackrole1, name='Test Rack 2', u_height=42, + ) + + # change the created and last_updated of one + time.sleep(2) # to have a difference on the last_updated + self.rack2.created = datetime.datetime(2001, 2, 3) + self.rack2.save() + + def test_get_rack_meta(self): + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.rack1.pk}) + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['created'], self.rack1.created.strftime("%Y-%m-%d")) + self.assertEqual(response.data['last_updated'], self.rack1.last_updated.strftime("%Y-%m-%dT%H:%M:%S.%fZ")) + + def test_get_rack_created(self): + url = reverse('dcim-api:rack-list') + response = self.client.get('{}?created=2001-02-03'.format(url), **self.header) + + self.assertEqual(response.data['count'], 1) + + def test_get_rack_created_gte(self): + url = reverse('dcim-api:rack-list') + response = self.client.get('{}?created__gte=2001-02-04'.format(url), **self.header) + + self.assertEqual(response.data['count'], 1) + + def test_get_rack_created_lte(self): + url = reverse('dcim-api:rack-list') + response = self.client.get('{}?created__lte=2001-02-04'.format(url), **self.header) + + self.assertEqual(response.data['count'], 1) + + def test_get_rack_last_updated(self): + last_updated = self.rack2.last_updated.strftime("%Y-%m-%d %H:%M:%S.%f") + + url = reverse('dcim-api:rack-list') + response = self.client.get(('{}?last_updated='+last_updated).format(url), **self.header) + + self.assertEqual(response.data['count'], 1) + + def test_get_rack_last_updated_gte(self): + last_updated_delta = self.rack1.last_updated + datetime.timedelta(0, 1) + last_updated = last_updated_delta.strftime("%Y-%m-%d %H:%M:%S") + + url = reverse('dcim-api:rack-list') + response = self.client.get(('{}?last_updated__gte='+last_updated).format(url), **self.header) + + self.assertEqual(response.data['count'], 1) + + def test_get_rack_last_updated_lte(self): + last_updated_delta = self.rack1.last_updated + datetime.timedelta(0, 1) + last_updated = last_updated_delta.strftime("%Y-%m-%d %H:%M:%S") + + url = reverse('dcim-api:rack-list') + response = self.client.get(('{}?last_updated__lte=' + last_updated).format(url), **self.header) + + self.assertEqual(response.data['count'], 1) From 407a60dcc47528e2d992de613b182b4b9faeebf7 Mon Sep 17 00:00:00 2001 From: struppi Date: Thu, 26 Dec 2019 12:26:41 +0100 Subject: [PATCH 2/3] Closes #3663: fix PEP errors --- netbox/extras/tests/test_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index be45c94eb..3ed7eb13e 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -575,7 +575,7 @@ class CreatedUpdatedFilterTest(APITestCase): last_updated = self.rack2.last_updated.strftime("%Y-%m-%d %H:%M:%S.%f") url = reverse('dcim-api:rack-list') - response = self.client.get(('{}?last_updated='+last_updated).format(url), **self.header) + response = self.client.get(('{}?last_updated=' + last_updated).format(url), **self.header) self.assertEqual(response.data['count'], 1) @@ -584,7 +584,7 @@ class CreatedUpdatedFilterTest(APITestCase): last_updated = last_updated_delta.strftime("%Y-%m-%d %H:%M:%S") url = reverse('dcim-api:rack-list') - response = self.client.get(('{}?last_updated__gte='+last_updated).format(url), **self.header) + response = self.client.get(('{}?last_updated__gte=' + last_updated).format(url), **self.header) self.assertEqual(response.data['count'], 1) From fbb93c72d0bd3ef49648fa1bc63585763ed46b36 Mon Sep 17 00:00:00 2001 From: struppi Date: Thu, 26 Dec 2019 22:21:05 +0100 Subject: [PATCH 3/3] Closes #3663: improve tests --- netbox/extras/tests/test_api.py | 38 +++++++++++++-------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index 3ed7eb13e..d419f2d7c 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -1,11 +1,11 @@ -import time import datetime from django.contrib.contenttypes.models import ContentType from django.urls import reverse +from django.utils import timezone from rest_framework import status -from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Platform, Region, Site, RackGroup, RackRole, Rack +from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Platform, Rack, RackGroup, RackRole, Region, Site from extras.constants import GRAPH_TYPE_SITE from extras.models import ConfigContext, Graph, ExportTemplate, Tag from tenancy.models import Tenant, TenantGroup @@ -542,57 +542,49 @@ class CreatedUpdatedFilterTest(APITestCase): ) # change the created and last_updated of one - time.sleep(2) # to have a difference on the last_updated - self.rack2.created = datetime.datetime(2001, 2, 3) - self.rack2.save() - - def test_get_rack_meta(self): - url = reverse('dcim-api:rack-detail', kwargs={'pk': self.rack1.pk}) - response = self.client.get(url, **self.header) - - self.assertEqual(response.data['created'], self.rack1.created.strftime("%Y-%m-%d")) - self.assertEqual(response.data['last_updated'], self.rack1.last_updated.strftime("%Y-%m-%dT%H:%M:%S.%fZ")) + Rack.objects.filter(pk=self.rack2.pk).update( + last_updated=datetime.datetime(2001, 2, 3, 1, 2, 3, 4, tzinfo=timezone.utc), + created=datetime.datetime(2001, 2, 3) + ) def test_get_rack_created(self): url = reverse('dcim-api:rack-list') response = self.client.get('{}?created=2001-02-03'.format(url), **self.header) self.assertEqual(response.data['count'], 1) + self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) def test_get_rack_created_gte(self): url = reverse('dcim-api:rack-list') response = self.client.get('{}?created__gte=2001-02-04'.format(url), **self.header) self.assertEqual(response.data['count'], 1) + self.assertEqual(response.data['results'][0]['id'], self.rack1.pk) def test_get_rack_created_lte(self): url = reverse('dcim-api:rack-list') response = self.client.get('{}?created__lte=2001-02-04'.format(url), **self.header) self.assertEqual(response.data['count'], 1) + self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) def test_get_rack_last_updated(self): - last_updated = self.rack2.last_updated.strftime("%Y-%m-%d %H:%M:%S.%f") - url = reverse('dcim-api:rack-list') - response = self.client.get(('{}?last_updated=' + last_updated).format(url), **self.header) + response = self.client.get('{}?last_updated=2001-02-03%2001:02:03.000004'.format(url), **self.header) self.assertEqual(response.data['count'], 1) + self.assertEqual(response.data['results'][0]['id'], self.rack2.pk) def test_get_rack_last_updated_gte(self): - last_updated_delta = self.rack1.last_updated + datetime.timedelta(0, 1) - last_updated = last_updated_delta.strftime("%Y-%m-%d %H:%M:%S") - url = reverse('dcim-api:rack-list') - response = self.client.get(('{}?last_updated__gte=' + last_updated).format(url), **self.header) + response = self.client.get('{}?last_updated__gte=2001-02-04%2001:02:03.000004'.format(url), **self.header) self.assertEqual(response.data['count'], 1) + self.assertEqual(response.data['results'][0]['id'], self.rack1.pk) def test_get_rack_last_updated_lte(self): - last_updated_delta = self.rack1.last_updated + datetime.timedelta(0, 1) - last_updated = last_updated_delta.strftime("%Y-%m-%d %H:%M:%S") - url = reverse('dcim-api:rack-list') - response = self.client.get(('{}?last_updated__lte=' + last_updated).format(url), **self.header) + response = self.client.get('{}?last_updated__lte=2001-02-04%2001:02:03.000004'.format(url), **self.header) self.assertEqual(response.data['count'], 1) + self.assertEqual(response.data['results'][0]['id'], self.rack2.pk)