test_api.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from django.contrib.auth.models import Group, User
  2. from django.contrib.contenttypes.models import ContentType
  3. from django.test import override_settings
  4. from django.urls import reverse
  5. from rest_framework import status
  6. from users.models import ObjectPermission
  7. from utilities.testing import APIViewTestCases, APITestCase, disable_warnings
  8. class AppTest(APITestCase):
  9. def test_root(self):
  10. url = reverse('users-api:api-root')
  11. response = self.client.get('{}?format=api'.format(url), **self.header)
  12. self.assertEqual(response.status_code, 200)
  13. class ObjectPermissionTest(APIViewTestCases.APIViewTestCase):
  14. model = ObjectPermission
  15. brief_fields = ['actions', 'enabled', 'groups', 'id', 'name', 'object_types', 'users']
  16. @classmethod
  17. def setUpTestData(cls):
  18. groups = (
  19. Group(name='Group 1'),
  20. Group(name='Group 2'),
  21. Group(name='Group 3'),
  22. )
  23. Group.objects.bulk_create(groups)
  24. users = (
  25. User(username='User 1', is_active=True),
  26. User(username='User 2', is_active=True),
  27. User(username='User 3', is_active=True),
  28. )
  29. User.objects.bulk_create(users)
  30. object_type = ContentType.objects.get(app_label='dcim', model='device')
  31. for i in range(0, 3):
  32. objectpermission = ObjectPermission(
  33. actions=['view', 'add', 'change', 'delete'],
  34. constraints={'name': f'TEST{i+1}'}
  35. )
  36. objectpermission.save()
  37. objectpermission.object_types.add(object_type)
  38. objectpermission.groups.add(groups[i])
  39. objectpermission.users.add(users[i])
  40. cls.create_data = [
  41. {
  42. 'object_types': ['dcim.site'],
  43. 'groups': [groups[0].pk],
  44. 'users': [users[0].pk],
  45. 'actions': ['view', 'add', 'change', 'delete'],
  46. 'constraints': {'name': 'TEST4'},
  47. },
  48. {
  49. 'object_types': ['dcim.site'],
  50. 'groups': [groups[1].pk],
  51. 'users': [users[1].pk],
  52. 'actions': ['view', 'add', 'change', 'delete'],
  53. 'constraints': {'name': 'TEST5'},
  54. },
  55. {
  56. 'object_types': ['dcim.site'],
  57. 'groups': [groups[2].pk],
  58. 'users': [users[2].pk],
  59. 'actions': ['view', 'add', 'change', 'delete'],
  60. 'constraints': {'name': 'TEST6'},
  61. },
  62. ]
  63. @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
  64. def test_list_objects_anonymous(self):
  65. # Endpoint should never be exposed via EXEMPT_VIEW_PERMISSIONS
  66. url = self._get_list_url()
  67. with disable_warnings('django.request'):
  68. self.assertHttpStatus(self.client.get(url, **self.header), status.HTTP_403_FORBIDDEN)
  69. @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
  70. def test_get_object_anonymous(self):
  71. # Endpoint should never be exposed via EXEMPT_VIEW_PERMISSIONS
  72. url = self._get_detail_url(self._get_queryset().first())
  73. with disable_warnings('django.request'):
  74. self.assertHttpStatus(self.client.get(url, **self.header), status.HTTP_403_FORBIDDEN)