Explorar el Código

Clean up tests

jeremystretch hace 3 años
padre
commit
d4a231585a

+ 15 - 15
netbox/dcim/tests/test_api.py

@@ -1954,37 +1954,37 @@ class CableTest(APIViewTestCases.APIViewTestCase):
 
 
 class ConnectedDeviceTest(APITestCase):
 class ConnectedDeviceTest(APITestCase):
 
 
-    def setUp(self):
-
-        super().setUp()
-
+    @classmethod
+    def setUpTestData(cls):
         site = Site.objects.create(name='Site 1', slug='site-1')
         site = Site.objects.create(name='Site 1', slug='site-1')
         manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
         manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
         devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
         devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
         devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000')
         devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1', color='ff0000')
-        self.device1 = Device.objects.create(
-            device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site
+        devices = (
+            Device(device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site),
+            Device(device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site),
         )
         )
-        self.device2 = Device.objects.create(
-            device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site
+        Device.objects.bulk_create(devices)
+        interfaces = (
+            Interface(device=devices[0], name='eth0'),
+            Interface(device=devices[1], name='eth0'),
+            Interface(device=devices[0], name='eth1'),  # Not connected
         )
         )
-        self.interface1 = Interface.objects.create(device=self.device1, name='eth0')
-        self.interface2 = Interface.objects.create(device=self.device2, name='eth0')
-        self.interface3 = Interface.objects.create(device=self.device1, name='eth1')  # Not connected
+        Interface.objects.bulk_create(interfaces)
 
 
-        cable = Cable(a_terminations=[self.interface1], b_terminations=[self.interface2])
+        cable = Cable(a_terminations=[interfaces[0]], b_terminations=[interfaces[1]])
         cable.save()
         cable.save()
 
 
     @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
     @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
     def test_get_connected_device(self):
     def test_get_connected_device(self):
         url = reverse('dcim-api:connected-device-list')
         url = reverse('dcim-api:connected-device-list')
 
 
-        url_params = f'?peer_device={self.device1.name}&peer_interface={self.interface1.name}'
+        url_params = f'?peer_device=TestDevice1&peer_interface=eth0'
         response = self.client.get(url + url_params, **self.header)
         response = self.client.get(url + url_params, **self.header)
         self.assertHttpStatus(response, status.HTTP_200_OK)
         self.assertHttpStatus(response, status.HTTP_200_OK)
-        self.assertEqual(response.data['name'], self.device2.name)
+        self.assertEqual(response.data['name'], 'TestDevice2')
 
 
-        url_params = f'?peer_device={self.device1.name}&peer_interface={self.interface3.name}'
+        url_params = f'?peer_device=TestDevice1&peer_interface=eth1'
         response = self.client.get(url + url_params, **self.header)
         response = self.client.get(url + url_params, **self.header)
         self.assertHttpStatus(response, status.HTTP_404_NOT_FOUND)
         self.assertHttpStatus(response, status.HTTP_404_NOT_FOUND)
 
 

+ 124 - 92
netbox/dcim/tests/test_models.py

@@ -73,7 +73,8 @@ class LocationTestCase(TestCase):
 
 
 class RackTestCase(TestCase):
 class RackTestCase(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
         sites = (
         sites = (
             Site(name='Site 1', slug='site-1'),
             Site(name='Site 1', slug='site-1'),
@@ -240,30 +241,31 @@ class RackTestCase(TestCase):
 
 
 class DeviceTestCase(TestCase):
 class DeviceTestCase(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
-        self.site = Site.objects.create(name='Test Site 1', slug='test-site-1')
+        site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
-        self.device_type = DeviceType.objects.create(
+        device_type = DeviceType.objects.create(
             manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
             manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1'
         )
         )
-        self.device_role = DeviceRole.objects.create(
+        device_role = DeviceRole.objects.create(
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
         )
         )
 
 
         # Create DeviceType components
         # Create DeviceType components
         ConsolePortTemplate(
         ConsolePortTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Console Port 1'
             name='Console Port 1'
         ).save()
         ).save()
 
 
         ConsoleServerPortTemplate(
         ConsoleServerPortTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Console Server Port 1'
             name='Console Server Port 1'
         ).save()
         ).save()
 
 
         ppt = PowerPortTemplate(
         ppt = PowerPortTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Power Port 1',
             name='Power Port 1',
             maximum_draw=1000,
             maximum_draw=1000,
             allocated_draw=500
             allocated_draw=500
@@ -271,21 +273,21 @@ class DeviceTestCase(TestCase):
         ppt.save()
         ppt.save()
 
 
         PowerOutletTemplate(
         PowerOutletTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Power Outlet 1',
             name='Power Outlet 1',
             power_port=ppt,
             power_port=ppt,
             feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A
             feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A
         ).save()
         ).save()
 
 
         InterfaceTemplate(
         InterfaceTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Interface 1',
             name='Interface 1',
             type=InterfaceTypeChoices.TYPE_1GE_FIXED,
             type=InterfaceTypeChoices.TYPE_1GE_FIXED,
             mgmt_only=True
             mgmt_only=True
         ).save()
         ).save()
 
 
         rpt = RearPortTemplate(
         rpt = RearPortTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Rear Port 1',
             name='Rear Port 1',
             type=PortTypeChoices.TYPE_8P8C,
             type=PortTypeChoices.TYPE_8P8C,
             positions=8
             positions=8
@@ -293,7 +295,7 @@ class DeviceTestCase(TestCase):
         rpt.save()
         rpt.save()
 
 
         FrontPortTemplate(
         FrontPortTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Front Port 1',
             name='Front Port 1',
             type=PortTypeChoices.TYPE_8P8C,
             type=PortTypeChoices.TYPE_8P8C,
             rear_port=rpt,
             rear_port=rpt,
@@ -301,12 +303,12 @@ class DeviceTestCase(TestCase):
         ).save()
         ).save()
 
 
         ModuleBayTemplate(
         ModuleBayTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Module Bay 1'
             name='Module Bay 1'
         ).save()
         ).save()
 
 
         DeviceBayTemplate(
         DeviceBayTemplate(
-            device_type=self.device_type,
+            device_type=device_type,
             name='Device Bay 1'
             name='Device Bay 1'
         ).save()
         ).save()
 
 
@@ -315,9 +317,9 @@ class DeviceTestCase(TestCase):
         Ensure that all Device components are copied automatically from the DeviceType.
         Ensure that all Device components are copied automatically from the DeviceType.
         """
         """
         d = Device(
         d = Device(
-            site=self.site,
-            device_type=self.device_type,
-            device_role=self.device_role,
+            site=Site.objects.first(),
+            device_type=DeviceType.objects.first(),
+            device_role=DeviceRole.objects.first(),
             name='Test Device 1'
             name='Test Device 1'
         )
         )
         d.save()
         d.save()
@@ -381,9 +383,9 @@ class DeviceTestCase(TestCase):
     def test_multiple_unnamed_devices(self):
     def test_multiple_unnamed_devices(self):
 
 
         device1 = Device(
         device1 = Device(
-            site=self.site,
-            device_type=self.device_type,
-            device_role=self.device_role,
+            site=Site.objects.first(),
+            device_type=DeviceType.objects.first(),
+            device_role=DeviceRole.objects.first(),
             name=None
             name=None
         )
         )
         device1.save()
         device1.save()
