|
3 | 3 | import baseapp_auth.tests.helpers as h
|
4 | 4 | import pytest
|
5 | 5 | from avatar.models import Avatar
|
6 |
| -from baseapp_auth.rest_framework.routers.account import account_router |
7 |
| -from baseapp_auth.rest_framework.users.views import UsersViewSet |
8 | 6 | from baseapp_auth.tests.factories import PasswordValidationFactory
|
9 | 7 | from baseapp_auth.tests.mixins import ApiMixin
|
10 | 8 | from baseapp_auth.tokens import ConfirmEmailTokenGenerator
|
|
13 | 11 | from django.conf import settings
|
14 | 12 | from django.contrib.auth import get_user_model
|
15 | 13 | from django.contrib.auth.models import Permission
|
| 14 | +from django.contrib.contenttypes.models import ContentType |
16 | 15 | from django.utils import timezone
|
17 | 16 |
|
18 | 17 | User = get_user_model()
|
|
26 | 25 |
|
27 | 26 | UserReferral = get_user_referral_model()
|
28 | 27 |
|
29 |
| -account_router.register( |
30 |
| - r"users", UsersViewSet, basename="users" |
31 |
| -) # We expect the main app to register the viewset |
32 |
| - |
33 | 28 |
|
34 | 29 | class TestUsersRetrieve(ApiMixin):
|
35 | 30 | view_name = "users-detail"
|
@@ -321,3 +316,65 @@ def test_user_get_false_without_permission(self, user_client):
|
321 | 316 | r = user_client.post(self.reverse(), {"perm": "admin.test_perm"})
|
322 | 317 | h.responseOk(r)
|
323 | 318 | assert not r.data["has_perm"]
|
| 319 | + |
| 320 | + |
| 321 | +class TestUserPermissionList(ApiMixin): |
| 322 | + view_name = "user-permissions-list" |
| 323 | + |
| 324 | + def test_guest_cannot_get_user_permissions(self, client): |
| 325 | + content_type = ContentType.objects.all().first() |
| 326 | + perm = Permission.objects.filter(content_type_id=content_type).first() |
| 327 | + user = UserFactory() |
| 328 | + user.user_permissions.add(perm) |
| 329 | + r = client.get(self.reverse(kwargs={"user_pk": user.pk})) |
| 330 | + h.responseUnauthorized(r) |
| 331 | + |
| 332 | + def test_user_without_perm_cannot_get_user_permissions(self, user_client): |
| 333 | + content_type = ContentType.objects.all().first() |
| 334 | + perm = Permission.objects.filter(content_type_id=content_type).first() |
| 335 | + user = UserFactory() |
| 336 | + user.user_permissions.add(perm) |
| 337 | + r = user_client.get(self.reverse(kwargs={"user_pk": user.pk})) |
| 338 | + h.responseBadRequest(r) |
| 339 | + assert "You do not have permission to perform this action." == r.data["detail"] |
| 340 | + |
| 341 | + def test_user_with_perm_can_get_user_permissions(self, user_client): |
| 342 | + content_type = ContentType.objects.all().first() |
| 343 | + perm = Permission.objects.filter(content_type_id=content_type).first() |
| 344 | + user = UserFactory() |
| 345 | + user.user_permissions.add(perm) |
| 346 | + p = Permission.objects.get(codename="change_user") |
| 347 | + p.content_type.app_label = "users" |
| 348 | + p.content_type.save() |
| 349 | + user_client.user.user_permissions.add(p) |
| 350 | + user_client.user.refresh_from_db() |
| 351 | + r = user_client.get(self.reverse(kwargs={"user_pk": user.pk})) |
| 352 | + h.responseOk(r) |
| 353 | + |
| 354 | + def test_user_with_perm_can_up_user_permissions(self, user_client): |
| 355 | + content_type = ContentType.objects.all().first() |
| 356 | + perm = Permission.objects.filter(content_type_id=content_type).first() |
| 357 | + user = UserFactory() |
| 358 | + user.user_permissions.add(perm) |
| 359 | + p = Permission.objects.get(codename="change_user") |
| 360 | + p.content_type.app_label = "users" |
| 361 | + p.content_type.save() |
| 362 | + user_client.user.user_permissions.add(p) |
| 363 | + r = user_client.post( |
| 364 | + self.reverse(kwargs={"user_pk": user.pk}), data={"codename": "delete_user"} |
| 365 | + ) |
| 366 | + h.responseCreated(r) |
| 367 | + assert user.user_permissions.count() == 2 |
| 368 | + |
| 369 | + def test_user_with_perm_can_set_user_permissions(self, user_client): |
| 370 | + user = UserFactory() |
| 371 | + p = Permission.objects.get(codename="change_user") |
| 372 | + p.content_type.app_label = "users" |
| 373 | + p.content_type.save() |
| 374 | + user_client.user.user_permissions.add(p) |
| 375 | + r = user_client.post( |
| 376 | + self.reverse(kwargs={"user_pk": user.pk}), |
| 377 | + data={"permissions": ["change_user", "delete_user"]}, |
| 378 | + ) |
| 379 | + h.responseCreated(r) |
| 380 | + assert user.user_permissions.count() == 2 |
0 commit comments