test_api.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. from django.urls import reverse
  2. from rest_framework import status
  3. from tenancy.models import Tenant, TenantGroup
  4. from utilities.testing import APITestCase
  5. class AppTest(APITestCase):
  6. def test_root(self):
  7. url = reverse('tenancy-api:api-root')
  8. response = self.client.get('{}?format=api'.format(url), **self.header)
  9. self.assertEqual(response.status_code, 200)
  10. def test_choices(self):
  11. url = reverse('tenancy-api:field-choice-list')
  12. response = self.client.get(url, **self.header)
  13. self.assertEqual(response.status_code, 200)
  14. class TenantGroupTest(APITestCase):
  15. def setUp(self):
  16. super().setUp()
  17. self.tenantgroup1 = TenantGroup.objects.create(name='Test Tenant Group 1', slug='test-tenant-group-1')
  18. self.tenantgroup2 = TenantGroup.objects.create(name='Test Tenant Group 2', slug='test-tenant-group-2')
  19. self.tenantgroup3 = TenantGroup.objects.create(name='Test Tenant Group 3', slug='test-tenant-group-3')
  20. def test_get_tenantgroup(self):
  21. url = reverse('tenancy-api:tenantgroup-detail', kwargs={'pk': self.tenantgroup1.pk})
  22. response = self.client.get(url, **self.header)
  23. self.assertEqual(response.data['name'], self.tenantgroup1.name)
  24. def test_list_tenantgroups(self):
  25. url = reverse('tenancy-api:tenantgroup-list')
  26. response = self.client.get(url, **self.header)
  27. self.assertEqual(response.data['count'], 3)
  28. def test_list_tenantgroups_brief(self):
  29. url = reverse('tenancy-api:tenantgroup-list')
  30. response = self.client.get('{}?brief=1'.format(url), **self.header)
  31. self.assertEqual(
  32. sorted(response.data['results'][0]),
  33. ['id', 'name', 'slug', 'tenant_count', 'url']
  34. )
  35. def test_create_tenantgroup(self):
  36. data = {
  37. 'name': 'Test Tenant Group 4',
  38. 'slug': 'test-tenant-group-4',
  39. }
  40. url = reverse('tenancy-api:tenantgroup-list')
  41. response = self.client.post(url, data, format='json', **self.header)
  42. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  43. self.assertEqual(TenantGroup.objects.count(), 4)
  44. tenantgroup4 = TenantGroup.objects.get(pk=response.data['id'])
  45. self.assertEqual(tenantgroup4.name, data['name'])
  46. self.assertEqual(tenantgroup4.slug, data['slug'])
  47. def test_create_tenantgroup_bulk(self):
  48. data = [
  49. {
  50. 'name': 'Test Tenant Group 4',
  51. 'slug': 'test-tenant-group-4',
  52. },
  53. {
  54. 'name': 'Test Tenant Group 5',
  55. 'slug': 'test-tenant-group-5',
  56. },
  57. {
  58. 'name': 'Test Tenant Group 6',
  59. 'slug': 'test-tenant-group-6',
  60. },
  61. ]
  62. url = reverse('tenancy-api:tenantgroup-list')
  63. response = self.client.post(url, data, format='json', **self.header)
  64. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  65. self.assertEqual(TenantGroup.objects.count(), 6)
  66. self.assertEqual(response.data[0]['name'], data[0]['name'])
  67. self.assertEqual(response.data[1]['name'], data[1]['name'])
  68. self.assertEqual(response.data[2]['name'], data[2]['name'])
  69. def test_update_tenantgroup(self):
  70. data = {
  71. 'name': 'Test Tenant Group X',
  72. 'slug': 'test-tenant-group-x',
  73. }
  74. url = reverse('tenancy-api:tenantgroup-detail', kwargs={'pk': self.tenantgroup1.pk})
  75. response = self.client.put(url, data, format='json', **self.header)
  76. self.assertHttpStatus(response, status.HTTP_200_OK)
  77. self.assertEqual(TenantGroup.objects.count(), 3)
  78. tenantgroup1 = TenantGroup.objects.get(pk=response.data['id'])
  79. self.assertEqual(tenantgroup1.name, data['name'])
  80. self.assertEqual(tenantgroup1.slug, data['slug'])
  81. def test_delete_tenantgroup(self):
  82. url = reverse('tenancy-api:tenantgroup-detail', kwargs={'pk': self.tenantgroup1.pk})
  83. response = self.client.delete(url, **self.header)
  84. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  85. self.assertEqual(TenantGroup.objects.count(), 2)
  86. class TenantTest(APITestCase):
  87. def setUp(self):
  88. super().setUp()
  89. self.tenantgroup1 = TenantGroup.objects.create(name='Test Tenant Group 1', slug='test-tenant-group-1')
  90. self.tenantgroup2 = TenantGroup.objects.create(name='Test Tenant Group 2', slug='test-tenant-group-2')
  91. self.tenant1 = Tenant.objects.create(name='Test Tenant 1', slug='test-tenant-1', group=self.tenantgroup1)
  92. self.tenant2 = Tenant.objects.create(name='Test Tenant 2', slug='test-tenant-2', group=self.tenantgroup1)
  93. self.tenant3 = Tenant.objects.create(name='Test Tenant 3', slug='test-tenant-3', group=self.tenantgroup1)
  94. def test_get_tenant(self):
  95. url = reverse('tenancy-api:tenant-detail', kwargs={'pk': self.tenant1.pk})
  96. response = self.client.get(url, **self.header)
  97. self.assertEqual(response.data['name'], self.tenant1.name)
  98. def test_list_tenants(self):
  99. url = reverse('tenancy-api:tenant-list')
  100. response = self.client.get(url, **self.header)
  101. self.assertEqual(response.data['count'], 3)
  102. def test_list_tenants_brief(self):
  103. url = reverse('tenancy-api:tenant-list')
  104. response = self.client.get('{}?brief=1'.format(url), **self.header)
  105. self.assertEqual(
  106. sorted(response.data['results'][0]),
  107. ['id', 'name', 'slug', 'url']
  108. )
  109. def test_create_tenant(self):
  110. data = {
  111. 'name': 'Test Tenant 4',
  112. 'slug': 'test-tenant-4',
  113. 'group': self.tenantgroup1.pk,
  114. }
  115. url = reverse('tenancy-api:tenant-list')
  116. response = self.client.post(url, data, format='json', **self.header)
  117. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  118. self.assertEqual(Tenant.objects.count(), 4)
  119. tenant4 = Tenant.objects.get(pk=response.data['id'])
  120. self.assertEqual(tenant4.name, data['name'])
  121. self.assertEqual(tenant4.slug, data['slug'])
  122. self.assertEqual(tenant4.group_id, data['group'])
  123. def test_create_tenant_bulk(self):
  124. data = [
  125. {
  126. 'name': 'Test Tenant 4',
  127. 'slug': 'test-tenant-4',
  128. },
  129. {
  130. 'name': 'Test Tenant 5',
  131. 'slug': 'test-tenant-5',
  132. },
  133. {
  134. 'name': 'Test Tenant 6',
  135. 'slug': 'test-tenant-6',
  136. },
  137. ]
  138. url = reverse('tenancy-api:tenant-list')
  139. response = self.client.post(url, data, format='json', **self.header)
  140. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  141. self.assertEqual(Tenant.objects.count(), 6)
  142. self.assertEqual(response.data[0]['name'], data[0]['name'])
  143. self.assertEqual(response.data[1]['name'], data[1]['name'])
  144. self.assertEqual(response.data[2]['name'], data[2]['name'])
  145. def test_update_tenant(self):
  146. data = {
  147. 'name': 'Test Tenant X',
  148. 'slug': 'test-tenant-x',
  149. 'group': self.tenantgroup2.pk,
  150. }
  151. url = reverse('tenancy-api:tenant-detail', kwargs={'pk': self.tenant1.pk})
  152. response = self.client.put(url, data, format='json', **self.header)
  153. self.assertHttpStatus(response, status.HTTP_200_OK)
  154. self.assertEqual(Tenant.objects.count(), 3)
  155. tenant1 = Tenant.objects.get(pk=response.data['id'])
  156. self.assertEqual(tenant1.name, data['name'])
  157. self.assertEqual(tenant1.slug, data['slug'])
  158. self.assertEqual(tenant1.group_id, data['group'])
  159. def test_delete_tenant(self):
  160. url = reverse('tenancy-api:tenant-detail', kwargs={'pk': self.tenant1.pk})
  161. response = self.client.delete(url, **self.header)
  162. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  163. self.assertEqual(Tenant.objects.count(), 2)