test_api.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. from django.contrib.auth.models import Group, User
  2. from django.contrib.contenttypes.models import ContentType
  3. from django.urls import reverse
  4. from users.models import ObjectPermission
  5. from utilities.testing import APIViewTestCases, APITestCase
  6. from utilities.utils import deepmerge
  7. class AppTest(APITestCase):
  8. def test_root(self):
  9. url = reverse('users-api:api-root')
  10. response = self.client.get('{}?format=api'.format(url), **self.header)
  11. self.assertEqual(response.status_code, 200)
  12. class UserTest(APIViewTestCases.APIViewTestCase):
  13. model = User
  14. view_namespace = 'users'
  15. brief_fields = ['id', 'url', 'username']
  16. create_data = [
  17. {
  18. 'username': 'User_4',
  19. },
  20. {
  21. 'username': 'User_5',
  22. },
  23. {
  24. 'username': 'User_6',
  25. },
  26. ]
  27. @classmethod
  28. def setUpTestData(cls):
  29. users = (
  30. User(username='User_1'),
  31. User(username='User_2'),
  32. User(username='User_3'),
  33. )
  34. User.objects.bulk_create(users)
  35. class GroupTest(APIViewTestCases.APIViewTestCase):
  36. model = Group
  37. view_namespace = 'users'
  38. brief_fields = ['id', 'name', 'url']
  39. create_data = [
  40. {
  41. 'name': 'Group 4',
  42. },
  43. {
  44. 'name': 'Group 5',
  45. },
  46. {
  47. 'name': 'Group 6',
  48. },
  49. ]
  50. @classmethod
  51. def setUpTestData(cls):
  52. users = (
  53. Group(name='Group 1'),
  54. Group(name='Group 2'),
  55. Group(name='Group 3'),
  56. )
  57. Group.objects.bulk_create(users)
  58. class ObjectPermissionTest(APIViewTestCases.APIViewTestCase):
  59. model = ObjectPermission
  60. brief_fields = ['actions', 'enabled', 'groups', 'id', 'name', 'object_types', 'url', 'users']
  61. @classmethod
  62. def setUpTestData(cls):
  63. groups = (
  64. Group(name='Group 1'),
  65. Group(name='Group 2'),
  66. Group(name='Group 3'),
  67. )
  68. Group.objects.bulk_create(groups)
  69. users = (
  70. User(username='User 1', is_active=True),
  71. User(username='User 2', is_active=True),
  72. User(username='User 3', is_active=True),
  73. )
  74. User.objects.bulk_create(users)
  75. object_type = ContentType.objects.get(app_label='dcim', model='device')
  76. for i in range(0, 3):
  77. objectpermission = ObjectPermission(
  78. name=f'Permission {i+1}',
  79. actions=['view', 'add', 'change', 'delete'],
  80. constraints={'name': f'TEST{i+1}'}
  81. )
  82. objectpermission.save()
  83. objectpermission.object_types.add(object_type)
  84. objectpermission.groups.add(groups[i])
  85. objectpermission.users.add(users[i])
  86. cls.create_data = [
  87. {
  88. 'name': 'Permission 4',
  89. 'object_types': ['dcim.site'],
  90. 'groups': [groups[0].pk],
  91. 'users': [users[0].pk],
  92. 'actions': ['view', 'add', 'change', 'delete'],
  93. 'constraints': {'name': 'TEST4'},
  94. },
  95. {
  96. 'name': 'Permission 5',
  97. 'object_types': ['dcim.site'],
  98. 'groups': [groups[1].pk],
  99. 'users': [users[1].pk],
  100. 'actions': ['view', 'add', 'change', 'delete'],
  101. 'constraints': {'name': 'TEST5'},
  102. },
  103. {
  104. 'name': 'Permission 6',
  105. 'object_types': ['dcim.site'],
  106. 'groups': [groups[2].pk],
  107. 'users': [users[2].pk],
  108. 'actions': ['view', 'add', 'change', 'delete'],
  109. 'constraints': {'name': 'TEST6'},
  110. },
  111. ]
  112. class UserConfigTest(APITestCase):
  113. def test_get(self):
  114. """
  115. Retrieve user configuration via GET request.
  116. """
  117. userconfig = self.user.config
  118. url = reverse('users-api:userconfig-list')
  119. response = self.client.get(url, **self.header)
  120. self.assertEqual(response.data, {})
  121. data = {
  122. "a": 123,
  123. "b": 456,
  124. "c": 789,
  125. }
  126. userconfig.data = data
  127. userconfig.save()
  128. response = self.client.get(url, **self.header)
  129. self.assertEqual(response.data, data)
  130. def test_patch(self):
  131. """
  132. Set user config via PATCH requests.
  133. """
  134. userconfig = self.user.config
  135. url = reverse('users-api:userconfig-list')
  136. data = {
  137. "a": {
  138. "a1": "X",
  139. "a2": "Y",
  140. },
  141. "b": {
  142. "b1": "Z",
  143. }
  144. }
  145. response = self.client.patch(url, data=data, format='json', **self.header)
  146. self.assertDictEqual(response.data, data)
  147. userconfig.refresh_from_db()
  148. self.assertDictEqual(userconfig.data, data)
  149. update_data = {
  150. "c": 123
  151. }
  152. response = self.client.patch(url, data=update_data, format='json', **self.header)
  153. new_data = deepmerge(data, update_data)
  154. self.assertDictEqual(response.data, new_data)
  155. userconfig.refresh_from_db()
  156. self.assertDictEqual(userconfig.data, new_data)