Просмотр исходного кода

Convert circuits app tests to use model_bakery for fixture creation (#22087)

Replace manual object creation in all circuits test files with
model_bakery's baker.make() calls. This reduces test setup boilerplate
by ~500 lines while maintaining identical test coverage (708 tests).

Add MPTT_ALLOW_TESTING_GENERATORS setting to allow model_bakery to
create objects with MPTT foreign key chains in the test environment.
Jason Novinger 4 дней назад
Родитель
Сommit
57f8b1e910

+ 95 - 269
netbox/circuits/tests/test_api.py

@@ -1,10 +1,10 @@
 from django.urls import reverse
 from django.urls import reverse
+from model_bakery import baker
 
 
 from circuits.choices import *
 from circuits.choices import *
 from circuits.models import *
 from circuits.models import *
 from dcim.choices import InterfaceTypeChoices
 from dcim.choices import InterfaceTypeChoices
-from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, Site
-from ipam.models import ASN, RIR
+from dcim.models import Interface
 from utilities.testing import APITestCase, APIViewTestCases
 from utilities.testing import APITestCase, APIViewTestCases
 
 
 
 
@@ -27,18 +27,10 @@ class ProviderTestCase(APIViewTestCases.APIViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        rir = RIR.objects.create(name='RFC 6996', is_private=True)
-        asns = [
-            ASN(asn=65000 + i, rir=rir) for i in range(8)
-        ]
-        ASN.objects.bulk_create(asns)
+        rir = baker.make('ipam.RIR', is_private=True)
+        asns = [baker.make('ipam.ASN', asn=65000 + i, rir=rir) for i in range(8)]
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
+        baker.make('circuits.Provider', _quantity=3)
 
 
         cls.create_data = [
         cls.create_data = [
             {
             {
@@ -82,13 +74,7 @@ class CircuitTypeTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-
-        circuit_types = (
-            CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
-            CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
-            CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
-        )
-        CircuitType.objects.bulk_create(circuit_types)
+        baker.make('circuits.CircuitType', _quantity=3)
 
 
 
 
 class CircuitTestCase(APIViewTestCases.APIViewTestCase):
 class CircuitTestCase(APIViewTestCases.APIViewTestCase):
@@ -102,36 +88,22 @@ class CircuitTestCase(APIViewTestCases.APIViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=2)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
-            ProviderAccount(name='Provider Account 2', provider=providers[1], account='2345'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
+        provider_accounts = [
+            baker.make('circuits.ProviderAccount', provider=providers[0]),
+            baker.make('circuits.ProviderAccount', provider=providers[1]),
+        ]
 
 
-        circuit_types = (
-            CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
-            CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
-        )
-        CircuitType.objects.bulk_create(circuit_types)
+        circuit_types = baker.make('circuits.CircuitType', _quantity=2)
 
 
-        circuits = (
-            Circuit(
-                cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]
-            ),
-            Circuit(
-                cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]
-            ),
-            Circuit(
-                cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]
-            ),
+        baker.make(
+            'circuits.Circuit',
+            provider=providers[0],
+            provider_account=provider_accounts[0],
+            type=circuit_types[0],
+            _quantity=3,
         )
         )
-        Circuit.objects.bulk_create(circuits)
 
 
         cls.create_data = [
         cls.create_data = [
             {
             {
@@ -165,27 +137,14 @@ class CircuitTerminationTestCase(APIViewTestCases.APIViewTestCase):
         SIDE_A = CircuitTerminationSideChoices.SIDE_A
         SIDE_A = CircuitTerminationSideChoices.SIDE_A
         SIDE_Z = CircuitTerminationSideChoices.SIDE_Z
         SIDE_Z = CircuitTerminationSideChoices.SIDE_Z
 
 
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
+        provider = baker.make('circuits.Provider')
+        circuit_type = baker.make('circuits.CircuitType')
 
 
-        sites = (
-            Site(name='Site 1', slug='site-1'),
-            Site(name='Site 2', slug='site-2'),
-        )
-        Site.objects.bulk_create(sites)
+        sites = baker.make('dcim.Site', _quantity=2)
 
 
-        provider_networks = (
-            ProviderNetwork(provider=provider, name='Provider Network 1'),
-            ProviderNetwork(provider=provider, name='Provider Network 2'),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        provider_networks = baker.make('circuits.ProviderNetwork', provider=provider, _quantity=2)
 
 
-        circuits = (
-            Circuit(cid='Circuit 1', provider=provider, type=circuit_type),
-            Circuit(cid='Circuit 2', provider=provider, type=circuit_type),
-            Circuit(cid='Circuit 3', provider=provider, type=circuit_type),
-        )
-        Circuit.objects.bulk_create(circuits)
+        circuits = baker.make('circuits.Circuit', provider=provider, type=circuit_type, _quantity=3)
 
 
         circuit_terminations = (
         circuit_terminations = (
             CircuitTermination(circuit=circuits[0], term_side=SIDE_A, termination=sites[0]),
             CircuitTermination(circuit=circuits[0], term_side=SIDE_A, termination=sites[0]),
@@ -226,12 +185,7 @@ class CircuitGroupTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        circuit_groups = (
-            CircuitGroup(name="Circuit Group 1", slug='circuit-group-1'),
-            CircuitGroup(name="Circuit Group 2", slug='circuit-group-2'),
-            CircuitGroup(name="Circuit Group 3", slug='circuit-group-3'),
-        )
-        CircuitGroup.objects.bulk_create(circuit_groups)
+        baker.make('circuits.CircuitGroup', _quantity=3)
 
 
         cls.create_data = [
         cls.create_data = [
             {
             {
@@ -256,18 +210,9 @@ class ProviderAccountTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=2)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
-            ProviderAccount(name='Provider Account 2', provider=providers[0], account='2345'),
-            ProviderAccount(name='Provider Account 3', provider=providers[0], account='3456'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
+        baker.make('circuits.ProviderAccount', provider=providers[0], _quantity=3)
 
 
         cls.create_data = [
         cls.create_data = [
             {
             {
@@ -304,28 +249,12 @@ class CircuitGroupAssignmentTestCase(APIViewTestCases.APIViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        circuit_groups = (
-            CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
-            CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
-            CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
-            CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'),
-            CircuitGroup(name='Circuit Group 5', slug='circuit-group-5'),
-            CircuitGroup(name='Circuit Group 6', slug='circuit-group-6'),
-        )
-        CircuitGroup.objects.bulk_create(circuit_groups)
-
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
-
-        circuits = (
-            Circuit(cid='Circuit 1', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 2', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 3', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 4', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 5', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 6', provider=provider, type=circuittype),
-        )
-        Circuit.objects.bulk_create(circuits)
+        circuit_groups = baker.make('circuits.CircuitGroup', _quantity=6)
+
+        provider = baker.make('circuits.Provider')
+        circuittype = baker.make('circuits.CircuitType')
+
+        circuits = baker.make('circuits.Circuit', provider=provider, type=circuittype, _quantity=6)
 
 
         assignments = (
         assignments = (
             CircuitGroupAssignment(
             CircuitGroupAssignment(
@@ -375,18 +304,9 @@ class ProviderNetworkTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=2)
 
 
-        provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 2', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 3', provider=providers[0]),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        baker.make('circuits.ProviderNetwork', provider=providers[0], _quantity=3)
 
 
         cls.create_data = [
         cls.create_data = [
             {
             {
@@ -432,13 +352,7 @@ class VirtualCircuitTypeTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-
-        virtual_circuit_types = (
-            VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'),
-            VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'),
-            VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'),
-        )
-        VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
+        baker.make('circuits.VirtualCircuitType', _quantity=3)
 
 
 
 
 class VirtualCircuitTestCase(APIViewTestCases.APIViewTestCase):
 class VirtualCircuitTestCase(APIViewTestCases.APIViewTestCase):
@@ -450,36 +364,19 @@ class VirtualCircuitTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1')
-        provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1')
-        virtual_circuit_type = VirtualCircuitType.objects.create(
-            name='Virtual Circuit Type 1',
-            slug='virtual-circuit-type-1'
+        provider = baker.make('circuits.Provider')
+        provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
+        provider_account = baker.make('circuits.ProviderAccount', provider=provider)
+        virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
+
+        baker.make(
+            'circuits.VirtualCircuit',
+            provider_network=provider_network,
+            provider_account=provider_account,
+            type=virtual_circuit_type,
+            _quantity=3,
         )
         )
 
 
-        virtual_circuits = (
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                type=virtual_circuit_type,
-                cid='Virtual Circuit 1'
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                type=virtual_circuit_type,
-                cid='Virtual Circuit 2'
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                type=virtual_circuit_type,
-                cid='Virtual Circuit 3'
-            ),
-        )
-        VirtualCircuit.objects.bulk_create(virtual_circuits)
-
         cls.create_data = [
         cls.create_data = [
             {
             {
                 'cid': 'Virtual Circuit 4',
                 'cid': 'Virtual Circuit 4',
@@ -514,129 +411,58 @@ class VirtualCircuitTerminationTestCase(APIViewTestCases.APIViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
-        device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
-        device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
-        site = Site.objects.create(name='Site 1', slug='site-1')
-
-        devices = (
-            Device(site=site, name='hub', device_type=device_type, role=device_role),
-            Device(site=site, name='spoke1', device_type=device_type, role=device_role),
-            Device(site=site, name='spoke2', device_type=device_type, role=device_role),
-            Device(site=site, name='spoke3', device_type=device_type, role=device_role),
-        )
-        Device.objects.bulk_create(devices)
+        site = baker.make('dcim.Site')
+        device_type = baker.make('dcim.DeviceType')
+        device_role = baker.make('dcim.DeviceRole')
 
 
-        physical_interfaces = (
-            Interface(device=devices[0], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-            Interface(device=devices[1], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-            Interface(device=devices[2], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-            Interface(device=devices[3], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-        )
-        Interface.objects.bulk_create(physical_interfaces)
-
-        virtual_interfaces = (
-            # Point-to-point VCs
-            Interface(
-                device=devices[0],
-                name='eth0.1',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[0],
-                name='eth0.2',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[0],
-                name='eth0.3',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[1],
-                name='eth0.1',
-                parent=physical_interfaces[1],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[2],
-                name='eth0.1',
-                parent=physical_interfaces[2],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[3],
-                name='eth0.1',
-                parent=physical_interfaces[3],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-
-            # Hub and spoke VCs
-            Interface(
-                device=devices[0],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[1],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[2],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[3],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-        )
-        Interface.objects.bulk_create(virtual_interfaces)
-
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1')
-        provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1')
-        virtual_circuit_type = VirtualCircuitType.objects.create(
-            name='Virtual Circuit Type 1',
-            slug='virtual-circuit-type-1'
-        )
+        devices = [
+            baker.make('dcim.Device', site=site, device_type=device_type, role=device_role, name=name)
+            for name in ('hub', 'spoke1', 'spoke2', 'spoke3')
+        ]
 
 
-        virtual_circuits = (
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 1',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 2',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 3',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 4',
-                type=virtual_circuit_type
-            ),
+        physical_interfaces = []
+        for device in devices:
+            physical_interfaces.append(
+                Interface.objects.create(device=device, name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED)
+            )
+
+        virtual_interfaces = []
+        # Point-to-point VCs
+        for i, (device, parent) in enumerate(zip(devices, physical_interfaces)):
+            count = 3 if i == 0 else 1
+            for j in range(count):
+                virtual_interfaces.append(
+                    Interface.objects.create(
+                        device=device,
+                        name=f'eth0.{j + 1}',
+                        parent=parent,
+                        type=InterfaceTypeChoices.TYPE_VIRTUAL,
+                    )
+                )
+
+        # Hub and spoke VCs
+        for device in devices:
+            virtual_interfaces.append(
+                Interface.objects.create(
+                    device=device,
+                    name='eth0.9',
+                    parent=physical_interfaces[0],
+                    type=InterfaceTypeChoices.TYPE_VIRTUAL,
+                )
+            )
+
+        provider = baker.make('circuits.Provider')
+        provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
+        provider_account = baker.make('circuits.ProviderAccount', provider=provider)
+        virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
+
+        virtual_circuits = baker.make(
+            'circuits.VirtualCircuit',
+            provider_network=provider_network,
+            provider_account=provider_account,
+            type=virtual_circuit_type,
+            _quantity=4,
         )
         )
-        VirtualCircuit.objects.bulk_create(virtual_circuits)
 
 
         virtual_circuit_terminations = (
         virtual_circuit_terminations = (
             VirtualCircuitTermination(
             VirtualCircuitTermination(

+ 175 - 300
netbox/circuits/tests/test_filtersets.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
 from django.test import TestCase
+from model_bakery import baker
 
 
 from circuits.choices import *
 from circuits.choices import *
 from circuits.filtersets import *
 from circuits.filtersets import *
@@ -6,17 +7,13 @@ from circuits.models import *
 from dcim.choices import InterfaceTypeChoices, LocationStatusChoices
 from dcim.choices import InterfaceTypeChoices, LocationStatusChoices
 from dcim.models import (
 from dcim.models import (
     Cable,
     Cable,
-    Device,
-    DeviceRole,
-    DeviceType,
     Interface,
     Interface,
     Location,
     Location,
-    Manufacturer,
     Region,
     Region,
     Site,
     Site,
     SiteGroup,
     SiteGroup,
 )
 )
-from ipam.models import ASN, RIR
+from ipam.models import ASN
 from netbox.choices import DistanceUnitChoices
 from netbox.choices import DistanceUnitChoices
 from tenancy.models import Tenant, TenantGroup
 from tenancy.models import Tenant, TenantGroup
 from utilities.testing import ChangeLoggedFilterSetTests
 from utilities.testing import ChangeLoggedFilterSetTests
@@ -29,26 +26,24 @@ class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        rir = RIR.objects.create(name='RFC 6996', is_private=True)
-        asns = (
-            ASN(asn=64512, rir=rir),
-            ASN(asn=64513, rir=rir),
-            ASN(asn=64514, rir=rir),
-        )
-        ASN.objects.bulk_create(asns)
+        rir = baker.make('ipam.RIR', is_private=True)
+        asns = [
+            baker.make('ipam.ASN', asn=64512 + i, rir=rir)
+            for i in range(3)
+        ]
 
 
         providers = (
         providers = (
-            Provider(name='Provider 1', slug='provider-1', description='foobar1'),
-            Provider(name='Provider 2', slug='provider-2', description='foobar2'),
-            Provider(name='Provider 3', slug='provider-3'),
-            Provider(name='Provider 4', slug='provider-4'),
-            Provider(name='Provider 5', slug='provider-5'),
+            baker.make('circuits.Provider', name='Provider 1', slug='provider-1', description='foobar1'),
+            baker.make('circuits.Provider', name='Provider 2', slug='provider-2', description='foobar2'),
+            baker.make('circuits.Provider', name='Provider 3', slug='provider-3'),
+            baker.make('circuits.Provider', name='Provider 4', slug='provider-4'),
+            baker.make('circuits.Provider', name='Provider 5', slug='provider-5'),
         )
         )
-        Provider.objects.bulk_create(providers)
         providers[0].asns.set([asns[0]])
         providers[0].asns.set([asns[0]])
         providers[1].asns.set([asns[1]])
         providers[1].asns.set([asns[1]])
         providers[2].asns.set([asns[2]])
         providers[2].asns.set([asns[2]])
 
 
+        # MPTT models: use .save() directly
         regions = (
         regions = (
             Region(name='Test Region 1', slug='test-region-1'),
             Region(name='Test Region 1', slug='test-region-1'),
             Region(name='Test Region 2', slug='test-region-2'),
             Region(name='Test Region 2', slug='test-region-2'),
@@ -65,22 +60,16 @@ class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests):
             site_group.save()
             site_group.save()
 
 
         sites = (
         sites = (
-            Site(name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
-            Site(name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
+            baker.make('dcim.Site', name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
+            baker.make('dcim.Site', name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
         )
         )
-        Site.objects.bulk_create(sites)
 
 
-        circuit_types = (
-            CircuitType(name='Test Circuit Type 1', slug='test-circuit-type-1'),
-            CircuitType(name='Test Circuit Type 2', slug='test-circuit-type-2'),
-        )
-        CircuitType.objects.bulk_create(circuit_types)
+        circuit_types = baker.make('circuits.CircuitType', _quantity=2)
 
 
         circuits = (
         circuits = (
-            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
-            Circuit(provider=providers[1], type=circuit_types[1], cid='Circuit 2'),
+            baker.make('circuits.Circuit', provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
+            baker.make('circuits.Circuit', provider=providers[1], type=circuit_types[1], cid='Circuit 2'),
         )
         )
-        Circuit.objects.bulk_create(circuits)
 
 
         circuit_terminations = (
         circuit_terminations = (
             CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'),
             CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'),
@@ -141,11 +130,9 @@ class CircuitTypeTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        CircuitType.objects.bulk_create((
-            CircuitType(name='Circuit Type 1', slug='circuit-type-1', description='foobar1'),
-            CircuitType(name='Circuit Type 2', slug='circuit-type-2', description='foobar2'),
-            CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
-        ))
+        baker.make('circuits.CircuitType', name='Circuit Type 1', slug='circuit-type-1', description='foobar1')
+        baker.make('circuits.CircuitType', name='Circuit Type 2', slug='circuit-type-2', description='foobar2')
+        baker.make('circuits.CircuitType', name='Circuit Type 3', slug='circuit-type-3')
 
 
     def test_q(self):
     def test_q(self):
         params = {'q': 'foobar1'}
         params = {'q': 'foobar1'}
@@ -171,6 +158,7 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
+        # MPTT models: use .save() directly
         regions = (
         regions = (
             Region(name='Test Region 1', slug='test-region-1'),
             Region(name='Test Region 1', slug='test-region-1'),
             Region(name='Test Region 2', slug='test-region-2'),
             Region(name='Test Region 2', slug='test-region-2'),
@@ -188,12 +176,12 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
             site_group.save()
             site_group.save()
 
 
         sites = (
         sites = (
-            Site(name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
-            Site(name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
-            Site(name='Test Site 3', slug='test-site-3', region=regions[2], group=site_groups[2]),
+            baker.make('dcim.Site', name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
+            baker.make('dcim.Site', name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
+            baker.make('dcim.Site', name='Test Site 3', slug='test-site-3', region=regions[2], group=site_groups[2]),
         )
         )
-        Site.objects.bulk_create(sites)
 
 
+        # MPTT models: use .save() directly
         tenant_groups = (
         tenant_groups = (
             TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
             TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
             TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
             TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@@ -203,38 +191,22 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
             tenantgroup.save()
             tenantgroup.save()
 
 
         tenants = (
         tenants = (
-            Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
-            Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
-            Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
+            baker.make('tenancy.Tenant', name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
+            baker.make('tenancy.Tenant', name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
+            baker.make('tenancy.Tenant', name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
         )
         )
-        Tenant.objects.bulk_create(tenants)
 
 
-        circuit_types = (
-            CircuitType(name='Test Circuit Type 1', slug='test-circuit-type-1'),
-            CircuitType(name='Test Circuit Type 2', slug='test-circuit-type-2'),
-        )
-        CircuitType.objects.bulk_create(circuit_types)
+        circuit_types = baker.make('circuits.CircuitType', _quantity=2)
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=3)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], account='A'),
-            ProviderAccount(name='Provider Account 2', provider=providers[1], account='B'),
-            ProviderAccount(name='Provider Account 3', provider=providers[2], account='C'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
+        provider_accounts = [
+            baker.make('circuits.ProviderAccount', provider=providers[0]),
+            baker.make('circuits.ProviderAccount', provider=providers[1]),
+            baker.make('circuits.ProviderAccount', provider=providers[2]),
+        ]
 
 
-        provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[1]),
-            ProviderNetwork(name='Provider Network 2', provider=providers[1]),
-            ProviderNetwork(name='Provider Network 3', provider=providers[1]),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        provider_networks = baker.make('circuits.ProviderNetwork', provider=providers[1], _quantity=3)
 
 
         locations = (
         locations = (
             Location.objects.create(
             Location.objects.create(
@@ -447,42 +419,31 @@ class CircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        sites = (
-            Site(name='Site 1', slug='site-1'),
-            Site(name='Site 2', slug='site-2'),
-            Site(name='Site 3', slug='site-3'),
-        )
-        Site.objects.bulk_create(sites)
+        sites = baker.make('dcim.Site', _quantity=3)
 
 
-        circuit_types = (
-            CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
-        )
-        CircuitType.objects.bulk_create(circuit_types)
+        circuit_type = baker.make('circuits.CircuitType')
 
 
         providers = (
         providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
+            baker.make('circuits.Provider', name='Provider 1', slug='provider-1'),
+            baker.make('circuits.Provider', name='Provider 2', slug='provider-2'),
+            baker.make('circuits.Provider', name='Provider 3', slug='provider-3'),
         )
         )
-        Provider.objects.bulk_create(providers)
 
 
         provider_networks = (
         provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 2', provider=providers[1]),
-            ProviderNetwork(name='Provider Network 3', provider=providers[2]),
+            baker.make('circuits.ProviderNetwork', name='Provider Network 1', provider=providers[0]),
+            baker.make('circuits.ProviderNetwork', name='Provider Network 2', provider=providers[1]),
+            baker.make('circuits.ProviderNetwork', name='Provider Network 3', provider=providers[2]),
         )
         )
-        ProviderNetwork.objects.bulk_create(provider_networks)
 
 
-        circuits = (
-            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
-            Circuit(provider=providers[1], type=circuit_types[0], cid='Circuit 2'),
-            Circuit(provider=providers[2], type=circuit_types[0], cid='Circuit 3'),
-            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 4'),
-            Circuit(provider=providers[1], type=circuit_types[0], cid='Circuit 5'),
-            Circuit(provider=providers[2], type=circuit_types[0], cid='Circuit 6'),
-            Circuit(provider=providers[2], type=circuit_types[0], cid='Circuit 7'),
-        )
-        Circuit.objects.bulk_create(circuits)
+        circuits = [
+            baker.make('circuits.Circuit', provider=providers[0], type=circuit_type, cid='Circuit 1'),
+            baker.make('circuits.Circuit', provider=providers[1], type=circuit_type, cid='Circuit 2'),
+            baker.make('circuits.Circuit', provider=providers[2], type=circuit_type, cid='Circuit 3'),
+            baker.make('circuits.Circuit', provider=providers[0], type=circuit_type, cid='Circuit 4'),
+            baker.make('circuits.Circuit', provider=providers[1], type=circuit_type, cid='Circuit 5'),
+            baker.make('circuits.Circuit', provider=providers[2], type=circuit_type, cid='Circuit 6'),
+            baker.make('circuits.Circuit', provider=providers[2], type=circuit_type, cid='Circuit 7'),
+        ]
 
 
         circuit_terminations = (
         circuit_terminations = (
             CircuitTermination(
             CircuitTermination(
@@ -614,6 +575,7 @@ class CircuitGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
+        # MPTT models: use .save() directly
         tenant_groups = (
         tenant_groups = (
             TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
             TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
             TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
             TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@@ -623,17 +585,23 @@ class CircuitGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
             tenantgroup.save()
             tenantgroup.save()
 
 
         tenants = (
         tenants = (
-            Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
-            Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
-            Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
+            baker.make('tenancy.Tenant', name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
+            baker.make('tenancy.Tenant', name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
+            baker.make('tenancy.Tenant', name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
         )
         )
-        Tenant.objects.bulk_create(tenants)
 
 
-        CircuitGroup.objects.bulk_create((
-            CircuitGroup(name='Circuit Group 1', slug='circuit-group-1', description='foobar1', tenant=tenants[0]),
-            CircuitGroup(name='Circuit Group 2', slug='circuit-group-2', description='foobar2', tenant=tenants[1]),
-            CircuitGroup(name='Circuit Group 3', slug='circuit-group-3', tenant=tenants[1]),
-        ))
+        baker.make(
+            'circuits.CircuitGroup',
+            name='Circuit Group 1', slug='circuit-group-1', description='foobar1', tenant=tenants[0],
+        )
+        baker.make(
+            'circuits.CircuitGroup',
+            name='Circuit Group 2', slug='circuit-group-2', description='foobar2', tenant=tenants[1],
+        )
+        baker.make(
+            'circuits.CircuitGroup',
+            name='Circuit Group 3', slug='circuit-group-3', tenant=tenants[1],
+        )
 
 
     def test_q(self):
     def test_q(self):
         params = {'q': 'foobar1'}
         params = {'q': 'foobar1'}
@@ -673,56 +641,31 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        circuit_groups = (
-            CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
-            CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
-            CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
-        )
-        CircuitGroup.objects.bulk_create(circuit_groups)
+        circuit_groups = baker.make('circuits.CircuitGroup', _quantity=3)
 
 
-        providers = Provider.objects.bulk_create((
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        ))
-        circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
+        providers = baker.make('circuits.Provider', _quantity=3)
+        circuit_type = baker.make('circuits.CircuitType')
 
 
-        circuits = (
-            Circuit(cid='Circuit 1', provider=providers[0], type=circuit_type),
-            Circuit(cid='Circuit 2', provider=providers[1], type=circuit_type),
-            Circuit(cid='Circuit 3', provider=providers[2], type=circuit_type),
-        )
-        Circuit.objects.bulk_create(circuits)
+        circuits = [
+            baker.make('circuits.Circuit', cid=f'Circuit {i + 1}', provider=providers[i], type=circuit_type)
+            for i in range(3)
+        ]
 
 
-        provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 2', provider=providers[1]),
-            ProviderNetwork(name='Provider Network 3', provider=providers[2]),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        provider_networks = [
+            baker.make('circuits.ProviderNetwork', provider=providers[i])
+            for i in range(3)
+        ]
 
 
-        virtual_circuit_type = VirtualCircuitType.objects.create(
-            name='Virtual Circuit Type 1',
-            slug='virtual-circuit-type-1'
-        )
-        virtual_circuits = (
-            VirtualCircuit(
-                provider_network=provider_networks[0],
-                cid='Virtual Circuit 1',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_networks[1],
-                cid='Virtual Circuit 2',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_networks[2],
-                cid='Virtual Circuit 3',
-                type=virtual_circuit_type
-            ),
-        )
-        VirtualCircuit.objects.bulk_create(virtual_circuits)
+        virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
+        virtual_circuits = [
+            baker.make(
+                'circuits.VirtualCircuit',
+                provider_network=provider_networks[i],
+                cid=f'Virtual Circuit {i + 1}',
+                type=virtual_circuit_type,
+            )
+            for i in range(3)
+        ]
 
 
         assignments = (
         assignments = (
             CircuitGroupAssignment(
             CircuitGroupAssignment(
@@ -794,19 +737,11 @@ class ProviderNetworkTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=3)
 
 
-        provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[0], description='foobar1'),
-            ProviderNetwork(name='Provider Network 2', provider=providers[1], description='foobar2'),
-            ProviderNetwork(name='Provider Network 3', provider=providers[2]),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        baker.make('circuits.ProviderNetwork', name='Provider Network 1', provider=providers[0], description='foobar1')
+        baker.make('circuits.ProviderNetwork', name='Provider Network 2', provider=providers[1], description='foobar2')
+        baker.make('circuits.ProviderNetwork', name='Provider Network 3', provider=providers[2])
 
 
     def test_q(self):
     def test_q(self):
         params = {'q': 'foobar1'}
         params = {'q': 'foobar1'}
@@ -835,19 +770,20 @@ class ProviderAccountTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=3)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], description='foobar1', account='1234'),
-            ProviderAccount(name='Provider Account 2', provider=providers[1], description='foobar2', account='2345'),
-            ProviderAccount(name='Provider Account 3', provider=providers[2], account='3456'),
+        baker.make(
+            'circuits.ProviderAccount',
+            name='Provider Account 1', provider=providers[0], description='foobar1', account='1234',
+        )
+        baker.make(
+            'circuits.ProviderAccount',
+            name='Provider Account 2', provider=providers[1], description='foobar2', account='2345',
+        )
+        baker.make(
+            'circuits.ProviderAccount',
+            name='Provider Account 3', provider=providers[2], account='3456',
         )
         )
-        ProviderAccount.objects.bulk_create(provider_accounts)
 
 
     def test_q(self):
     def test_q(self):
         params = {'q': 'foobar1'}
         params = {'q': 'foobar1'}
@@ -880,11 +816,18 @@ class VirtualCircuitTypeTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        VirtualCircuitType.objects.bulk_create((
-            VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1', description='foobar1'),
-            VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2', description='foobar2'),
-            VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'),
-        ))
+        baker.make(
+            'circuits.VirtualCircuitType',
+            name='Virtual Circuit Type 1', slug='virtual-circuit-type-1', description='foobar1',
+        )
+        baker.make(
+            'circuits.VirtualCircuitType',
+            name='Virtual Circuit Type 2', slug='virtual-circuit-type-2', description='foobar2',
+        )
+        baker.make(
+            'circuits.VirtualCircuitType',
+            name='Virtual Circuit Type 3', slug='virtual-circuit-type-3',
+        )
 
 
     def test_q(self):
     def test_q(self):
         params = {'q': 'foobar1'}
         params = {'q': 'foobar1'}
@@ -910,6 +853,7 @@ class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
+        # MPTT models: use .save() directly
         tenant_groups = (
         tenant_groups = (
             TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
             TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
             TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
             TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@@ -919,41 +863,26 @@ class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
             tenantgroup.save()
             tenantgroup.save()
 
 
         tenants = (
         tenants = (
-            Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
-            Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
-            Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
+            baker.make('tenancy.Tenant', name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
+            baker.make('tenancy.Tenant', name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
+            baker.make('tenancy.Tenant', name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
         )
         )
-        Tenant.objects.bulk_create(tenants)
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=3)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], account='A'),
-            ProviderAccount(name='Provider Account 2', provider=providers[1], account='B'),
-            ProviderAccount(name='Provider Account 3', provider=providers[2], account='C'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
+        provider_accounts = [
+            baker.make('circuits.ProviderAccount', provider=providers[i])
+            for i in range(3)
+        ]
 
 
-        provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 2', provider=providers[1]),
-            ProviderNetwork(name='Provider Network 3', provider=providers[2]),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        provider_networks = [
+            baker.make('circuits.ProviderNetwork', provider=providers[i])
+            for i in range(3)
+        ]
 
 
-        virtual_circuit_types = (
-            VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'),
-            VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'),
-            VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'),
-        )
-        VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
+        virtual_circuit_types = baker.make('circuits.VirtualCircuitType', _quantity=3)
 
 
-        virutal_circuits = (
+        VirtualCircuit.objects.bulk_create((
             VirtualCircuit(
             VirtualCircuit(
                 provider_network=provider_networks[0],
                 provider_network=provider_networks[0],
                 provider_account=provider_accounts[0],
                 provider_account=provider_accounts[0],
@@ -981,8 +910,7 @@ class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
                 status=CircuitStatusChoices.STATUS_DEPROVISIONING,
                 status=CircuitStatusChoices.STATUS_DEPROVISIONING,
                 description='virtualcircuit3',
                 description='virtualcircuit3',
             ),
             ),
-        )
-        VirtualCircuit.objects.bulk_create(virutal_circuits)
+        ))
 
 
     def test_q(self):
     def test_q(self):
         params = {'q': 'virtualcircuit1'}
         params = {'q': 'virtualcircuit1'}
@@ -1045,99 +973,46 @@ class VirtualCircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
-        device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
-        device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
-        site = Site.objects.create(name='Site 1', slug='site-1')
-
-        devices = (
-            Device(site=site, name='Device 1', device_type=device_type, role=device_role),
-            Device(site=site, name='Device 2', device_type=device_type, role=device_role),
-            Device(site=site, name='Device 3', device_type=device_type, role=device_role),
-        )
-        Device.objects.bulk_create(devices)
-
-        virtual_interfaces = (
-            # Device 1
-            Interface(
-                device=devices[0],
-                name='eth0.1',
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[0],
-                name='eth0.2',
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            # Device 2
-            Interface(
-                device=devices[1],
-                name='eth0.1',
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[1],
-                name='eth0.2',
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            # Device 3
-            Interface(
-                device=devices[2],
-                name='eth0.1',
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[2],
-                name='eth0.2',
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-        )
-        Interface.objects.bulk_create(virtual_interfaces)
-
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
-        provider_networks = (
-            ProviderNetwork(provider=providers[0], name='Provider Network 1'),
-            ProviderNetwork(provider=providers[1], name='Provider Network 2'),
-            ProviderNetwork(provider=providers[2], name='Provider Network 3'),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
-        provider_accounts = (
-            ProviderAccount(provider=providers[0], account='Provider Account 1'),
-            ProviderAccount(provider=providers[1], account='Provider Account 2'),
-            ProviderAccount(provider=providers[2], account='Provider Account 3'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
-        virtual_circuit_type = VirtualCircuitType.objects.create(
-            name='Virtual Circuit Type 1',
-            slug='virtual-circuit-type-1'
-        )
-
-        virtual_circuits = (
-            VirtualCircuit(
-                provider_network=provider_networks[0],
-                provider_account=provider_accounts[0],
-                cid='Virtual Circuit 1',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_networks[1],
-                provider_account=provider_accounts[1],
-                cid='Virtual Circuit 2',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_networks[2],
-                provider_account=provider_accounts[2],
-                cid='Virtual Circuit 3',
-                type=virtual_circuit_type
-            ),
-        )
-        VirtualCircuit.objects.bulk_create(virtual_circuits)
+        site = baker.make('dcim.Site')
+        device_type = baker.make('dcim.DeviceType')
+        device_role = baker.make('dcim.DeviceRole')
+
+        devices = [
+            baker.make('dcim.Device', site=site, device_type=device_type, role=device_role, name=f'Device {i + 1}')
+            for i in range(3)
+        ]
+
+        virtual_interfaces = []
+        for device in devices:
+            for j in range(2):
+                virtual_interfaces.append(
+                    Interface.objects.create(
+                        device=device,
+                        name=f'eth0.{j + 1}',
+                        type=InterfaceTypeChoices.TYPE_VIRTUAL,
+                    )
+                )
+
+        providers = baker.make('circuits.Provider', _quantity=3)
+        provider_networks = [
+            baker.make('circuits.ProviderNetwork', provider=providers[i])
+            for i in range(3)
+        ]
+        provider_accounts = [
+            baker.make('circuits.ProviderAccount', provider=providers[i])
+            for i in range(3)
+        ]
+        virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
+
+        virtual_circuits = [
+            baker.make(
+                'circuits.VirtualCircuit',
+                provider_network=provider_networks[i],
+                provider_account=provider_accounts[i],
+                type=virtual_circuit_type,
+            )
+            for i in range(3)
+        ]
 
 
         virtual_circuit_terminations = (
         virtual_circuit_terminations = (
             VirtualCircuitTermination(
             VirtualCircuitTermination(

+ 6 - 13
netbox/circuits/tests/test_models.py

@@ -1,27 +1,20 @@
 from django.test import TestCase
 from django.test import TestCase
+from model_bakery import baker
 
 
-from circuits.models import Circuit, CircuitTermination, CircuitType, Provider, ProviderNetwork
-from dcim.models import Site
+from circuits.models import CircuitTermination
 
 
 
 
 class CircuitTerminationTestCase(TestCase):
 class CircuitTerminationTestCase(TestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
+        provider = baker.make('circuits.Provider')
 
 
-        cls.sites = (
-            Site.objects.create(name='Site 1', slug='site-1'),
-            Site.objects.create(name='Site 2', slug='site-2'),
-        )
+        cls.sites = baker.make('dcim.Site', _quantity=2)
 
 
-        cls.circuits = (
-            Circuit.objects.create(cid='Circuit 1', provider=provider, type=circuit_type),
-            Circuit.objects.create(cid='Circuit 2', provider=provider, type=circuit_type),
-        )
+        cls.circuits = baker.make('circuits.Circuit', provider=provider, _quantity=2)
 
 
-        cls.provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=provider)
+        cls.provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
 
 
     def test_circuit_termination_creation_populates_circuit_cache(self):
     def test_circuit_termination_creation_populates_circuit_cache(self):
         """
         """

+ 7 - 16
netbox/circuits/tests/test_signals.py

@@ -2,18 +2,14 @@ from types import SimpleNamespace
 from unittest.mock import MagicMock, patch
 from unittest.mock import MagicMock, patch
 
 
 from django.test import SimpleTestCase, TestCase
 from django.test import SimpleTestCase, TestCase
+from model_bakery import baker
 
 
 from circuits import signals
 from circuits import signals
-from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
+from circuits.models import CircuitTermination
 from dcim.models import (
 from dcim.models import (
     Cable,
     Cable,
     CablePath,
     CablePath,
-    Device,
-    DeviceRole,
-    DeviceType,
     Interface,
     Interface,
-    Manufacturer,
-    Site,
 )
 )
 
 
 
 
@@ -25,18 +21,13 @@ class RebuildCablepathsSignalTestCase(TestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        cls.site = Site.objects.create(name='Site', slug='site')
-        manufacturer = Manufacturer.objects.create(name='Manufacturer', slug='manufacturer')
-        device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type')
-        device_role = DeviceRole.objects.create(name='Device Role', slug='device-role')
-        cls.device = Device.objects.create(site=cls.site, device_type=device_type, role=device_role, name='Device 1')
-        provider = Provider.objects.create(name='Provider', slug='provider')
-        circuit_type = CircuitType.objects.create(name='Circuit Type', slug='circuit-type')
-        cls.circuit = Circuit.objects.create(provider=provider, type=circuit_type, cid='Circuit 1')
+        cls.site = baker.make('dcim.Site')
+        cls.device = baker.make('dcim.Device', site=cls.site)
+        cls.circuit = baker.make('circuits.Circuit')
 
 
     def test_saving_termination_rebuilds_peer_path(self):
     def test_saving_termination_rebuilds_peer_path(self):
         interface = Interface.objects.create(device=self.device, name='Interface 1')
         interface = Interface.objects.create(device=self.device, name='Interface 1')
-        site_z = Site.objects.create(name='Site Z', slug='site-z')
+        site_z = baker.make('dcim.Site')
         termination_a = CircuitTermination.objects.create(circuit=self.circuit, termination=self.site, term_side='A')
         termination_a = CircuitTermination.objects.create(circuit=self.circuit, termination=self.site, term_side='A')
         termination_z = CircuitTermination.objects.create(circuit=self.circuit, termination=site_z, term_side='Z')
         termination_z = CircuitTermination.objects.create(circuit=self.circuit, termination=site_z, term_side='Z')
         Cable(a_terminations=[interface], b_terminations=[termination_a]).save()
         Cable(a_terminations=[interface], b_terminations=[termination_a]).save()
@@ -56,7 +47,7 @@ class RebuildCablepathsSignalTestCase(TestCase):
         self.assertNotEqual(CablePath.objects.get().pk, original_path.pk)
         self.assertNotEqual(CablePath.objects.get().pk, original_path.pk)
 
 
     def test_deleting_termination_rebuilds_peer_path(self):
     def test_deleting_termination_rebuilds_peer_path(self):
-        site_z = Site.objects.create(name='Site Z', slug='site-z')
+        site_z = baker.make('dcim.Site')
         termination_a = CircuitTermination.objects.create(circuit=self.circuit, termination=self.site, term_side='A')
         termination_a = CircuitTermination.objects.create(circuit=self.circuit, termination=self.site, term_side='A')
         termination_z = CircuitTermination.objects.create(circuit=self.circuit, termination=site_z, term_side='Z')
         termination_z = CircuitTermination.objects.create(circuit=self.circuit, termination=site_z, term_side='Z')
 
 

+ 130 - 304
netbox/circuits/tests/test_views.py

@@ -3,13 +3,13 @@ import datetime
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.test import override_settings
 from django.test import override_settings
 from django.urls import reverse
 from django.urls import reverse
+from model_bakery import baker
 
 
 from circuits.choices import *
 from circuits.choices import *
 from circuits.models import *
 from circuits.models import *
 from core.models import ObjectType
 from core.models import ObjectType
 from dcim.choices import InterfaceTypeChoices
 from dcim.choices import InterfaceTypeChoices
-from dcim.models import Cable, Device, DeviceRole, DeviceType, Interface, Manufacturer, Site
-from ipam.models import ASN, RIR
+from dcim.models import Cable, Interface, Site
 from netbox.choices import ImportFormatChoices
 from netbox.choices import ImportFormatChoices
 from users.models import ObjectPermission
 from users.models import ObjectPermission
 from utilities.testing import ViewTestCases, create_tags, create_test_device
 from utilities.testing import ViewTestCases, create_tags, create_test_device
@@ -21,18 +21,10 @@ class ProviderTestCase(ViewTestCases.PrimaryObjectViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        rir = RIR.objects.create(name='RFC 6996', is_private=True)
-        asns = [
-            ASN(asn=65000 + i, rir=rir) for i in range(8)
-        ]
-        ASN.objects.bulk_create(asns)
+        rir = baker.make('ipam.RIR', is_private=True)
+        asns = [baker.make('ipam.ASN', asn=65000 + i, rir=rir) for i in range(8)]
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-            Provider(name='Provider 3', slug='provider-3'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=3)
         providers[0].asns.set([asns[0], asns[1]])
         providers[0].asns.set([asns[0], asns[1]])
         providers[1].asns.set([asns[2], asns[3]])
         providers[1].asns.set([asns[2], asns[3]])
         providers[2].asns.set([asns[4], asns[5]])
         providers[2].asns.set([asns[4], asns[5]])
@@ -72,13 +64,7 @@ class CircuitTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        circuit_types = (
-            CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
-            CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
-            CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
-        )
-
-        CircuitType.objects.bulk_create(circuit_types)
+        circuit_types = baker.make('circuits.CircuitType', _quantity=3)
 
 
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
@@ -120,40 +106,25 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        Site.objects.create(name='Site 1', slug='site-1')
+        baker.make('dcim.Site', name='Site 1', slug='site-1')
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=2)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
-            ProviderAccount(name='Provider Account 2', provider=providers[1], account='2345'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
+        provider_accounts = [
+            baker.make('circuits.ProviderAccount', provider=providers[0]),
+            baker.make('circuits.ProviderAccount', provider=providers[1]),
+        ]
 
 
-        circuittypes = (
-            CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
-            CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
-        )
-        CircuitType.objects.bulk_create(circuittypes)
+        circuittypes = baker.make('circuits.CircuitType', _quantity=2)
 
 
-        circuits = (
-            Circuit(
-                cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]
-            ),
-            Circuit(
-                cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]
-            ),
-            Circuit(
-                cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]
-            ),
+        circuits = baker.make(
+            'circuits.Circuit',
+            provider=providers[0],
+            provider_account=provider_accounts[0],
+            type=circuittypes[0],
+            _quantity=3,
         )
         )
 
 
-        Circuit.objects.bulk_create(circuits)
-
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
         cls.form_data = {
         cls.form_data = {
@@ -173,9 +144,9 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
 
 
         cls.csv_data = (
         cls.csv_data = (
             "cid,provider,provider_account,type,status",
             "cid,provider,provider_account,type,status",
-            "Circuit 4,Provider 1,Provider Account 1,Circuit Type 1,active",
-            "Circuit 5,Provider 1,Provider Account 1,Circuit Type 1,active",
-            "Circuit 6,Provider 1,Provider Account 1,Circuit Type 1,active",
+            f"Circuit 4,{providers[0].name},{provider_accounts[0].name},{circuittypes[0].name},active",
+            f"Circuit 5,{providers[0].name},{provider_accounts[0].name},{circuittypes[0].name},active",
+            f"Circuit 6,{providers[0].name},{provider_accounts[0].name},{circuittypes[0].name},active",
         )
         )
 
 
         cls.csv_update_data = (
         cls.csv_update_data = (
@@ -197,12 +168,11 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
         }
         }
 
 
     def test_circuit_type_display_colored(self):
     def test_circuit_type_display_colored(self):
-        circuit_type = CircuitType.objects.first()
+        circuit = Circuit.objects.first()
+        circuit_type = circuit.type
         circuit_type.color = '12ab34'
         circuit_type.color = '12ab34'
         circuit_type.save()
         circuit_type.save()
 
 
-        circuit = Circuit.objects.first()
-
         self.add_permissions('circuits.view_circuit')
         self.add_permissions('circuits.view_circuit')
         response = self.client.get(circuit.get_absolute_url())
         response = self.client.get(circuit.get_absolute_url())
 
 
@@ -217,8 +187,8 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
             [
             [
               {{
               {{
                 "cid": "Circuit 7",
                 "cid": "Circuit 7",
-                "provider": "Provider 1",
-                "type": "Circuit Type 1",
+                "provider": "{Provider.objects.first().name}",
+                "type": "{CircuitType.objects.first().name}",
                 "status": "active",
                 "status": "active",
                 "description": "Testing Import",
                 "description": "Testing Import",
                 "terminations": [
                 "terminations": [
@@ -266,18 +236,9 @@ class ProviderAccountTestCase(ViewTestCases.PrimaryObjectViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-        )
-        Provider.objects.bulk_create(providers)
+        providers = baker.make('circuits.Provider', _quantity=2)
 
 
-        provider_accounts = (
-            ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
-            ProviderAccount(name='Provider Account 2', provider=providers[0], account='2345'),
-            ProviderAccount(name='Provider Account 3', provider=providers[0], account='3456'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
+        provider_accounts = baker.make('circuits.ProviderAccount', provider=providers[0], _quantity=3)
 
 
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
@@ -292,9 +253,9 @@ class ProviderAccountTestCase(ViewTestCases.PrimaryObjectViewTestCase):
 
 
         cls.csv_data = (
         cls.csv_data = (
             "name,provider,account,description",
             "name,provider,account,description",
-            "Provider Account 4,Provider 1,4567,Foo",
-            "Provider Account 5,Provider 1,5678,Bar",
-            "Provider Account 6,Provider 1,6789,Baz",
+            f"Provider Account 4,{providers[0].name},4567,Foo",
+            f"Provider Account 5,{providers[0].name},5678,Bar",
+            f"Provider Account 6,{providers[0].name},6789,Baz",
         )
         )
 
 
         cls.csv_update_data = (
         cls.csv_update_data = (
@@ -317,19 +278,9 @@ class ProviderNetworkTestCase(ViewTestCases.PrimaryObjectViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        providers = (
-            Provider(name='Provider 1', slug='provider-1'),
-            Provider(name='Provider 2', slug='provider-2'),
-        )
-        Provider.objects.bulk_create(providers)
-
-        provider_networks = (
-            ProviderNetwork(name='Provider Network 1', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 2', provider=providers[0]),
-            ProviderNetwork(name='Provider Network 3', provider=providers[0]),
-        )
+        providers = baker.make('circuits.Provider', _quantity=2)
 
 
-        ProviderNetwork.objects.bulk_create(provider_networks)
+        provider_networks = baker.make('circuits.ProviderNetwork', provider=providers[0], _quantity=3)
 
 
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
@@ -343,9 +294,9 @@ class ProviderNetworkTestCase(ViewTestCases.PrimaryObjectViewTestCase):
 
 
         cls.csv_data = (
         cls.csv_data = (
             "name,provider,description",
             "name,provider,description",
-            "Provider Network 4,Provider 1,Foo",
-            "Provider Network 5,Provider 1,Bar",
-            "Provider Network 6,Provider 1,Baz",
+            f"Provider Network 4,{providers[0].name},Foo",
+            f"Provider Network 5,{providers[0].name},Bar",
+            f"Provider Network 6,{providers[0].name},Baz",
         )
         )
 
 
         cls.csv_update_data = (
         cls.csv_update_data = (
@@ -368,21 +319,11 @@ class CircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        sites = (
-            Site(name='Site 1', slug='site-1'),
-            Site(name='Site 2', slug='site-2'),
-            Site(name='Site 3', slug='site-3'),
-        )
-        Site.objects.bulk_create(sites)
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
+        sites = baker.make('dcim.Site', _quantity=3)
+        provider = baker.make('circuits.Provider')
+        circuittype = baker.make('circuits.CircuitType')
 
 
-        circuits = (
-            Circuit(cid='Circuit 1', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 2', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 3', provider=provider, type=circuittype),
-        )
-        Circuit.objects.bulk_create(circuits)
+        circuits = baker.make('circuits.Circuit', provider=provider, type=circuittype, _quantity=3)
 
 
         circuit_terminations = (
         circuit_terminations = (
             CircuitTermination(circuit=circuits[0], term_side='A', termination=sites[0]),
             CircuitTermination(circuit=circuits[0], term_side='A', termination=sites[0]),
@@ -404,8 +345,8 @@ class CircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase):
         site = sites[0].pk
         site = sites[0].pk
         cls.csv_data = (
         cls.csv_data = (
             "circuit,term_side,termination_type,termination_id,description",
             "circuit,term_side,termination_type,termination_id,description",
-            f"Circuit 3,A,dcim.site,{site},Foo",
-            f"Circuit 3,Z,dcim.site,{site},Bar",
+            f"{circuits[2].cid},A,dcim.site,{site},Foo",
+            f"{circuits[2].cid},Z,dcim.site,{site},Bar",
         )
         )
 
 
         cls.csv_update_data = (
         cls.csv_update_data = (
@@ -441,12 +382,7 @@ class CircuitGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        circuit_groups = (
-            CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
-            CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
-            CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
-        )
-        CircuitGroup.objects.bulk_create(circuit_groups)
+        circuit_groups = baker.make('circuits.CircuitGroup', _quantity=3)
 
 
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
@@ -490,24 +426,12 @@ class CircuitGroupAssignmentTestCase(
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        circuit_groups = (
-            CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
-            CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
-            CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
-            CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'),
-        )
-        CircuitGroup.objects.bulk_create(circuit_groups)
+        circuit_groups = baker.make('circuits.CircuitGroup', _quantity=4)
 
 
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
+        provider = baker.make('circuits.Provider')
+        circuittype = baker.make('circuits.CircuitType')
 
 
-        circuits = (
-            Circuit(cid='Circuit 1', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 2', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 3', provider=provider, type=circuittype),
-            Circuit(cid='Circuit 4', provider=provider, type=circuittype),
-        )
-        Circuit.objects.bulk_create(circuits)
+        circuits = baker.make('circuits.Circuit', provider=provider, type=circuittype, _quantity=4)
 
 
         assignments = (
         assignments = (
             CircuitGroupAssignment(
             CircuitGroupAssignment(
@@ -563,12 +487,7 @@ class VirtualCircuitTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase)
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
 
 
-        virtual_circuit_types = (
-            VirtualCircuitType(name='Virtual Circuit Type 1', slug='circuit-type-1'),
-            VirtualCircuitType(name='Virtual Circuit Type 2', slug='circuit-type-2'),
-            VirtualCircuitType(name='Virtual Circuit Type 3', slug='circuit-type-3'),
-        )
-        VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
+        virtual_circuit_types = baker.make('circuits.VirtualCircuitType', _quantity=3)
 
 
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
@@ -610,52 +529,27 @@ class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        provider_networks = (
-            ProviderNetwork(provider=provider, name='Provider Network 1'),
-            ProviderNetwork(provider=provider, name='Provider Network 2'),
-        )
-        ProviderNetwork.objects.bulk_create(provider_networks)
-        provider_accounts = (
-            ProviderAccount(provider=provider, account='Provider Account 1'),
-            ProviderAccount(provider=provider, account='Provider Account 2'),
-        )
-        ProviderAccount.objects.bulk_create(provider_accounts)
-        virtual_circuit_types = (
-            VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'),
-            VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'),
-        )
-        VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
-
-        virtual_circuits = (
-            VirtualCircuit(
-                provider_network=provider_networks[0],
-                provider_account=provider_accounts[0],
-                cid='Virtual Circuit 1',
-                type=virtual_circuit_types[0]
-            ),
-            VirtualCircuit(
-                provider_network=provider_networks[0],
-                provider_account=provider_accounts[0],
-                cid='Virtual Circuit 2',
-                type=virtual_circuit_types[0]
-            ),
-            VirtualCircuit(
-                provider_network=provider_networks[0],
-                provider_account=provider_accounts[0],
-                cid='Virtual Circuit 3',
-                type=virtual_circuit_types[0]
-            ),
+        provider = baker.make('circuits.Provider')
+        provider_networks = baker.make('circuits.ProviderNetwork', provider=provider, _quantity=2)
+        provider_accounts = baker.make('circuits.ProviderAccount', provider=provider, _quantity=2)
+        virtual_circuit_types = baker.make('circuits.VirtualCircuitType', _quantity=2)
+
+        virtual_circuits = baker.make(
+            'circuits.VirtualCircuit',
+            provider_network=provider_networks[0],
+            provider_account=provider_accounts[0],
+            type=virtual_circuit_types[0],
+            _quantity=3,
         )
         )
-        VirtualCircuit.objects.bulk_create(virtual_circuits)
 
 
         device = create_test_device('Device 1')
         device = create_test_device('Device 1')
-        interfaces = (
-            Interface(device=device, name='Interface 1', type=InterfaceTypeChoices.TYPE_VIRTUAL),
-            Interface(device=device, name='Interface 2', type=InterfaceTypeChoices.TYPE_VIRTUAL),
-            Interface(device=device, name='Interface 3', type=InterfaceTypeChoices.TYPE_VIRTUAL),
-        )
-        Interface.objects.bulk_create(interfaces)
+        interfaces = []
+        for i in range(3):
+            interfaces.append(
+                Interface.objects.create(
+                    device=device, name=f'Interface {i + 1}', type=InterfaceTypeChoices.TYPE_VIRTUAL
+                )
+            )
 
 
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
         tags = create_tags('Alpha', 'Bravo', 'Charlie')
 
 
@@ -673,16 +567,16 @@ class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
         cls.csv_data = (
         cls.csv_data = (
             "cid,provider_network,provider_account,type,status",
             "cid,provider_network,provider_account,type,status",
             (
             (
-                f"Virtual Circuit 4,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name},"
-                f"{CircuitStatusChoices.STATUS_PLANNED}"
+                f"Virtual Circuit 4,{provider_networks[0].name},{provider_accounts[0].account},"
+                f"{virtual_circuit_types[0].name},{CircuitStatusChoices.STATUS_PLANNED}"
             ),
             ),
             (
             (
-                f"Virtual Circuit 5,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name},"
-                f"{CircuitStatusChoices.STATUS_PLANNED}"
+                f"Virtual Circuit 5,{provider_networks[0].name},{provider_accounts[0].account},"
+                f"{virtual_circuit_types[0].name},{CircuitStatusChoices.STATUS_PLANNED}"
             ),
             ),
             (
             (
-                f"Virtual Circuit 6,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name},"
-                f"{CircuitStatusChoices.STATUS_PLANNED}"
+                f"Virtual Circuit 6,{provider_networks[0].name},{provider_accounts[0].account},"
+                f"{virtual_circuit_types[0].name},{CircuitStatusChoices.STATUS_PLANNED}"
             ),
             ),
         )
         )
 
 
@@ -718,8 +612,8 @@ class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
             [
             [
               {{
               {{
                 "cid": "Virtual Circuit 7",
                 "cid": "Virtual Circuit 7",
-                "provider_network": "Provider Network 1",
-                "type": "Virtual Circuit Type 1",
+                "provider_network": "{ProviderNetwork.objects.first().name}",
+                "type": "{VirtualCircuitType.objects.first().name}",
                 "status": "active",
                 "status": "active",
                 "terminations": [
                 "terminations": [
                   {{
                   {{
@@ -767,129 +661,58 @@ class VirtualCircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase)
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
-        manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
-        device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
-        device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
-        site = Site.objects.create(name='Site 1', slug='site-1')
-
-        devices = (
-            Device(site=site, name='hub', device_type=device_type, role=device_role),
-            Device(site=site, name='spoke1', device_type=device_type, role=device_role),
-            Device(site=site, name='spoke2', device_type=device_type, role=device_role),
-            Device(site=site, name='spoke3', device_type=device_type, role=device_role),
-        )
-        Device.objects.bulk_create(devices)
-
-        physical_interfaces = (
-            Interface(device=devices[0], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-            Interface(device=devices[1], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-            Interface(device=devices[2], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-            Interface(device=devices[3], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
-        )
-        Interface.objects.bulk_create(physical_interfaces)
-
-        virtual_interfaces = (
-            # Point-to-point VCs
-            Interface(
-                device=devices[0],
-                name='eth0.1',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[0],
-                name='eth0.2',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[0],
-                name='eth0.3',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[1],
-                name='eth0.1',
-                parent=physical_interfaces[1],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[2],
-                name='eth0.1',
-                parent=physical_interfaces[2],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[3],
-                name='eth0.1',
-                parent=physical_interfaces[3],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
+        site = baker.make('dcim.Site')
+        device_type = baker.make('dcim.DeviceType')
+        device_role = baker.make('dcim.DeviceRole')
 
 
-            # Hub and spoke VCs
-            Interface(
-                device=devices[0],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[1],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[2],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-            Interface(
-                device=devices[3],
-                name='eth0.9',
-                parent=physical_interfaces[0],
-                type=InterfaceTypeChoices.TYPE_VIRTUAL
-            ),
-        )
-        Interface.objects.bulk_create(virtual_interfaces)
-
-        provider = Provider.objects.create(name='Provider 1', slug='provider-1')
-        provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1')
-        provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1')
-        virtual_circuit_type = VirtualCircuitType.objects.create(
-            name='Virtual Circuit Type 1',
-            slug='virtual-circuit-type-1'
-        )
+        devices = [
+            baker.make('dcim.Device', site=site, device_type=device_type, role=device_role, name=name)
+            for name in ('hub', 'spoke1', 'spoke2', 'spoke3')
+        ]
 
 
-        virtual_circuits = (
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 1',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 2',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 3',
-                type=virtual_circuit_type
-            ),
-            VirtualCircuit(
-                provider_network=provider_network,
-                provider_account=provider_account,
-                cid='Virtual Circuit 4',
-                type=virtual_circuit_type
-            ),
+        physical_interfaces = []
+        for device in devices:
+            physical_interfaces.append(
+                Interface.objects.create(device=device, name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED)
+            )
+
+        virtual_interfaces = []
+        # Point-to-point VCs
+        for i, (device, parent) in enumerate(zip(devices, physical_interfaces)):
+            count = 3 if i == 0 else 1
+            for j in range(count):
+                virtual_interfaces.append(
+                    Interface.objects.create(
+                        device=device,
+                        name=f'eth0.{j + 1}',
+                        parent=parent,
+                        type=InterfaceTypeChoices.TYPE_VIRTUAL,
+                    )
+                )
+
+        # Hub and spoke VCs
+        for device in devices:
+            virtual_interfaces.append(
+                Interface.objects.create(
+                    device=device,
+                    name='eth0.9',
+                    parent=physical_interfaces[0],
+                    type=InterfaceTypeChoices.TYPE_VIRTUAL,
+                )
+            )
+
+        provider = baker.make('circuits.Provider')
+        provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
+        provider_account = baker.make('circuits.ProviderAccount', provider=provider)
+        virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
+
+        virtual_circuits = baker.make(
+            'circuits.VirtualCircuit',
+            provider_network=provider_network,
+            provider_account=provider_account,
+            type=virtual_circuit_type,
+            _quantity=4,
         )
         )
-        VirtualCircuit.objects.bulk_create(virtual_circuits)
 
 
         virtual_circuit_terminations = (
         virtual_circuit_terminations = (
             VirtualCircuitTermination(
             VirtualCircuitTermination(
@@ -931,12 +754,15 @@ class VirtualCircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase)
             'interface': virtual_interfaces[6].pk
             'interface': virtual_interfaces[6].pk
         }
         }
 
 
+        vc_cid = virtual_circuits[3].cid
+        hub = VirtualCircuitTerminationRoleChoices.ROLE_HUB
+        spoke = VirtualCircuitTerminationRoleChoices.ROLE_SPOKE
         cls.csv_data = (
         cls.csv_data = (
             "virtual_circuit,role,interface,description",
             "virtual_circuit,role,interface,description",
-            f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_HUB},{virtual_interfaces[6].pk},Hub",
-            f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[7].pk},Spoke 1",
-            f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[8].pk},Spoke 2",
-            f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[9].pk},Spoke 3",
+            f"{vc_cid},{hub},{virtual_interfaces[6].pk},Hub",
+            f"{vc_cid},{spoke},{virtual_interfaces[7].pk},Spoke 1",
+            f"{vc_cid},{spoke},{virtual_interfaces[8].pk},Spoke 2",
+            f"{vc_cid},{spoke},{virtual_interfaces[9].pk},Spoke 3",
         )
         )
 
 
         cls.csv_update_data = (
         cls.csv_update_data = (

+ 2 - 0
netbox/netbox/configuration_testing.py

@@ -47,6 +47,8 @@ SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 
 
 DEFAULT_PERMISSIONS = {}
 DEFAULT_PERMISSIONS = {}
 
 
+MPTT_ALLOW_TESTING_GENERATORS = True
+
 API_TOKEN_PEPPERS = {
 API_TOKEN_PEPPERS = {
     1: 'TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE',
     1: 'TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE',
 }
 }

+ 1 - 0
netbox/netbox/settings.py

@@ -144,6 +144,7 @@ JINJA2_FILTERS = getattr(configuration, 'JINJA2_FILTERS', {})
 LANGUAGE_CODE = getattr(configuration, 'DEFAULT_LANGUAGE', 'en-us')
 LANGUAGE_CODE = getattr(configuration, 'DEFAULT_LANGUAGE', 'en-us')
 LANGUAGE_COOKIE_PATH = CSRF_COOKIE_PATH
 LANGUAGE_COOKIE_PATH = CSRF_COOKIE_PATH
 LOGGING = getattr(configuration, 'LOGGING', {})
 LOGGING = getattr(configuration, 'LOGGING', {})
+MPTT_ALLOW_TESTING_GENERATORS = getattr(configuration, 'MPTT_ALLOW_TESTING_GENERATORS', False)
 LOGIN_PERSISTENCE = getattr(configuration, 'LOGIN_PERSISTENCE', False)
 LOGIN_PERSISTENCE = getattr(configuration, 'LOGIN_PERSISTENCE', False)
 LOGIN_REQUIRED = getattr(configuration, 'LOGIN_REQUIRED', True)
 LOGIN_REQUIRED = getattr(configuration, 'LOGIN_REQUIRED', True)
 LOGIN_TIMEOUT = getattr(configuration, 'LOGIN_TIMEOUT', None)
 LOGIN_TIMEOUT = getattr(configuration, 'LOGIN_TIMEOUT', None)