test_api.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. from rest_framework import status
  2. from rest_framework.test import APITestCase
  3. from django.contrib.auth.models import User
  4. from django.urls import reverse
  5. from dcim.models import Site
  6. from circuits.models import Circuit, CircuitTermination, CircuitType, Provider, TERM_SIDE_A, TERM_SIDE_Z
  7. from users.models import Token
  8. class ProviderTest(APITestCase):
  9. def setUp(self):
  10. user = User.objects.create(username='testuser', is_superuser=True)
  11. token = Token.objects.create(user=user)
  12. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  13. self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1')
  14. self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2')
  15. self.provider3 = Provider.objects.create(name='Test Provider 3', slug='test-provider-3')
  16. def test_get_provider(self):
  17. url = reverse('circuits-api:provider-detail', kwargs={'pk': self.provider1.pk})
  18. response = self.client.get(url, **self.header)
  19. self.assertEqual(response.data['name'], self.provider1.name)
  20. def test_list_providers(self):
  21. url = reverse('circuits-api:provider-list')
  22. response = self.client.get(url, **self.header)
  23. self.assertEqual(response.data['count'], 3)
  24. def test_create_provider(self):
  25. data = {
  26. 'name': 'Test Provider 4',
  27. 'slug': 'test-provider-4',
  28. }
  29. url = reverse('circuits-api:provider-list')
  30. response = self.client.post(url, data, **self.header)
  31. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  32. self.assertEqual(Provider.objects.count(), 4)
  33. provider4 = Provider.objects.get(pk=response.data['id'])
  34. self.assertEqual(provider4.name, data['name'])
  35. self.assertEqual(provider4.slug, data['slug'])
  36. def test_update_provider(self):
  37. data = {
  38. 'name': 'Test Provider X',
  39. 'slug': 'test-provider-x',
  40. }
  41. url = reverse('circuits-api:provider-detail', kwargs={'pk': self.provider1.pk})
  42. response = self.client.put(url, data, **self.header)
  43. self.assertEqual(response.status_code, status.HTTP_200_OK)
  44. self.assertEqual(Provider.objects.count(), 3)
  45. provider1 = Provider.objects.get(pk=response.data['id'])
  46. self.assertEqual(provider1.name, data['name'])
  47. self.assertEqual(provider1.slug, data['slug'])
  48. def test_delete_provider(self):
  49. url = reverse('circuits-api:provider-detail', kwargs={'pk': self.provider1.pk})
  50. response = self.client.delete(url, **self.header)
  51. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
  52. self.assertEqual(Provider.objects.count(), 2)
  53. class CircuitTypeTest(APITestCase):
  54. def setUp(self):
  55. user = User.objects.create(username='testuser', is_superuser=True)
  56. token = Token.objects.create(user=user)
  57. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  58. self.circuittype1 = CircuitType.objects.create(name='Test Circuit Type 1', slug='test-circuit-type-1')
  59. self.circuittype2 = CircuitType.objects.create(name='Test Circuit Type 2', slug='test-circuit-type-2')
  60. self.circuittype3 = CircuitType.objects.create(name='Test Circuit Type 3', slug='test-circuit-type-3')
  61. def test_get_circuittype(self):
  62. url = reverse('circuits-api:circuittype-detail', kwargs={'pk': self.circuittype1.pk})
  63. response = self.client.get(url, **self.header)
  64. self.assertEqual(response.data['name'], self.circuittype1.name)
  65. def test_list_circuittypes(self):
  66. url = reverse('circuits-api:circuittype-list')
  67. response = self.client.get(url, **self.header)
  68. self.assertEqual(response.data['count'], 3)
  69. def test_create_circuittype(self):
  70. data = {
  71. 'name': 'Test Circuit Type 4',
  72. 'slug': 'test-circuit-type-4',
  73. }
  74. url = reverse('circuits-api:circuittype-list')
  75. response = self.client.post(url, data, **self.header)
  76. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  77. self.assertEqual(CircuitType.objects.count(), 4)
  78. circuittype4 = CircuitType.objects.get(pk=response.data['id'])
  79. self.assertEqual(circuittype4.name, data['name'])
  80. self.assertEqual(circuittype4.slug, data['slug'])
  81. def test_update_circuittype(self):
  82. data = {
  83. 'name': 'Test Circuit Type X',
  84. 'slug': 'test-circuit-type-x',
  85. }
  86. url = reverse('circuits-api:circuittype-detail', kwargs={'pk': self.circuittype1.pk})
  87. response = self.client.put(url, data, **self.header)
  88. self.assertEqual(response.status_code, status.HTTP_200_OK)
  89. self.assertEqual(CircuitType.objects.count(), 3)
  90. circuittype1 = CircuitType.objects.get(pk=response.data['id'])
  91. self.assertEqual(circuittype1.name, data['name'])
  92. self.assertEqual(circuittype1.slug, data['slug'])
  93. def test_delete_circuittype(self):
  94. url = reverse('circuits-api:circuittype-detail', kwargs={'pk': self.circuittype1.pk})
  95. response = self.client.delete(url, **self.header)
  96. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
  97. self.assertEqual(CircuitType.objects.count(), 2)
  98. class CircuitTest(APITestCase):
  99. def setUp(self):
  100. user = User.objects.create(username='testuser', is_superuser=True)
  101. token = Token.objects.create(user=user)
  102. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  103. self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1')
  104. self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2')
  105. self.circuittype1 = CircuitType.objects.create(name='Test Circuit Type 1', slug='test-circuit-type-1')
  106. self.circuittype2 = CircuitType.objects.create(name='Test Circuit Type 2', slug='test-circuit-type-2')
  107. self.circuit1 = Circuit.objects.create(cid='TEST0001', provider=self.provider1, type=self.circuittype1)
  108. self.circuit2 = Circuit.objects.create(cid='TEST0002', provider=self.provider1, type=self.circuittype1)
  109. self.circuit3 = Circuit.objects.create(cid='TEST0003', provider=self.provider1, type=self.circuittype1)
  110. def test_get_circuit(self):
  111. url = reverse('circuits-api:circuit-detail', kwargs={'pk': self.circuit1.pk})
  112. response = self.client.get(url, **self.header)
  113. self.assertEqual(response.data['cid'], self.circuit1.cid)
  114. def test_list_circuits(self):
  115. url = reverse('circuits-api:circuit-list')
  116. response = self.client.get(url, **self.header)
  117. self.assertEqual(response.data['count'], 3)
  118. def test_create_circuit(self):
  119. data = {
  120. 'cid': 'TEST0004',
  121. 'provider': self.provider1.pk,
  122. 'type': self.circuittype1.pk,
  123. }
  124. url = reverse('circuits-api:circuit-list')
  125. response = self.client.post(url, data, **self.header)
  126. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  127. self.assertEqual(Circuit.objects.count(), 4)
  128. circuit4 = Circuit.objects.get(pk=response.data['id'])
  129. self.assertEqual(circuit4.cid, data['cid'])
  130. self.assertEqual(circuit4.provider_id, data['provider'])
  131. self.assertEqual(circuit4.type_id, data['type'])
  132. def test_update_circuit(self):
  133. data = {
  134. 'cid': 'TEST000X',
  135. 'provider': self.provider2.pk,
  136. 'type': self.circuittype2.pk,
  137. }
  138. url = reverse('circuits-api:circuit-detail', kwargs={'pk': self.circuit1.pk})
  139. response = self.client.put(url, data, **self.header)
  140. self.assertEqual(response.status_code, status.HTTP_200_OK)
  141. self.assertEqual(Circuit.objects.count(), 3)
  142. circuit1 = Circuit.objects.get(pk=response.data['id'])
  143. self.assertEqual(circuit1.cid, data['cid'])
  144. self.assertEqual(circuit1.provider_id, data['provider'])
  145. self.assertEqual(circuit1.type_id, data['type'])
  146. def test_delete_circuit(self):
  147. url = reverse('circuits-api:circuit-detail', kwargs={'pk': self.circuit1.pk})
  148. response = self.client.delete(url, **self.header)
  149. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
  150. self.assertEqual(Circuit.objects.count(), 2)
  151. class CircuitTerminationTest(APITestCase):
  152. def setUp(self):
  153. user = User.objects.create(username='testuser', is_superuser=True)
  154. token = Token.objects.create(user=user)
  155. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  156. provider = Provider.objects.create(name='Test Provider', slug='test-provider')
  157. circuittype = CircuitType.objects.create(name='Test Circuit Type', slug='test-circuit-type')
  158. self.circuit1 = Circuit.objects.create(cid='TEST0001', provider=provider, type=circuittype)
  159. self.circuit2 = Circuit.objects.create(cid='TEST0002', provider=provider, type=circuittype)
  160. self.circuit3 = Circuit.objects.create(cid='TEST0003', provider=provider, type=circuittype)
  161. self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1')
  162. self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2')
  163. self.circuittermination1 = CircuitTermination.objects.create(
  164. circuit=self.circuit1, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000
  165. )
  166. self.circuittermination2 = CircuitTermination.objects.create(
  167. circuit=self.circuit2, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000
  168. )
  169. self.circuittermination3 = CircuitTermination.objects.create(
  170. circuit=self.circuit3, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000
  171. )
  172. def test_get_circuittermination(self):
  173. url = reverse('circuits-api:circuittermination-detail', kwargs={'pk': self.circuittermination1.pk})
  174. response = self.client.get(url, **self.header)
  175. self.assertEqual(response.data['id'], self.circuittermination1.pk)
  176. def test_list_circuitterminations(self):
  177. url = reverse('circuits-api:circuittermination-list')
  178. response = self.client.get(url, **self.header)
  179. self.assertEqual(response.data['count'], 3)
  180. def test_create_circuittermination(self):
  181. data = {
  182. 'circuit': self.circuit1.pk,
  183. 'term_side': TERM_SIDE_Z,
  184. 'site': self.site2.pk,
  185. 'port_speed': 1000000,
  186. }
  187. url = reverse('circuits-api:circuittermination-list')
  188. response = self.client.post(url, data, **self.header)
  189. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  190. self.assertEqual(CircuitTermination.objects.count(), 4)
  191. circuittermination4 = CircuitTermination.objects.get(pk=response.data['id'])
  192. self.assertEqual(circuittermination4.circuit_id, data['circuit'])
  193. self.assertEqual(circuittermination4.term_side, data['term_side'])
  194. self.assertEqual(circuittermination4.site_id, data['site'])
  195. self.assertEqual(circuittermination4.port_speed, data['port_speed'])
  196. def test_update_circuittermination(self):
  197. data = {
  198. 'circuit': self.circuit1.pk,
  199. 'term_side': TERM_SIDE_Z,
  200. 'site': self.site2.pk,
  201. 'port_speed': 1000000,
  202. }
  203. url = reverse('circuits-api:circuittermination-detail', kwargs={'pk': self.circuittermination1.pk})
  204. response = self.client.put(url, data, **self.header)
  205. self.assertEqual(response.status_code, status.HTTP_200_OK)
  206. self.assertEqual(CircuitTermination.objects.count(), 3)
  207. circuittermination1 = CircuitTermination.objects.get(pk=response.data['id'])
  208. self.assertEqual(circuittermination1.circuit_id, data['circuit'])
  209. self.assertEqual(circuittermination1.term_side, data['term_side'])
  210. self.assertEqual(circuittermination1.site_id, data['site'])
  211. self.assertEqual(circuittermination1.port_speed, data['port_speed'])
  212. def test_delete_circuittermination(self):
  213. url = reverse('circuits-api:circuittermination-detail', kwargs={'pk': self.circuittermination1.pk})
  214. response = self.client.delete(url, **self.header)
  215. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
  216. self.assertEqual(CircuitTermination.objects.count(), 2)