test_api.py 13 KB

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