test_api.py 13 KB

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