|
| 1 | +from django.contrib.auth import get_user_model |
| 2 | +from django.contrib.auth.models import Permission |
1 | 3 | from django.test import TestCase |
2 | 4 | from django.urls import reverse |
3 | 5 |
|
4 | 6 | from openwisp_users.api.throttling import AuthRateThrottle |
5 | 7 |
|
6 | 8 | from .mixins import TestMultitenancyMixin |
7 | 9 |
|
| 10 | +User = get_user_model() |
| 11 | + |
8 | 12 |
|
9 | 13 | class TestPermissionClasses(TestMultitenancyMixin, TestCase): |
10 | 14 | def setUp(self): |
@@ -117,3 +121,29 @@ def test_organization_field_with_errored_parent(self): |
117 | 121 | with self.assertRaises(AttributeError) as error: |
118 | 122 | self.client.get(reverse('test_error_field_view'), **auth) |
119 | 123 | self.assertIn('Organization not found', str(error.exception)) |
| 124 | + |
| 125 | + def test_custom_django_model_permission_with_view_permission(self): |
| 126 | + user = User.objects.create_user( |
| 127 | + username='operator', password='tester', email='operator@test.com' |
| 128 | + ) |
| 129 | + user_permissions = Permission.objects.filter(codename='view_template') |
| 130 | + user.user_permissions.add(*user_permissions) |
| 131 | + user.organizations_dict # force caching |
| 132 | + self.client.force_login(user) |
| 133 | + token = self._obtain_auth_token() |
| 134 | + auth = dict(HTTP_AUTHORIZATION=f'Bearer {token}') |
| 135 | + response = self.client.get(reverse('test_template_list'), **auth) |
| 136 | + self.assertEqual(response.status_code, 200) |
| 137 | + |
| 138 | + def test_custom_django_model_permission_with_change_permission(self): |
| 139 | + user = User.objects.create_user( |
| 140 | + username='operator', password='tester', email='operator@test.com' |
| 141 | + ) |
| 142 | + user_permissions = Permission.objects.filter(codename='change_template') |
| 143 | + user.user_permissions.add(*user_permissions) |
| 144 | + user.organizations_dict # force caching |
| 145 | + self.client.force_login(user) |
| 146 | + token = self._obtain_auth_token() |
| 147 | + auth = dict(HTTP_AUTHORIZATION=f'Bearer {token}') |
| 148 | + response = self.client.get(reverse('test_template_list'), **auth) |
| 149 | + self.assertEqual(response.status_code, 200) |
0 commit comments