test_api.py 6.6 KB

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