@@ -402,9 +404,9 @@ class DeviceTestCase(TestCase):
     def test_device_name_case_sensitivity(self):
     def test_device_name_case_sensitivity(self):
 
 
         device1 = Device(
         device1 = Device(
-            site=self.site,
-            device_type=self.device_type,
-            device_role=self.device_role,
+            site=Site.objects.first(),
+            device_type=DeviceType.objects.first(),
+            device_role=DeviceRole.objects.first(),
             name='device 1'
             name='device 1'
         )
         )
         device1.save()
         device1.save()
@@ -423,9 +425,9 @@ class DeviceTestCase(TestCase):
     def test_device_duplicate_names(self):
     def test_device_duplicate_names(self):
 
 
         device1 = Device(
         device1 = Device(
-            site=self.site,
-            device_type=self.device_type,
-            device_role=self.device_role,
+            site=Site.objects.first(),
+            device_type=DeviceType.objects.first(),
+            device_role=DeviceRole.objects.first(),
             name='Test Device 1'
             name='Test Device 1'
         )
         )
         device1.save()
         device1.save()
@@ -459,7 +461,8 @@ class DeviceTestCase(TestCase):
 
 
 class CableTestCase(TestCase):
 class CableTestCase(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
         site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@@ -469,72 +472,76 @@ class CableTestCase(TestCase):
         devicerole = DeviceRole.objects.create(
         devicerole = DeviceRole.objects.create(
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
         )
         )
-        self.device1 = Device.objects.create(
+        device1 = Device.objects.create(
             device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site
             device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site
         )
         )
-        self.device2 = Device.objects.create(
+        device2 = Device.objects.create(
             device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site
             device_type=devicetype, device_role=devicerole, name='TestDevice2', site=site
         )
         )
-        self.interface1 = Interface.objects.create(device=self.device1, name='eth0')
-        self.interface2 = Interface.objects.create(device=self.device2, name='eth0')
-        self.interface3 = Interface.objects.create(device=self.device2, name='eth1')
-        self.cable = Cable(a_terminations=[self.interface1], b_terminations=[self.interface2])
-        self.cable.save()
-
-        self.power_port1 = PowerPort.objects.create(device=self.device2, name='psu1')
-        self.patch_pannel = Device.objects.create(
-            device_type=devicetype, device_role=devicerole, name='TestPatchPannel', site=site
-        )
-        self.rear_port1 = RearPort.objects.create(device=self.patch_pannel, name='RP1', type='8p8c')
-        self.front_port1 = FrontPort.objects.create(
-            device=self.patch_pannel, name='FP1', type='8p8c', rear_port=self.rear_port1, rear_port_position=1
-        )
-        self.rear_port2 = RearPort.objects.create(device=self.patch_pannel, name='RP2', type='8p8c', positions=2)
-        self.front_port2 = FrontPort.objects.create(
-            device=self.patch_pannel, name='FP2', type='8p8c', rear_port=self.rear_port2, rear_port_position=1
-        )
-        self.rear_port3 = RearPort.objects.create(device=self.patch_pannel, name='RP3', type='8p8c', positions=3)
-        self.front_port3 = FrontPort.objects.create(
-            device=self.patch_pannel, name='FP3', type='8p8c', rear_port=self.rear_port3, rear_port_position=1
-        )
-        self.rear_port4 = RearPort.objects.create(device=self.patch_pannel, name='RP4', type='8p8c', positions=3)
-        self.front_port4 = FrontPort.objects.create(
-            device=self.patch_pannel, name='FP4', type='8p8c', rear_port=self.rear_port4, rear_port_position=1
-        )
-        self.provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=self.provider)
-        self.circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
-        self.circuit1 = Circuit.objects.create(provider=self.provider, type=self.circuittype, cid='1')
-        self.circuit2 = Circuit.objects.create(provider=self.provider, type=self.circuittype, cid='2')
-        self.circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit1, site=site, term_side='A')
-        self.circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit1, site=site, term_side='Z')
-        self.circuittermination3 = CircuitTermination.objects.create(circuit=self.circuit2, provider_network=provider_network, term_side='A')
+        interface1 = Interface.objects.create(device=device1, name='eth0')
+        interface2 = Interface.objects.create(device=device2, name='eth0')
+        interface3 = Interface.objects.create(device=device2, name='eth1')
+        Cable(a_terminations=[interface1], b_terminations=[interface2]).save()
+
+        power_port1 = PowerPort.objects.create(device=device2, name='psu1')
+        patch_pannel = Device.objects.create(
+            device_type=devicetype, device_role=devicerole, name='TestPatchPanel', site=site
+        )
+        rear_port1 = RearPort.objects.create(device=patch_pannel, name='RP1', type='8p8c')
+        front_port1 = FrontPort.objects.create(
+            device=patch_pannel, name='FP1', type='8p8c', rear_port=rear_port1, rear_port_position=1
+        )
+        rear_port2 = RearPort.objects.create(device=patch_pannel, name='RP2', type='8p8c', positions=2)
+        front_port2 = FrontPort.objects.create(
+            device=patch_pannel, name='FP2', type='8p8c', rear_port=rear_port2, rear_port_position=1
+        )
+        rear_port3 = RearPort.objects.create(device=patch_pannel, name='RP3', type='8p8c', positions=3)
+        front_port3 = FrontPort.objects.create(
+            device=patch_pannel, name='FP3', type='8p8c', rear_port=rear_port3, rear_port_position=1
+        )
+        rear_port4 = RearPort.objects.create(device=patch_pannel, name='RP4', type='8p8c', positions=3)
+        front_port4 = FrontPort.objects.create(
+            device=patch_pannel, name='FP4', type='8p8c', rear_port=rear_port4, rear_port_position=1
+        )
+        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
+        provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=provider)
+        circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
+        circuit1 = Circuit.objects.create(provider=provider, type=circuittype, cid='1')
+        circuit2 = Circuit.objects.create(provider=provider, type=circuittype, cid='2')
+        circuittermination1 = CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='A')
+        circuittermination2 = CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='Z')
+        circuittermination3 = CircuitTermination.objects.create(circuit=circuit2, provider_network=provider_network, term_side='A')
 
 
     def test_cable_creation(self):
     def test_cable_creation(self):
         """
         """
         When a new Cable is created, it must be cached on either termination point.
         When a new Cable is created, it must be cached on either termination point.
         """
         """
-        self.interface1.refresh_from_db()
-        self.interface2.refresh_from_db()
-        self.assertEqual(self.interface1.cable, self.cable)
-        self.assertEqual(self.interface2.cable, self.cable)
-        self.assertEqual(self.interface1.cable_end, 'A')
-        self.assertEqual(self.interface2.cable_end, 'B')
-        self.assertEqual(self.interface1.link_peers, [self.interface2])
-        self.assertEqual(self.interface2.link_peers, [self.interface1])
+        interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0')
+        interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0')
+        cable = Cable.objects.first()
+        self.assertEqual(interface1.cable, cable)
+        self.assertEqual(interface2.cable, cable)
+        self.assertEqual(interface1.cable_end, 'A')
+        self.assertEqual(interface2.cable_end, 'B')
+        self.assertEqual(interface1.link_peers, [interface2])
+        self.assertEqual(interface2.link_peers, [interface1])
 
 
     def test_cable_deletion(self):
     def test_cable_deletion(self):
         """
         """
         When a Cable is deleted, the `cable` field on its termination points must be nullified. The str() method
         When a Cable is deleted, the `cable` field on its termination points must be nullified. The str() method
         should still return the PK of the string even after being nullified.
         should still return the PK of the string even after being nullified.
         """
         """
