test_api.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. from django.contrib.contenttypes.models import ContentType
  2. from django.test import override_settings
  3. from django.urls import reverse
  4. from circuits.choices import *
  5. from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
  6. from dcim.models import Site
  7. from extras.models import Graph
  8. from utilities.testing import APITestCase, APIViewTestCases
  9. class AppTest(APITestCase):
  10. def test_root(self):
  11. url = reverse('circuits-api:api-root')
  12. response = self.client.get('{}?format=api'.format(url), **self.header)
  13. self.assertEqual(response.status_code, 200)
  14. class ProviderTest(APIViewTestCases.APIViewTestCase):
  15. model = Provider
  16. brief_fields = ['circuit_count', 'id', 'name', 'slug', 'url']
  17. create_data = [
  18. {
  19. 'name': 'Provider 4',
  20. 'slug': 'provider-4',
  21. },
  22. {
  23. 'name': 'Provider 5',
  24. 'slug': 'provider-5',
  25. },
  26. {
  27. 'name': 'Provider 6',
  28. 'slug': 'provider-6',
  29. },
  30. ]
  31. @classmethod
  32. def setUpTestData(cls):
  33. providers = (
  34. Provider(name='Provider 1', slug='provider-1'),
  35. Provider(name='Provider 2', slug='provider-2'),
  36. Provider(name='Provider 3', slug='provider-3'),
  37. )
  38. Provider.objects.bulk_create(providers)
  39. @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
  40. def test_get_provider_graphs(self):
  41. """
  42. Test retrieval of Graphs assigned to Providers.
  43. """
  44. provider = self.model.objects.unrestricted().first()
  45. ct = ContentType.objects.get(app_label='circuits', model='provider')
  46. graphs = (
  47. Graph(type=ct, name='Graph 1', source='http://example.com/graphs.py?provider={{ obj.slug }}&foo=1'),
  48. Graph(type=ct, name='Graph 2', source='http://example.com/graphs.py?provider={{ obj.slug }}&foo=2'),
  49. Graph(type=ct, name='Graph 3', source='http://example.com/graphs.py?provider={{ obj.slug }}&foo=3'),
  50. )
  51. Graph.objects.bulk_create(graphs)
  52. self.add_permissions('circuits.view_provider')
  53. url = reverse('circuits-api:provider-graphs', kwargs={'pk': provider.pk})
  54. response = self.client.get(url, **self.header)
  55. self.assertEqual(len(response.data), 3)
  56. self.assertEqual(response.data[0]['embed_url'], 'http://example.com/graphs.py?provider=provider-1&foo=1')
  57. class CircuitTypeTest(APIViewTestCases.APIViewTestCase):
  58. model = CircuitType
  59. brief_fields = ['circuit_count', 'id', 'name', 'slug', 'url']
  60. create_data = (
  61. {
  62. 'name': 'Circuit Type 4',
  63. 'slug': 'circuit-type-4',
  64. },
  65. {
  66. 'name': 'Circuit Type 5',
  67. 'slug': 'circuit-type-5',
  68. },
  69. {
  70. 'name': 'Circuit Type 6',
  71. 'slug': 'circuit-type-6',
  72. },
  73. )
  74. @classmethod
  75. def setUpTestData(cls):
  76. circuit_types = (
  77. CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
  78. CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
  79. CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
  80. )
  81. CircuitType.objects.bulk_create(circuit_types)
  82. class CircuitTest(APIViewTestCases.APIViewTestCase):
  83. model = Circuit
  84. brief_fields = ['cid', 'id', 'url']
  85. @classmethod
  86. def setUpTestData(cls):
  87. providers = (
  88. Provider(name='Provider 1', slug='provider-1'),
  89. Provider(name='Provider 2', slug='provider-2'),
  90. )
  91. Provider.objects.bulk_create(providers)
  92. circuit_types = (
  93. CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
  94. CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
  95. )
  96. CircuitType.objects.bulk_create(circuit_types)
  97. circuits = (
  98. Circuit(cid='Circuit 1', provider=providers[0], type=circuit_types[0]),
  99. Circuit(cid='Circuit 2', provider=providers[0], type=circuit_types[0]),
  100. Circuit(cid='Circuit 3', provider=providers[0], type=circuit_types[0]),
  101. )
  102. Circuit.objects.bulk_create(circuits)
  103. cls.create_data = [
  104. {
  105. 'cid': 'Circuit 4',
  106. 'provider': providers[1].pk,
  107. 'type': circuit_types[1].pk,
  108. },
  109. {
  110. 'cid': 'Circuit 5',
  111. 'provider': providers[1].pk,
  112. 'type': circuit_types[1].pk,
  113. },
  114. {
  115. 'cid': 'Circuit 6',
  116. 'provider': providers[1].pk,
  117. 'type': circuit_types[1].pk,
  118. },
  119. ]
  120. class CircuitTerminationTest(APIViewTestCases.APIViewTestCase):
  121. model = CircuitTermination
  122. brief_fields = ['circuit', 'id', 'term_side', 'url']
  123. @classmethod
  124. def setUpTestData(cls):
  125. SIDE_A = CircuitTerminationSideChoices.SIDE_A
  126. SIDE_Z = CircuitTerminationSideChoices.SIDE_Z
  127. sites = (
  128. Site(name='Site 1', slug='site-1'),
  129. Site(name='Site 2', slug='site-2'),
  130. )
  131. Site.objects.bulk_create(sites)
  132. provider = Provider.objects.create(name='Provider 1', slug='provider-1')
  133. circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
  134. circuits = (
  135. Circuit(cid='Circuit 1', provider=provider, type=circuit_type),
  136. Circuit(cid='Circuit 2', provider=provider, type=circuit_type),
  137. Circuit(cid='Circuit 3', provider=provider, type=circuit_type),
  138. )
  139. Circuit.objects.bulk_create(circuits)
  140. circuit_terminations = (
  141. CircuitTermination(circuit=circuits[0], site=sites[0], port_speed=100000, term_side=SIDE_A),
  142. CircuitTermination(circuit=circuits[0], site=sites[1], port_speed=100000, term_side=SIDE_Z),
  143. CircuitTermination(circuit=circuits[1], site=sites[0], port_speed=100000, term_side=SIDE_A),
  144. CircuitTermination(circuit=circuits[1], site=sites[1], port_speed=100000, term_side=SIDE_Z),
  145. )
  146. CircuitTermination.objects.bulk_create(circuit_terminations)
  147. cls.create_data = [
  148. {
  149. 'circuit': circuits[2].pk,
  150. 'term_side': SIDE_A,
  151. 'site': sites[1].pk,
  152. 'port_speed': 200000,
  153. },
  154. {
  155. 'circuit': circuits[2].pk,
  156. 'term_side': SIDE_Z,
  157. 'site': sites[1].pk,
  158. 'port_speed': 200000,
  159. },
  160. ]