test_api.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. from rest_framework import status
  2. from rest_framework.test import APITestCase
  3. from django.contrib.auth.models import User
  4. from django.contrib.contenttypes.models import ContentType
  5. from django.urls import reverse
  6. from dcim.models import Device
  7. from extras.models import Graph, GRAPH_TYPE_SITE, ExportTemplate
  8. from users.models import Token
  9. from utilities.tests import HttpStatusMixin
  10. class GraphTest(HttpStatusMixin, APITestCase):
  11. def setUp(self):
  12. user = User.objects.create(username='testuser', is_superuser=True)
  13. token = Token.objects.create(user=user)
  14. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  15. self.graph1 = Graph.objects.create(
  16. type=GRAPH_TYPE_SITE, name='Test Graph 1', source='http://example.com/graphs.py?site={{ obj.name }}&foo=1'
  17. )
  18. self.graph2 = Graph.objects.create(
  19. type=GRAPH_TYPE_SITE, name='Test Graph 2', source='http://example.com/graphs.py?site={{ obj.name }}&foo=2'
  20. )
  21. self.graph3 = Graph.objects.create(
  22. type=GRAPH_TYPE_SITE, name='Test Graph 3', source='http://example.com/graphs.py?site={{ obj.name }}&foo=3'
  23. )
  24. def test_get_graph(self):
  25. url = reverse('extras-api:graph-detail', kwargs={'pk': self.graph1.pk})
  26. response = self.client.get(url, **self.header)
  27. self.assertEqual(response.data['name'], self.graph1.name)
  28. def test_list_graphs(self):
  29. url = reverse('extras-api:graph-list')
  30. response = self.client.get(url, **self.header)
  31. self.assertEqual(response.data['count'], 3)
  32. def test_create_graph(self):
  33. data = {
  34. 'type': GRAPH_TYPE_SITE,
  35. 'name': 'Test Graph 4',
  36. 'source': 'http://example.com/graphs.py?site={{ obj.name }}&foo=4',
  37. }
  38. url = reverse('extras-api:graph-list')
  39. response = self.client.post(url, data, **self.header)
  40. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  41. self.assertEqual(Graph.objects.count(), 4)
  42. graph4 = Graph.objects.get(pk=response.data['id'])
  43. self.assertEqual(graph4.type, data['type'])
  44. self.assertEqual(graph4.name, data['name'])
  45. self.assertEqual(graph4.source, data['source'])
  46. def test_update_graph(self):
  47. data = {
  48. 'type': GRAPH_TYPE_SITE,
  49. 'name': 'Test Graph X',
  50. 'source': 'http://example.com/graphs.py?site={{ obj.name }}&foo=99',
  51. }
  52. url = reverse('extras-api:graph-detail', kwargs={'pk': self.graph1.pk})
  53. response = self.client.put(url, data, **self.header)
  54. self.assertHttpStatus(response, status.HTTP_200_OK)
  55. self.assertEqual(Graph.objects.count(), 3)
  56. graph1 = Graph.objects.get(pk=response.data['id'])
  57. self.assertEqual(graph1.type, data['type'])
  58. self.assertEqual(graph1.name, data['name'])
  59. self.assertEqual(graph1.source, data['source'])
  60. def test_delete_graph(self):
  61. url = reverse('extras-api:graph-detail', kwargs={'pk': self.graph1.pk})
  62. response = self.client.delete(url, **self.header)
  63. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  64. self.assertEqual(Graph.objects.count(), 2)
  65. class ExportTemplateTest(HttpStatusMixin, APITestCase):
  66. def setUp(self):
  67. user = User.objects.create(username='testuser', is_superuser=True)
  68. token = Token.objects.create(user=user)
  69. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  70. self.content_type = ContentType.objects.get_for_model(Device)
  71. self.exporttemplate1 = ExportTemplate.objects.create(
  72. content_type=self.content_type, name='Test Export Template 1',
  73. template_code='{% for obj in queryset %}{{ obj.name }}\n{% endfor %}'
  74. )
  75. self.exporttemplate2 = ExportTemplate.objects.create(
  76. content_type=self.content_type, name='Test Export Template 2',
  77. template_code='{% for obj in queryset %}{{ obj.name }}\n{% endfor %}'
  78. )
  79. self.exporttemplate3 = ExportTemplate.objects.create(
  80. content_type=self.content_type, name='Test Export Template 3',
  81. template_code='{% for obj in queryset %}{{ obj.name }}\n{% endfor %}'
  82. )
  83. def test_get_exporttemplate(self):
  84. url = reverse('extras-api:exporttemplate-detail', kwargs={'pk': self.exporttemplate1.pk})
  85. response = self.client.get(url, **self.header)
  86. self.assertEqual(response.data['name'], self.exporttemplate1.name)
  87. def test_list_exporttemplates(self):
  88. url = reverse('extras-api:exporttemplate-list')
  89. response = self.client.get(url, **self.header)
  90. self.assertEqual(response.data['count'], 3)
  91. def test_create_exporttemplate(self):
  92. data = {
  93. 'content_type': self.content_type.pk,
  94. 'name': 'Test Export Template 4',
  95. 'template_code': '{% for obj in queryset %}{{ obj.name }}\n{% endfor %}',
  96. }
  97. url = reverse('extras-api:exporttemplate-list')
  98. response = self.client.post(url, data, **self.header)
  99. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  100. self.assertEqual(ExportTemplate.objects.count(), 4)
  101. exporttemplate4 = ExportTemplate.objects.get(pk=response.data['id'])
  102. self.assertEqual(exporttemplate4.content_type_id, data['content_type'])
  103. self.assertEqual(exporttemplate4.name, data['name'])
  104. self.assertEqual(exporttemplate4.template_code, data['template_code'])
  105. def test_update_exporttemplate(self):
  106. data = {
  107. 'content_type': self.content_type.pk,
  108. 'name': 'Test Export Template X',
  109. 'template_code': '{% for obj in queryset %}{{ obj.name }}\n{% endfor %}',
  110. }
  111. url = reverse('extras-api:exporttemplate-detail', kwargs={'pk': self.exporttemplate1.pk})
  112. response = self.client.put(url, data, **self.header)
  113. self.assertHttpStatus(response, status.HTTP_200_OK)
  114. self.assertEqual(ExportTemplate.objects.count(), 3)
  115. exporttemplate1 = ExportTemplate.objects.get(pk=response.data['id'])
  116. self.assertEqual(exporttemplate1.name, data['name'])
  117. self.assertEqual(exporttemplate1.template_code, data['template_code'])
  118. def test_delete_exporttemplate(self):
  119. url = reverse('extras-api:exporttemplate-detail', kwargs={'pk': self.exporttemplate1.pk})
  120. response = self.client.delete(url, **self.header)
  121. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  122. self.assertEqual(ExportTemplate.objects.count(), 2)