-        self.cable.delete()
-        self.assertIsNone(self.cable.pk)
-        self.assertNotEqual(str(self.cable), '#None')
-        interface1 = Interface.objects.get(pk=self.interface1.pk)
+        interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0')
+        interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0')
+        cable = Cable.objects.first()
+
+        cable.delete()
+        self.assertIsNone(cable.pk)
+        self.assertNotEqual(str(cable), '#None')
+        interface1 = Interface.objects.get(pk=interface1.pk)
         self.assertIsNone(interface1.cable)
         self.assertIsNone(interface1.cable)
         self.assertListEqual(interface1.link_peers, [])
         self.assertListEqual(interface1.link_peers, [])
-        interface2 = Interface.objects.get(pk=self.interface2.pk)
+        interface2 = Interface.objects.get(pk=interface2.pk)
         self.assertIsNone(interface2.cable)
         self.assertIsNone(interface2.cable)
         self.assertListEqual(interface2.link_peers, [])
         self.assertListEqual(interface2.link_peers, [])
 
 
@@ -542,7 +549,10 @@ class CableTestCase(TestCase):
         """
         """
         The clean method should ensure that all terminations at either end of a Cable belong to the same parent object.
         The clean method should ensure that all terminations at either end of a Cable belong to the same parent object.
         """
         """
-        cable = Cable(a_terminations=[self.interface1], b_terminations=[self.power_port1])
+        interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0')
+        powerport1 = PowerPort.objects.get(device__name='TestDevice2', name='psu1')
+
+        cable = Cable(a_terminations=[interface1], b_terminations=[powerport1])
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             cable.clean()
             cable.clean()
 
 
@@ -550,7 +560,11 @@ class CableTestCase(TestCase):
         """
         """
         The clean method should ensure that all terminations at either end of a Cable are of the same type.
         The clean method should ensure that all terminations at either end of a Cable are of the same type.
         """
         """
-        cable = Cable(a_terminations=[self.front_port1, self.rear_port1], b_terminations=[self.interface1])
+        interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0')
+        frontport1 = FrontPort.objects.get(device__name='TestPatchPanel', name='FP1')
+        rearport1 = RearPort.objects.get(device__name='TestPatchPanel', name='RP1')
+
+        cable = Cable(a_terminations=[frontport1, rearport1], b_terminations=[interface1])
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             cable.clean()
             cable.clean()
 
 
@@ -558,8 +572,11 @@ class CableTestCase(TestCase):
         """
         """
         The clean method should have a check to ensure only compatible port types can be connected by a cable
         The clean method should have a check to ensure only compatible port types can be connected by a cable
         """
         """
+        interface1 = Interface.objects.get(device__name='TestDevice1', name='eth0')
+        powerport1 = PowerPort.objects.get(device__name='TestDevice2', name='psu1')
+
         # An interface cannot be connected to a power port, for example
         # An interface cannot be connected to a power port, for example
-        cable = Cable(a_terminations=[self.interface1], b_terminations=[self.power_port1])
+        cable = Cable(a_terminations=[interface1], b_terminations=[powerport1])
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             cable.clean()
             cable.clean()
 
 
@@ -567,7 +584,10 @@ class CableTestCase(TestCase):
         """
         """
         Neither side of a cable can be terminated to a CircuitTermination which is attached to a ProviderNetwork
         Neither side of a cable can be terminated to a CircuitTermination which is attached to a ProviderNetwork
         """
         """
-        cable = Cable(a_terminations=[self.interface3], b_terminations=[self.circuittermination3])
+        interface3 = Interface.objects.get(device__name='TestDevice2', name='eth1')
+        circuittermination3 = CircuitTermination.objects.get(circuit__cid='2', term_side='A')
+
+        cable = Cable(a_terminations=[interface3], b_terminations=[circuittermination3])
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             cable.clean()
             cable.clean()
 
 
@@ -575,8 +595,11 @@ class CableTestCase(TestCase):
         """
         """
         A cable cannot terminate to a virtual interface
         A cable cannot terminate to a virtual interface
         """
         """
-        virtual_interface = Interface(device=self.device1, name="V1", type=InterfaceTypeChoices.TYPE_VIRTUAL)
-        cable = Cable(a_terminations=[self.interface2], b_terminations=[virtual_interface])
+        device1 = Device.objects.get(name='TestDevice1')
+        interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0')
+
+        virtual_interface = Interface(device=device1, name="V1", type=InterfaceTypeChoices.TYPE_VIRTUAL)
+        cable = Cable(a_terminations=[interface2], b_terminations=[virtual_interface])
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             cable.clean()
             cable.clean()
 
 
@@ -584,15 +607,19 @@ class CableTestCase(TestCase):
         """
         """
         A cable cannot terminate to a wireless interface
         A cable cannot terminate to a wireless interface
         """
         """
-        wireless_interface = Interface(device=self.device1, name="W1", type=InterfaceTypeChoices.TYPE_80211A)
-        cable = Cable(a_terminations=[self.interface2], b_terminations=[wireless_interface])
+        device1 = Device.objects.get(name='TestDevice1')
+        interface2 = Interface.objects.get(device__name='TestDevice2', name='eth0')
+
+        wireless_interface = Interface(device=device1, name="W1", type=InterfaceTypeChoices.TYPE_80211A)
+        cable = Cable(a_terminations=[interface2], b_terminations=[wireless_interface])
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             cable.clean()
             cable.clean()
 
 
 
 
 class VirtualDeviceContextTestCase(TestCase):
 class VirtualDeviceContextTestCase(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
         site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@@ -602,36 +629,41 @@ class VirtualDeviceContextTestCase(TestCase):
         devicerole = DeviceRole.objects.create(
         devicerole = DeviceRole.objects.create(
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
         )
         )
-        self.device = Device.objects.create(
+        Device.objects.create(
             device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site
             device_type=devicetype, device_role=devicerole, name='TestDevice1', site=site
         )
         )
 
 
     def test_vdc_and_interface_creation(self):
     def test_vdc_and_interface_creation(self):
+        device = Device.objects.first()
 
 
-        vdc = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=1, status='active')
+        vdc = VirtualDeviceContext(device=device, name="VDC 1", identifier=1, status='active')
         vdc.full_clean()
         vdc.full_clean()
         vdc.save()
         vdc.save()
 
 
-        interface = Interface(device=self.device, name='Eth1/1', type='10gbase-t')
+        interface = Interface(device=device, name='Eth1/1', type='10gbase-t')
         interface.full_clean()
         interface.full_clean()
         interface.save()
         interface.save()
 
 
         interface.vdcs.set([vdc])
         interface.vdcs.set([vdc])
 
 
     def test_vdc_duplicate_name(self):
     def test_vdc_duplicate_name(self):
-        vdc1 = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=1, status='active')
+        device = Device.objects.first()
+
+        vdc1 = VirtualDeviceContext(device=device, name="VDC 1", identifier=1, status='active')
         vdc1.full_clean()
         vdc1.full_clean()
         vdc1.save()
         vdc1.save()
 
 
-        vdc2 = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=2, status='active')
+        vdc2 = VirtualDeviceContext(device=device, name="VDC 1", identifier=2, status='active')
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             vdc2.full_clean()
             vdc2.full_clean()
 
 
     def test_vdc_duplicate_identifier(self):
     def test_vdc_duplicate_identifier(self):
