content: from django.urls import reverse
  
  from dcim.models import Site
  from tenancy.choices import *
  from tenancy.models import *
  from utilities.testing import APITestCase, APIViewTestCases
  
  
  class AppTest(APITestCase):
  
      def test_root(self):
  
          url = reverse('tenancy-api:api-root')
          response = self.client.get('{}?format=api'.format(url), **self.header)
  
          self.assertEqual(response.status_code, 200)
  
  
  class TenantGroupTest(APIViewTestCases.APIViewTestCase):
      model = TenantGroup
      brief_fields = ['_depth', 'description', 'display', 'id', 'name', 'slug', 'tenant_count', 'url']
      bulk_update_data = {
          'description': 'New description',
          'comments': 'New Comment',
      }
  
      @classmethod
      def setUpTestData(cls):
  
          parent_tenant_groups = (
              TenantGroup.objects.create(name='Parent Tenant Group 1', slug='parent-tenant-group-1'),
              TenantGroup.objects.create(
                  name='Parent Tenant Group 2', slug='parent-tenant-group-2', comments='Parent Group 2 comment',
              ),
          )
  
          TenantGroup.objects.create(name='Tenant Group 1', slug='tenant-group-1', parent=parent_tenant_groups[0])
          TenantGroup.objects.create(name='Tenant Group 2', slug='tenant-group-2', parent=parent_tenant_groups[0])
          TenantGroup.objects.create(
              name='Tenant Group 3', slug='tenant-group-3', parent=parent_tenant_groups[0],
              comments='Tenant Group 3 comment'
          )
  
          cls.create_data = [
              {
                  'name': 'Tenant Group 4',
                  'slug': 'tenant-group-4',
                  'parent': parent_tenant_groups[1].pk,
              },
              {
                  'name': 'Tenant Group 5',
                  'slug': 'tenant-group-5',
                  'parent': parent_tenant_groups[1].pk,
              },
              {
                  'name': 'Tenant Group 6',
                  'slug': 'tenant-group-6',
                  'parent': parent_tenant_groups[1].pk,
                  'comments': 'Tenant Group 6 comment',
              },
          ]
  
  
  class TenantTest(APIViewTestCases.APIViewTestCase):
      model = Tenant
      brief_fields = ['description', 'display', 'id', 'name', 'slug', 'url']
      bulk_update_data = {
          'group': None,
          'description': 'New description',
      }
  
      @classmethod
      def setUpTestData(cls):
  
          tenant_groups = (
              TenantGroup.objects.create(name='Tenant Group 1', slug='tenant-group-1'),
              TenantGroup.objects.create(name='Tenant Group 2', slug='tenant-group-2'),
          )
  
          tenants = (
              Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
              Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[0]),
              Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[0]),
          )
          Tenant.objects.bulk_create(tenants)
  
          cls.create_data = [
              {
                  'name': 'Tenant 4',
                  'slug': 'tenant-4',
                  'group': tenant_groups[1].pk,
              },
              {
                  'name': 'Tenant 5',
                  'slug': 'tenant-5',
                  'group': tenant_groups[1].pk,
              },
              {
                  'name': 'Tenant 6',
                  'slug': 'tenant-6',
                  'group': tenant_groups[1].pk,
              },
          ]
  
  
  class ContactGroupTest(APIViewTestCases.APIViewTestCase):
      model = ContactGroup
      brief_fields = ['_depth', 'contact_count', 'description', 'display', 'id', 'name', 'slug', 'url']
      bulk_update_data = {
          'description': 'New description',
      }
  
      @classmethod
      def setUpTestData(cls):
  
          parent_contact_groups = (
              ContactGroup.objects.create(
                  name='Parent Contact Group 1', slug='parent-contact-group-1', comments='Parent 1 comment'
              ),
              ContactGroup.objects.create(name='Parent Contact Group 2', slug='parent-contact-group-2'),
          )
  
          ContactGroup.objects.create(name='Contact Group 1', slug='contact-group-1', parent=parent_contact_groups[0])
          ContactGroup.objects.create(name='Contact Group 2', slug='contact-group-2', parent=parent_contact_groups[0])
          ContactGroup.objects.create(
              name='Contact Group 3', slug='contact-group-3', parent=parent_contact_groups[0],
              comments='Child Group 3 comment',
          )
  
          cls.create_data = [
              {
                  'name': 'Contact Group 4',
                  'slug': 'contact-group-4',
                  'parent': parent_contact_groups[1].pk,
              },
              {
                  'name': 'Contact Group 5',
                  'slug': 'contact-group-5',
                  'parent': parent_contact_groups[1].pk,
                  'comments': '',
              },
              {
                  'name': 'Contact Group 6',
                  'slug': 'contact-group-6',
                  'parent': parent_contact_groups[1].pk,
                  'comments': 'Child Group 6 comment',
              },
          ]
  
  
  class ContactRoleTest(APIViewTestCases.APIViewTestCase):
      model = ContactRole
      brief_fields = ['description', 'display', 'id', 'name', 'slug', 'url']
      create_data = [
          {
              'name': 'Contact Role 4',
              'slug': 'contact-role-4',
          },
          {
              'name': 'Contact Role 5',
              'slug': 'contact-role-5',
          },
          {
              'name': 'Contact Role 6',
              'slug': 'contact-role-6',
          },
      ]
      bulk_update_data = {
          'description': 'New description',
      }
  
      @classmethod
      def setUpTestData(cls):
  
          contact_roles = (
              ContactRole(name='Contact Role 1', slug='contact-role-1'),
              ContactRole(name='Contact Role 2', slug='contact-role-2'),
              ContactRole(name='Contact Role 3', slug='contact-role-3'),
          )
          ContactRole.objects.bulk_create(contact_roles)
  
  
  class ContactTest(APIViewTestCases.APIViewTestCase):
      model = Contact
      brief_fields = ['description', 'display', 'id', 'name', 'url']
      bulk_update_data = {
          'groups': [],
          'comments': 'New comments',
      }
  
      @classmethod
      def setUpTestData(cls):
  
          contact_groups = (
              ContactGroup.objects.create(name='Contact Group 1', slug='contact-group-1'),
              ContactGroup.objects.create(name='Contact Group 2', slug='contact-group-2'),
          )
  
          contacts = (
              Contact(name='Contact 1'),
              Contact(name='Contact 2'),
              Contact(name='Contact 3'),
          )
          Contact.objects.bulk_create(contacts)
          contacts[0].groups.add(contact_groups[0])
          contacts[1].groups.add(contact_groups[0])
          contacts[2].groups.add(contact_groups[0])
  
          cls.create_data = [
              {
                  'name': 'Contact 4',
                  'groups': [contact_groups[1].pk],
              },
              {
                  'name': 'Contact 5',
              },
              {
                  'name': 'Contact 6',
              },
          ]
  
  
  class ContactAssignmentTest(APIViewTestCases.APIViewTestCase):
      model = ContactAssignment
      brief_fields = ['contact', 'display', 'id', 'priority', 'role', 'url']
      bulk_update_data = {
          'priority': ContactPriorityChoices.PRIORITY_INACTIVE,
      }
      user_permissions = ('tenancy.view_contact', )
  
      @classmethod
      def setUpTestData(cls):
  
          sites = (
              Site(name='Site 1', slug='site-1'),
              Site(name='Site 2', slug='site-2'),
          )
          Site.objects.bulk_create(sites)
  
          contacts = (
              Contact(name='Contact 1'),
              Contact(name='Contact 2'),
              Contact(name='Contact 3'),
              Contact(name='Contact 4'),
              Contact(name='Contact 5'),
              Contact(name='Contact 6'),
          )
          Contact.objects.bulk_create(contacts)
  
          contact_roles = (
              ContactRole(name='Contact Role 1', slug='contact-role-1'),
              ContactRole(name='Contact Role 2', slug='contact-role-2'),
              ContactRole(name='Contact Role 3', slug='contact-role-3'),
          )
          ContactRole.objects.bulk_create(contact_roles)
  
          contact_assignments = (
              ContactAssignment(
                  object=sites[0],
                  contact=contacts[0],
                  role=contact_roles[0],
                  priority=ContactPriorityChoices.PRIORITY_PRIMARY,
              ),
              ContactAssignment(
                  object=sites[0],
                  contact=contacts[1],
                  role=contact_roles[1],
                  priority=ContactPriorityChoices.PRIORITY_SECONDARY,
              ),
              ContactAssignment(
                  object=sites[0],
                  contact=contacts[2],
                  role=contact_roles[2],
                  priority=ContactPriorityChoices.PRIORITY_TERTIARY,
              ),
          )
          ContactAssignment.objects.bulk_create(contact_assignments)
  
          cls.create_data = [
              {
                  'object_type': 'dcim.site',
                  'object_id': sites[1].pk,
                  'contact': contacts[3].pk,
                  'role': contact_roles[0].pk,
                  'priority': ContactPriorityChoices.PRIORITY_PRIMARY,
              },
              {
                  'object_type': 'dcim.site',
                  'object_id': sites[1].pk,
                  'contact': contacts[4].pk,
                  'role': contact_roles[1].pk,
                  'priority': ContactPriorityChoices.PRIORITY_SECONDARY,
              },
              {
                  'object_type': 'dcim.site',
                  'object_id': sites[1].pk,
                  'contact': contacts[5].pk,
                  'role': contact_roles[2].pk,
                  'priority': ContactPriorityChoices.PRIORITY_TERTIARY,
              },
          ]
  