-        vdc1 = VirtualDeviceContext(device=self.device, name="VDC 1", identifier=1, status='active')
+        device = Device.objects.first()
+
+        vdc1 = VirtualDeviceContext(device=device, name="VDC 1", identifier=1, status='active')
         vdc1.full_clean()
         vdc1.full_clean()
         vdc1.save()
         vdc1.save()
 
 
-        vdc2 = VirtualDeviceContext(device=self.device, name="VDC 2", identifier=1, status='active')
+        vdc2 = VirtualDeviceContext(device=device, name="VDC 2", identifier=1, status='active')
         with self.assertRaises(ValidationError):
         with self.assertRaises(ValidationError):
             vdc2.full_clean()
             vdc2.full_clean()

+ 15 - 14
netbox/dcim/tests/test_natural_ordering.py

@@ -5,7 +5,8 @@ from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer,
 
 
 class NaturalOrderingTestCase(TestCase):
 class NaturalOrderingTestCase(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
         site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         site = Site.objects.create(name='Test Site 1', slug='test-site-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
@@ -15,12 +16,12 @@ class NaturalOrderingTestCase(TestCase):
         devicerole = DeviceRole.objects.create(
         devicerole = DeviceRole.objects.create(
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
             name='Test Device Role 1', slug='test-device-role-1', color='ff0000'
         )
         )
-        self.device = Device.objects.create(
+        Device.objects.create(
             device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
             device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site
         )
         )
 
 
     def test_interface_ordering_numeric(self):
     def test_interface_ordering_numeric(self):
-
+        device = Device.objects.first()
         INTERFACES = [
         INTERFACES = [
             '0',
             '0',
             '0.0',
             '0.0',
@@ -57,16 +58,16 @@ class NaturalOrderingTestCase(TestCase):
         ]
         ]
 
 
         for name in INTERFACES:
         for name in INTERFACES:
-            iface = Interface(device=self.device, name=name)
+            iface = Interface(device=device, name=name)
             iface.save()
             iface.save()
 
 
         self.assertListEqual(
         self.assertListEqual(
-            list(Interface.objects.filter(device=self.device).values_list('name', flat=True)),
+            list(Interface.objects.filter(device=device).values_list('name', flat=True)),
             INTERFACES
             INTERFACES
         )
         )
 
 
     def test_interface_ordering_linux(self):
     def test_interface_ordering_linux(self):
-
+        device = Device.objects.first()
         INTERFACES = [
         INTERFACES = [
             'eth0',
             'eth0',
             'eth0.1',
             'eth0.1',
@@ -81,16 +82,16 @@ class NaturalOrderingTestCase(TestCase):
         ]
         ]
 
 
         for name in INTERFACES:
         for name in INTERFACES:
-            iface = Interface(device=self.device, name=name)
+            iface = Interface(device=device, name=name)
             iface.save()
             iface.save()
 
 
         self.assertListEqual(
         self.assertListEqual(
-            list(Interface.objects.filter(device=self.device).values_list('name', flat=True)),
+            list(Interface.objects.filter(device=device).values_list('name', flat=True)),
             INTERFACES
             INTERFACES
         )
         )
 
 
     def test_interface_ordering_junos(self):
     def test_interface_ordering_junos(self):
-
+        device = Device.objects.first()
         INTERFACES = [
         INTERFACES = [
             'xe-0/0/0',
             'xe-0/0/0',
             'xe-0/0/1',
             'xe-0/0/1',
@@ -134,16 +135,16 @@ class NaturalOrderingTestCase(TestCase):
         ]
         ]
 
 
         for name in INTERFACES:
         for name in INTERFACES:
-            iface = Interface(device=self.device, name=name)
+            iface = Interface(device=device, name=name)
             iface.save()
             iface.save()
 
 
         self.assertListEqual(
         self.assertListEqual(
-            list(Interface.objects.filter(device=self.device).values_list('name', flat=True)),
+            list(Interface.objects.filter(device=device).values_list('name', flat=True)),
             INTERFACES
             INTERFACES
         )
         )
 
 
     def test_interface_ordering_ios(self):
     def test_interface_ordering_ios(self):
-
+        device = Device.objects.first()
         INTERFACES = [
         INTERFACES = [
             'GigabitEthernet0/1',
             'GigabitEthernet0/1',
             'GigabitEthernet0/2',
             'GigabitEthernet0/2',
@@ -161,10 +162,10 @@ class NaturalOrderingTestCase(TestCase):
         ]
         ]
 
 
         for name in INTERFACES:
         for name in INTERFACES:
-            iface = Interface(device=self.device, name=name)
+            iface = Interface(device=device, name=name)
             iface.save()
             iface.save()
 
 
         self.assertListEqual(
         self.assertListEqual(
-            list(Interface.objects.filter(device=self.device).values_list('name', flat=True)),
+            list(Interface.objects.filter(device=device).values_list('name', flat=True)),
             INTERFACES
             INTERFACES
         )
         )

+ 23 - 20
netbox/extras/tests/test_api.py

@@ -611,73 +611,76 @@ class ScriptTest(APITestCase):
 
 
 class CreatedUpdatedFilterTest(APITestCase):
 class CreatedUpdatedFilterTest(APITestCase):
 
 
-    def setUp(self):
-
-        super().setUp()
-
-        self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
-        self.location1 = Location.objects.create(site=self.site1, name='Test Location 1', slug='test-location-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, location=self.location1, role=self.rackrole1, name='Test Rack 1', u_height=42,
-        )
-        self.rack2 = Rack.objects.create(
-            site=self.site1, location=self.location1, role=self.rackrole1, name='Test Rack 2', u_height=42,
+    @classmethod
+    def setUpTestData(cls):
+        site1 = Site.objects.create(name='Site 1', slug='site-1')
+        location1 = Location.objects.create(site=site1, name='Location 1', slug='location-1')
+        rackrole1 = RackRole.objects.create(name='Rack Role 1', slug='rack-role-1', color='ff0000')
+        racks = (
+            Rack(site=site1, location=location1, role=rackrole1, name='Rack 1', u_height=42),
+            Rack(site=site1, location=location1, role=rackrole1, name='Rack 2', u_height=42)
         )
         )
+        Rack.objects.bulk_create(racks)
 
 
-        # change the created and last_updated of one
-        Rack.objects.filter(pk=self.rack2.pk).update(
+        # Change the created and last_updated of the second rack
+        Rack.objects.filter(pk=racks[1].pk).update(
             last_updated=make_aware(datetime.datetime(2001, 2, 3, 1, 2, 3, 4)),
             last_updated=make_aware(datetime.datetime(2001, 2, 3, 1, 2, 3, 4)),
             created=make_aware(datetime.datetime(2001, 2, 3))
             created=make_aware(datetime.datetime(2001, 2, 3))
         )
         )
 
 
     def test_get_rack_created(self):
     def test_get_rack_created(self):
+        rack2 = Rack.objects.get(name='Rack 2')
         self.add_permissions('dcim.view_rack')
         self.add_permissions('dcim.view_rack')
         url = reverse('dcim-api:rack-list')
         url = reverse('dcim-api:rack-list')
         response = self.client.get('{}?created=2001-02-03'.format(url), **self.header)
         response = self.client.get('{}?created=2001-02-03'.format(url), **self.header)
 
 
         self.assertEqual(response.data['count'], 1)
         self.assertEqual(response.data['count'], 1)
-        self.assertEqual(response.data['results'][0]['id'], self.rack2.pk)
+        self.assertEqual(response.data['results'][0]['id'], rack2.pk)
 
 
     def test_get_rack_created_gte(self):
     def test_get_rack_created_gte(self):
+        rack1 = Rack.objects.get(name='Rack 1')
         self.add_permissions('dcim.view_rack')
         self.add_permissions('dcim.view_rack')
         url = reverse('dcim-api:rack-list')
         url = reverse('dcim-api:rack-list')
         response = self.client.get('{}?created__gte=2001-02-04'.format(url), **self.header)
         response = self.client.get('{}?created__gte=2001-02-04'.format(url), **self.header)
 
 
         self.assertEqual(response.data['count'], 1)
         self.assertEqual(response.data['count'], 1)
-        self.assertEqual(response.data['results'][0]['id'], self.rack1.pk)
+        self.assertEqual(response.data['results'][0]['id'], rack1.pk)
 
 
     def test_get_rack_created_lte(self):
     def test_get_rack_created_lte(self):
+        rack2 = Rack.objects.get(name='Rack 2')
         self.add_permissions('dcim.view_rack')
         self.add_permissions('dcim.view_rack')
         url = reverse('dcim-api:rack-list')
         url = reverse('dcim-api:rack-list')
         response = self.client.get('{}?created__lte=2001-02-04'.format(url), **self.header)
         response = self.client.get('{}?created__lte=2001-02-04'.format(url), **self.header)
 
 
         self.assertEqual(response.data['count'], 1)
         self.assertEqual(response.data['count'], 1)
-        self.assertEqual(response.data['results'][0]['id'], self.rack2.pk)
+        self.assertEqual(response.data['results'][0]['id'], rack2.pk)
 
 
     def test_get_rack_last_updated(self):
     def test_get_rack_last_updated(self):
+        rack2 = Rack.objects.get(name='Rack 2')
         self.add_permissions('dcim.view_rack')
         self.add_permissions('dcim.view_rack')
         url = reverse('dcim-api:rack-list')
         url = reverse('dcim-api:rack-list')
         response = self.client.get('{}?last_updated=2001-02-03%2001:02:03.000004'.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['count'], 1)
-        self.assertEqual(response.data['results'][0]['id'], self.rack2.pk)
+        self.assertEqual(response.data['results'][0]['id'], rack2.pk)
 
 
     def test_get_rack_last_updated_gte(self):
     def test_get_rack_last_updated_gte(self):
+        rack1 = Rack.objects.get(name='Rack 1')
         self.add_permissions('dcim.view_rack')
         self.add_permissions('dcim.view_rack')
         url = reverse('dcim-api:rack-list')
         url = reverse('dcim-api:rack-list')
         response = self.client.get('{}?last_updated__gte=2001-02-04%2001:02:03.000004'.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['count'], 1)
-        self.assertEqual(response.data['results'][0]['id'], self.rack1.pk)
+        self.assertEqual(response.data['results'][0]['id'], rack1.pk)
 
 
     def test_get_rack_last_updated_lte(self):
     def test_get_rack_last_updated_lte(self):
+        rack2 = Rack.objects.get(name='Rack 2')
         self.add_permissions('dcim.view_rack')
         self.add_permissions('dcim.view_rack')
         url = reverse('dcim-api:rack-list')
         url = reverse('dcim-api:rack-list')
         response = self.client.get('{}?last_updated__lte=2001-02-04%2001:02:03.000004'.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['count'], 1)
-        self.assertEqual(response.data['results'][0]['id'], self.rack2.pk)
+        self.assertEqual(response.data['results'][0]['id'], rack2.pk)
 
 
 
 
 class ContentTypeTest(APITestCase):
 class ContentTypeTest(APITestCase):

+ 2 - 1
netbox/extras/tests/test_customfields.py

@@ -373,7 +373,8 @@ class CustomFieldTest(TestCase):
 
 
 class CustomFieldManagerTest(TestCase):
 class CustomFieldManagerTest(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
         content_type = ContentType.objects.get_for_model(Site)
         content_type = ContentType.objects.get_for_model(Site)
         custom_field = CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo')
         custom_field = CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo')
         custom_field.save()
         custom_field.save()

+ 104 - 72
netbox/extras/tests/test_models.py

@@ -21,32 +21,32 @@ class ConfigContextTest(TestCase):
 
 
     It also ensures the various config context querysets are consistent.
     It also ensures the various config context querysets are consistent.
     """
     """
-
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
         manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
         manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
-        self.devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
-        self.devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
-        self.region = Region.objects.create(name="Region")
-        self.sitegroup = SiteGroup.objects.create(name="Site Group")
-        self.site = Site.objects.create(name='Site 1', slug='site-1', region=self.region, group=self.sitegroup)
-        self.location = Location.objects.create(name='Location 1', slug='location-1', site=self.site)
-        self.platform = Platform.objects.create(name="Platform")
-        self.tenantgroup = TenantGroup.objects.create(name="Tenant Group")
-        self.tenant = Tenant.objects.create(name="Tenant", group=self.tenantgroup)
-        self.tag = Tag.objects.create(name="Tag", slug="tag")
-        self.tag2 = Tag.objects.create(name="Tag2", slug="tag2")
-
-        self.device = Device.objects.create(
+        devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
+        devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
+        region = Region.objects.create(name='Region')
+        sitegroup = SiteGroup.objects.create(name='Site Group')
+        site = Site.objects.create(name='Site 1', slug='site-1', region=region, group=sitegroup)
+        location = Location.objects.create(name='Location 1', slug='location-1', site=site)
+        platform = Platform.objects.create(name='Platform')
+        tenantgroup = TenantGroup.objects.create(name='Tenant Group')
+        tenant = Tenant.objects.create(name='Tenant', group=tenantgroup)
+        tag1 = Tag.objects.create(name='Tag', slug='tag')
+        tag2 = Tag.objects.create(name='Tag2', slug='tag2')
+
+        Device.objects.create(
             name='Device 1',
             name='Device 1',
-            device_type=self.devicetype,
-            device_role=self.devicerole,
-            site=self.site,
-            location=self.location
+            device_type=devicetype,
+            device_role=devicerole,
+            site=site,
+            location=location
         )
         )
 
 
     def test_higher_weight_wins(self):
     def test_higher_weight_wins(self):
-
+        device = Device.objects.first()
         context1 = ConfigContext(
         context1 = ConfigContext(
             name="context 1",
             name="context 1",
             weight=101,
             weight=101,
@@ -72,10 +72,10 @@ class ConfigContextTest(TestCase):
             "b": 456,
             "b": 456,
             "c": 777
             "c": 777
         }
         }
-        self.assertEqual(self.device.get_config_context(), expected_data)
+        self.assertEqual(device.get_config_context(), expected_data)
 
 
     def test_name_ordering_after_weight(self):
     def test_name_ordering_after_weight(self):
-
+        device = Device.objects.first()
         context1 = ConfigContext(
         context1 = ConfigContext(
             name="context 1",
             name="context 1",
             weight=100,
             weight=100,
@@ -101,13 +101,14 @@ class ConfigContextTest(TestCase):
             "b": 456,
             "b": 456,
             "c": 789
             "c": 789
         }
         }
-        self.assertEqual(self.device.get_config_context(), expected_data)
+        self.assertEqual(device.get_config_context(), expected_data)
 
 
     def test_annotation_same_as_get_for_object(self):
     def test_annotation_same_as_get_for_object(self):
         """
         """
-        This test incorperates features from all of the above tests cases to ensure
+        This test incorporates features from all of the above tests cases to ensure
         the annotate_config_context_data() and get_for_object() queryset methods are the same.
         the annotate_config_context_data() and get_for_object() queryset methods are the same.
         """
         """
+        device = Device.objects.first()
         context1 = ConfigContext(
         context1 = ConfigContext(
             name="context 1",
             name="context 1",
             weight=101,
             weight=101,
@@ -142,10 +143,19 @@ class ConfigContextTest(TestCase):
         )
         )
         ConfigContext.objects.bulk_create([context1, context2, context3, context4])
         ConfigContext.objects.bulk_create([context1, context2, context3, context4])
 
 
-        annotated_queryset = Device.objects.filter(name=self.device.name).annotate_config_context_data()
-        self.assertEqual(self.device.get_config_context(), annotated_queryset[0].get_config_context())
+        annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
+        self.assertEqual(device.get_config_context(), annotated_queryset[0].get_config_context())
 
 
     def test_annotation_same_as_get_for_object_device_relations(self):
     def test_annotation_same_as_get_for_object_device_relations(self):
+        region = Region.objects.first()
+        sitegroup = SiteGroup.objects.first()
+        site = Site.objects.first()
+        location = Location.objects.first()
+        platform = Platform.objects.first()
+        tenantgroup = TenantGroup.objects.first()
+        tenant = Tenant.objects.first()
+        tag = Tag.objects.first()
+
         region_context = ConfigContext.objects.create(
         region_context = ConfigContext.objects.create(
             name="region",
             name="region",
             weight=100,
             weight=100,
@@ -153,7 +163,8 @@ class ConfigContextTest(TestCase):
                 "region": 1
                 "region": 1
             }
             }
         )
         )
-        region_context.regions.add(self.region)
+        region_context.regions.add(region)
+
         sitegroup_context = ConfigContext.objects.create(
         sitegroup_context = ConfigContext.objects.create(
             name="sitegroup",
             name="sitegroup",
             weight=100,
             weight=100,
@@ -161,7 +172,8 @@ class ConfigContextTest(TestCase):
                 "sitegroup": 1
                 "sitegroup": 1
             }
             }
         )
         )
-        sitegroup_context.site_groups.add(self.sitegroup)
+        sitegroup_context.site_groups.add(sitegroup)
+
         site_context = ConfigContext.objects.create(
         site_context = ConfigContext.objects.create(
             name="site",
             name="site",
             weight=100,
             weight=100,
@@ -169,7 +181,8 @@ class ConfigContextTest(TestCase):
                 "site": 1
                 "site": 1
             }
             }
         )
         )
-        site_context.sites.add(self.site)
+        site_context.sites.add(site)
+
         location_context = ConfigContext.objects.create(
         location_context = ConfigContext.objects.create(
             name="location",
             name="location",
             weight=100,
             weight=100,
@@ -177,7 +190,8 @@ class ConfigContextTest(TestCase):
                 "location": 1
                 "location": 1
             }
             }
         )
         )
-        location_context.locations.add(self.location)
+        location_context.locations.add(location)
+
         platform_context = ConfigContext.objects.create(
         platform_context = ConfigContext.objects.create(
             name="platform",
             name="platform",
             weight=100,
             weight=100,
@@ -185,7 +199,8 @@ class ConfigContextTest(TestCase):
                 "platform": 1
                 "platform": 1
             }
             }
         )
         )
-        platform_context.platforms.add(self.platform)
+        platform_context.platforms.add(platform)
+
         tenant_group_context = ConfigContext.objects.create(
         tenant_group_context = ConfigContext.objects.create(
             name="tenant group",
             name="tenant group",
             weight=100,
             weight=100,
@@ -193,7 +208,8 @@ class ConfigContextTest(TestCase):
                 "tenant_group": 1
                 "tenant_group": 1
             }
             }
         )
         )
-        tenant_group_context.tenant_groups.add(self.tenantgroup)
+        tenant_group_context.tenant_groups.add(tenantgroup)
+
         tenant_context = ConfigContext.objects.create(
         tenant_context = ConfigContext.objects.create(
             name="tenant",
             name="tenant",
             weight=100,
             weight=100,
@@ -201,7 +217,8 @@ class ConfigContextTest(TestCase):
                 "tenant": 1
                 "tenant": 1
             }
             }
         )
         )
-        tenant_context.tenants.add(self.tenant)
+        tenant_context.tenants.add(tenant)
+
         tag_context = ConfigContext.objects.create(
         tag_context = ConfigContext.objects.create(
             name="tag",
             name="tag",
             weight=100,
             weight=100,
@@ -209,23 +226,30 @@ class ConfigContextTest(TestCase):
                 "tag": 1
                 "tag": 1
             }
             }
         )
         )
-        tag_context.tags.add(self.tag)
+        tag_context.tags.add(tag)
 
 
         device = Device.objects.create(
         device = Device.objects.create(
             name="Device 2",
             name="Device 2",
-            site=self.site,
-            location=self.location,
-            tenant=self.tenant,
-            platform=self.platform,
-            device_role=self.devicerole,
-            device_type=self.devicetype
+            site=site,
+            location=location,
+            tenant=tenant,
+            platform=platform,
+            device_role=DeviceRole.objects.first(),
+            device_type=DeviceType.objects.first()
         )
         )
-        device.tags.add(self.tag)
+        device.tags.add(tag)
 
 
         annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
         annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
         self.assertEqual(device.get_config_context(), annotated_queryset[0].get_config_context())
         self.assertEqual(device.get_config_context(), annotated_queryset[0].get_config_context())
 
 
     def test_annotation_same_as_get_for_object_virtualmachine_relations(self):
     def test_annotation_same_as_get_for_object_virtualmachine_relations(self):
+        region = Region.objects.first()
+        sitegroup = SiteGroup.objects.first()
+        site = Site.objects.first()
+        platform = Platform.objects.first()
+        tenantgroup = TenantGroup.objects.first()
+        tenant = Tenant.objects.first()
+        tag = Tag.objects.first()
         cluster_type = ClusterType.objects.create(name="Cluster Type")
         cluster_type = ClusterType.objects.create(name="Cluster Type")
         cluster_group = ClusterGroup.objects.create(name="Cluster Group")
         cluster_group = ClusterGroup.objects.create(name="Cluster Group")
         cluster = Cluster.objects.create(name="Cluster", group=cluster_group, type=cluster_type)
         cluster = Cluster.objects.create(name="Cluster", group=cluster_group, type=cluster_type)
@@ -235,49 +259,49 @@ class ConfigContextTest(TestCase):
             weight=100,
             weight=100,
             data={"region": 1}
             data={"region": 1}
         )
         )
-        region_context.regions.add(self.region)
+        region_context.regions.add(region)
 
 
         sitegroup_context = ConfigContext.objects.create(
         sitegroup_context = ConfigContext.objects.create(
             name="sitegroup",
             name="sitegroup",
             weight=100,
             weight=100,
             data={"sitegroup": 1}
             data={"sitegroup": 1}
         )
         )
-        sitegroup_context.site_groups.add(self.sitegroup)
+        sitegroup_context.site_groups.add(sitegroup)
 
 
         site_context = ConfigContext.objects.create(
         site_context = ConfigContext.objects.create(
             name="site",
             name="site",
             weight=100,
             weight=100,
             data={"site": 1}
             data={"site": 1}
         )
         )
-        site_context.sites.add(self.site)
+        site_context.sites.add(site)
 
 
         platform_context = ConfigContext.objects.create(
         platform_context = ConfigContext.objects.create(
             name="platform",
             name="platform",
             weight=100,
             weight=100,
             data={"platform": 1}
             data={"platform": 1}
         )
         )
-        platform_context.platforms.add(self.platform)
+        platform_context.platforms.add(platform)
 
 
         tenant_group_context = ConfigContext.objects.create(
         tenant_group_context = ConfigContext.objects.create(
             name="tenant group",
             name="tenant group",
             weight=100,
             weight=100,
             data={"tenant_group": 1}
             data={"tenant_group": 1}
         )
         )
-        tenant_group_context.tenant_groups.add(self.tenantgroup)
+        tenant_group_context.tenant_groups.add(tenantgroup)
 
 
         tenant_context = ConfigContext.objects.create(
         tenant_context = ConfigContext.objects.create(
             name="tenant",
             name="tenant",
             weight=100,
             weight=100,
             data={"tenant": 1}
             data={"tenant": 1}
         )
         )
-        tenant_context.tenants.add(self.tenant)
+        tenant_context.tenants.add(tenant)
 
 
         tag_context = ConfigContext.objects.create(
         tag_context = ConfigContext.objects.create(
             name="tag",
             name="tag",
             weight=100,
             weight=100,
             data={"tag": 1}
             data={"tag": 1}
         )
         )
-        tag_context.tags.add(self.tag)
+        tag_context.tags.add(tag)
 
 
         cluster_type_context = ConfigContext.objects.create(
         cluster_type_context = ConfigContext.objects.create(
             name="cluster type",
             name="cluster type",
@@ -303,11 +327,11 @@ class ConfigContextTest(TestCase):
         virtual_machine = VirtualMachine.objects.create(
         virtual_machine = VirtualMachine.objects.create(
             name="VM 1",
             name="VM 1",
             cluster=cluster,
             cluster=cluster,
-            tenant=self.tenant,
-            platform=self.platform,
-            role=self.devicerole
+            tenant=tenant,
+            platform=platform,
+            role=DeviceRole.objects.first()
         )
         )
-        virtual_machine.tags.add(self.tag)
+        virtual_machine.tags.add(tag)
 
 
         annotated_queryset = VirtualMachine.objects.filter(name=virtual_machine.name).annotate_config_context_data()
         annotated_queryset = VirtualMachine.objects.filter(name=virtual_machine.name).annotate_config_context_data()
         self.assertEqual(virtual_machine.get_config_context(), annotated_queryset[0].get_config_context())
         self.assertEqual(virtual_machine.get_config_context(), annotated_queryset[0].get_config_context())
@@ -315,12 +339,17 @@ class ConfigContextTest(TestCase):
     def test_multiple_tags_return_distinct_objects(self):
     def test_multiple_tags_return_distinct_objects(self):
         """
         """
         Tagged items use a generic relationship, which results in duplicate rows being returned when queried.
         Tagged items use a generic relationship, which results in duplicate rows being returned when queried.
-        This is combatted by by appending distinct() to the config context querysets. This test creates a config
+        This is combated by appending distinct() to the config context querysets. This test creates a config
         context assigned to two tags and ensures objects related by those same two tags result in only a single
         context assigned to two tags and ensures objects related by those same two tags result in only a single
         config context record being returned.
         config context record being returned.
 
 
         See https://github.com/netbox-community/netbox/issues/5314
         See https://github.com/netbox-community/netbox/issues/5314
         """
         """
+        site = Site.objects.first()
+        platform = Platform.objects.first()
+        tenant = Tenant.objects.first()
+        tags = Tag.objects.all()
+
         tag_context = ConfigContext.objects.create(
         tag_context = ConfigContext.objects.create(
             name="tag",
             name="tag",
             weight=100,
             weight=100,
@@ -328,19 +357,17 @@ class ConfigContextTest(TestCase):
                 "tag": 1
                 "tag": 1
             }
             }
         )
         )
-        tag_context.tags.add(self.tag)
-        tag_context.tags.add(self.tag2)
+        tag_context.tags.set(tags)
 
 
         device = Device.objects.create(
         device = Device.objects.create(
             name="Device 3",
             name="Device 3",
-            site=self.site,
-            tenant=self.tenant,
-            platform=self.platform,
-            device_role=self.devicerole,
-            device_type=self.devicetype
+            site=site,
+            tenant=tenant,
+            platform=platform,
+            device_role=DeviceRole.objects.first(),
+            device_type=DeviceType.objects.first()
         )
         )
-        device.tags.add(self.tag)
-        device.tags.add(self.tag2)
+        device.tags.set(tags)
 
 
         annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
         annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
         self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 1)
         self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 1)
@@ -357,6 +384,11 @@ class ConfigContextTest(TestCase):
 
 
         See https://github.com/netbox-community/netbox/issues/5387
         See https://github.com/netbox-community/netbox/issues/5387
         """
         """
+        site = Site.objects.first()
+        platform = Platform.objects.first()
+        tenant = Tenant.objects.first()
+        tag1, tag2 = list(Tag.objects.all())
+
         tag_context_1 = ConfigContext.objects.create(
         tag_context_1 = ConfigContext.objects.create(
             name="tag-1",
             name="tag-1",
             weight=100,
             weight=100,
@@ -364,7 +396,8 @@ class ConfigContextTest(TestCase):
                 "tag": 1
                 "tag": 1
             }
             }
         )
         )
-        tag_context_1.tags.add(self.tag)
+        tag_context_1.tags.add(tag1)
+
         tag_context_2 = ConfigContext.objects.create(
         tag_context_2 = ConfigContext.objects.create(
             name="tag-2",
             name="tag-2",
             weight=100,
             weight=100,
@@ -372,18 +405,17 @@ class ConfigContextTest(TestCase):
                 "tag": 1
                 "tag": 1
             }
             }
         )
         )
-        tag_context_2.tags.add(self.tag2)
+        tag_context_2.tags.add(tag2)
 
 
         device = Device.objects.create(
         device = Device.objects.create(
             name="Device 3",
             name="Device 3",
-            site=self.site,
-            tenant=self.tenant,
-            platform=self.platform,
-            device_role=self.devicerole,
-            device_type=self.devicetype
-        )
-        device.tags.add(self.tag)
-        device.tags.add(self.tag2)
+            site=site,
+            tenant=tenant,
+            platform=platform,
+            device_role=DeviceRole.objects.first(),
+            device_type=DeviceType.objects.first()
+        )
+        device.tags.set([tag1, tag2])
 
 
         annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
         annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data()
         self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 2)
         self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 2)

+ 1 - 0
netbox/extras/tests/test_webhooks.py

@@ -23,6 +23,7 @@ class WebhookTest(APITestCase):
     def setUp(self):
     def setUp(self):
         super().setUp()
         super().setUp()
 
 
+        # Ensure the queue has been cleared for each test
         self.queue = django_rq.get_queue('default')
         self.queue = django_rq.get_queue('default')
         self.queue.empty()
         self.queue.empty()
 
 

+ 73 - 77
netbox/ipam/tests/test_ordering.py

@@ -9,12 +9,17 @@ import netaddr
 class OrderingTestBase(TestCase):
 class OrderingTestBase(TestCase):
     vrfs = None
     vrfs = None
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
         """
         """
         Setup the VRFs for the class as a whole
         Setup the VRFs for the class as a whole
         """
         """
-        self.vrfs = (VRF(name="VRF A"), VRF(name="VRF B"), VRF(name="VRF C"))
-        VRF.objects.bulk_create(self.vrfs)
+        vrfs = (
+            VRF(name='VRF 1'),
+            VRF(name='VRF 2'),
+            VRF(name='VRF 3'),
+        )
+        VRF.objects.bulk_create(vrfs)
 
 
     def _compare(self, queryset, objectset):
     def _compare(self, queryset, objectset):
         """
         """
@@ -37,10 +42,7 @@ class PrefixOrderingTestCase(OrderingTestBase):
         """
         """
         This is a very basic test, which tests both prefixes without VRFs and prefixes with VRFs
         This is a very basic test, which tests both prefixes without VRFs and prefixes with VRFs
         """
         """
-        # Setup VRFs
-        vrfa, vrfb, vrfc = self.vrfs
-
-        # Setup Prefixes
+        vrf1, vrf2, vrf3 = list(VRF.objects.all())
         prefixes = (
         prefixes = (
             Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/24')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/24')),
@@ -50,37 +52,37 @@ class PrefixOrderingTestCase(OrderingTestBase):
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.4.0/24')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.4.0/24')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.5.0/24')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.5.0/24')),
 
 
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.0.0/8')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.0.0/16')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.0.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.1.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.2.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.3.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.4.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.0.0/16')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.1.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.2.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.3.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.4.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.0.0/16')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.1.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.2.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.3.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.2.4.0/24')),
-
-            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.0.0/12')),
-            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.0.0/16')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.0.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.1.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.2.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.3.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.16.4.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.0.0/16')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.0.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.1.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.2.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.3.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfb, prefix=netaddr.IPNetwork('172.17.4.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/8')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/16')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.2.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.3.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.4.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.0.0/16')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.2.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.3.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.4.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.0.0/16')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.2.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.3.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.2.4.0/24')),
+
+            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.0.0/12')),
+            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.0.0/16')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.0.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.2.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.3.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.16.4.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.0.0/16')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.0.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.2.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.3.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf2, prefix=netaddr.IPNetwork('172.17.4.0/24')),
         )
         )
 
 
         Prefix.objects.bulk_create(prefixes)
         Prefix.objects.bulk_create(prefixes)
@@ -104,20 +106,17 @@ class PrefixOrderingTestCase(OrderingTestBase):
             VRF A:10.1.1.0/24
             VRF A:10.1.1.0/24
             None: 192.168.0.0/16
             None: 192.168.0.0/16
         """
         """
-        # Setup VRFs
-        vrfa, vrfb, vrfc = self.vrfs
-
-        # Setup Prefixes
+        vrf1, vrf2, vrf3 = list(VRF.objects.all())
         prefixes = [
         prefixes = [
             Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/8')),
             Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/8')),
             Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('10.1.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('10.1.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')),
             Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.0.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.1.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.0.1.0/25')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.0.0/24')),
-            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrfa, prefix=netaddr.IPNetwork('10.1.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.0.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.1.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.0.1.0/25')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.0.0/24')),
+            Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=vrf1, prefix=netaddr.IPNetwork('10.1.1.0/24')),
         ]
         ]
         Prefix.objects.bulk_create(prefixes)
         Prefix.objects.bulk_create(prefixes)
 
 
@@ -131,37 +130,34 @@ class IPAddressOrderingTestCase(OrderingTestBase):
         """
         """
         This function tests ordering with the inclusion of vrfs
         This function tests ordering with the inclusion of vrfs
         """
         """
-        # Setup VRFs
-        vrfa, vrfb, vrfc = self.vrfs
-
-        # Setup Addresses
+        vrf1, vrf2, vrf3 = list(VRF.objects.all())
         addresses = (
         addresses = (
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.0.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.1.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.2.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.3.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.0.4.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.0.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.1.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.2.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.3.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.1.4.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.0.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.1.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.2.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.3.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfa, address=netaddr.IPNetwork('10.2.4.1/24')),
-
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.0.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.1.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.2.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.3.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.16.4.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.0.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.1.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.2.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.3.1/24')),
-            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrfb, address=netaddr.IPNetwork('172.17.4.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.0.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.1.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.2.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.3.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.4.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.0.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.1.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.2.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.3.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.1.4.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.0.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.1.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.2.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.3.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.4.1/24')),
+
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.0.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.1.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.2.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.3.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.4.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.0.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.1.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.2.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.3.1/24')),
+            IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.4.1/24')),
 
 
             IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.0.1/24')),
             IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.0.1/24')),
             IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.1.1/24')),
             IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.1.1/24')),

+ 6 - 7
netbox/users/tests/test_models.py

@@ -4,7 +4,8 @@ from django.test import TestCase
 
 
 class UserConfigTest(TestCase):
 class UserConfigTest(TestCase):
 
 
-    def setUp(self):
+    @classmethod
+    def setUpTestData(cls):
 
 
         user = User.objects.create_user(username='testuser')
         user = User.objects.create_user(username='testuser')
         user.config.data = {
         user.config.data = {
@@ -27,10 +28,8 @@ class UserConfigTest(TestCase):
         }
         }
         user.config.save()
         user.config.save()
 
 
-        self.userconfig = user.config
-
     def test_get(self):
     def test_get(self):
-        userconfig = self.userconfig
+        userconfig = User.objects.get(username='testuser').config
 
 
         # Retrieve root and nested values
         # Retrieve root and nested values
         self.assertEqual(userconfig.get('a'), True)
         self.assertEqual(userconfig.get('a'), True)
@@ -50,7 +49,7 @@ class UserConfigTest(TestCase):
         self.assertEqual(userconfig.get('b.foo.x.invalid', 'DEFAULT'), 'DEFAULT')
         self.assertEqual(userconfig.get('b.foo.x.invalid', 'DEFAULT'), 'DEFAULT')
 
 
     def test_all(self):
     def test_all(self):
-        userconfig = self.userconfig
+        userconfig = User.objects.get(username='testuser').config
         flattened_data = {
         flattened_data = {
             'a': True,
             'a': True,
             'b.foo': 101,
             'b.foo': 101,
@@ -64,7 +63,7 @@ class UserConfigTest(TestCase):
         self.assertEqual(userconfig.all(), flattened_data)
         self.assertEqual(userconfig.all(), flattened_data)
 
 
     def test_set(self):
     def test_set(self):
-        userconfig = self.userconfig
+        userconfig = User.objects.get(username='testuser').config
 
 
         # Overwrite existing values
         # Overwrite existing values
         userconfig.set('a', 'abc')
         userconfig.set('a', 'abc')
@@ -93,7 +92,7 @@ class UserConfigTest(TestCase):
             userconfig.set('a.x', 1)
             userconfig.set('a.x', 1)
 
 
     def test_clear(self):
     def test_clear(self):
-        userconfig = self.userconfig
+        userconfig = User.objects.get(username='testuser').config
 
 
         # Clear existing values
         # Clear existing values
         userconfig.clear('a')
         userconfig.clear('a')