mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-09-22 09:28:32 +00:00
Chore: Add shared helpers for granting test permissions and use them
This commit is contained in:
@@ -5,9 +5,7 @@ from unittest import mock
|
||||
from allauth.mfa.models import Authenticator
|
||||
from allauth.mfa.totp.internal import auth as totp_auth
|
||||
from django.contrib.auth.models import Group
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.auth.models import User
|
||||
from guardian.shortcuts import assign_perm
|
||||
from guardian.shortcuts import get_perms
|
||||
from guardian.shortcuts import get_users_with_perms
|
||||
from rest_framework import status
|
||||
@@ -21,6 +19,9 @@ from documents.models import StoragePath
|
||||
from documents.models import Tag
|
||||
from paperless_testing.dirs import DirectoriesMixin
|
||||
from paperless_testing.factories import UserFactory
|
||||
from paperless_testing.permissions import grant_all_global
|
||||
from paperless_testing.permissions import grant_global
|
||||
from paperless_testing.permissions import grant_object
|
||||
|
||||
|
||||
class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
@@ -139,7 +140,7 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
|
||||
def test_api_sufficient_permissions(self) -> None:
|
||||
user = UserFactory(username="test")
|
||||
user.user_permissions.add(*Permission.objects.all())
|
||||
grant_all_global(user)
|
||||
user.is_staff = True
|
||||
self.client.force_authenticate(user)
|
||||
|
||||
@@ -169,7 +170,7 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
def test_api_get_object_permissions(self) -> None:
|
||||
user1 = UserFactory(username="test1")
|
||||
user2 = UserFactory(username="test2")
|
||||
user1.user_permissions.add(*Permission.objects.filter(codename="view_document"))
|
||||
grant_global(user1, "view_document")
|
||||
self.client.force_authenticate(user1)
|
||||
|
||||
self.assertEqual(
|
||||
@@ -420,10 +421,10 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
doc.owner = user1
|
||||
doc.save()
|
||||
|
||||
assign_perm("view_document", user2, doc)
|
||||
assign_perm("change_document", user2, doc)
|
||||
assign_perm("view_document", group1, doc)
|
||||
assign_perm("change_document", group1, doc)
|
||||
grant_object(user2, doc, "view_document")
|
||||
grant_object(user2, doc, "change_document")
|
||||
grant_object(group1, doc, "view_document")
|
||||
grant_object(group1, doc, "change_document")
|
||||
|
||||
self.client.force_authenticate(user1)
|
||||
|
||||
@@ -449,9 +450,7 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
def test_document_permissions_change_requires_owner(self) -> None:
|
||||
owner = UserFactory(username="owner")
|
||||
editor = UserFactory(username="editor")
|
||||
editor.user_permissions.add(
|
||||
*Permission.objects.all(),
|
||||
)
|
||||
grant_all_global(editor)
|
||||
|
||||
doc = Document.objects.create(
|
||||
title="Ownered doc",
|
||||
@@ -461,8 +460,8 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
owner=owner,
|
||||
)
|
||||
|
||||
assign_perm("view_document", editor, doc)
|
||||
assign_perm("change_document", editor, doc)
|
||||
grant_object(editor, doc, "view_document")
|
||||
grant_object(editor, doc, "change_document")
|
||||
|
||||
self.client.force_authenticate(editor)
|
||||
response = self.client.patch(
|
||||
@@ -501,7 +500,7 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
|
||||
def test_dynamic_permissions_fields(self) -> None:
|
||||
user1 = UserFactory(username="user1")
|
||||
user1.user_permissions.add(*Permission.objects.filter(codename="view_document"))
|
||||
grant_global(user1, "view_document")
|
||||
user2 = UserFactory(username="user2")
|
||||
|
||||
Document.objects.create(title="Test", content="content 1", checksum="1")
|
||||
@@ -524,10 +523,10 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
owner=user1,
|
||||
)
|
||||
|
||||
assign_perm("view_document", user1, doc2)
|
||||
assign_perm("view_document", user1, doc3)
|
||||
assign_perm("change_document", user1, doc3)
|
||||
assign_perm("view_document", user2, doc4)
|
||||
grant_object(user1, doc2, "view_document")
|
||||
grant_object(user1, doc3, "view_document")
|
||||
grant_object(user1, doc3, "change_document")
|
||||
grant_object(user2, doc4, "view_document")
|
||||
|
||||
self.client.force_authenticate(user1)
|
||||
|
||||
@@ -860,9 +859,7 @@ class TestApiUser(DirectoriesMixin, APITestCase):
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
|
||||
regular_user = UserFactory(username="regular_user")
|
||||
regular_user.user_permissions.add(
|
||||
*Permission.objects.all(),
|
||||
)
|
||||
grant_all_global(regular_user)
|
||||
self.client.force_authenticate(regular_user)
|
||||
Authenticator.objects.create(
|
||||
user=user1,
|
||||
@@ -887,7 +884,7 @@ class TestApiUser(DirectoriesMixin, APITestCase):
|
||||
"""
|
||||
|
||||
user1 = UserFactory(username="user1")
|
||||
user1.user_permissions.add(*Permission.objects.all())
|
||||
grant_all_global(user1)
|
||||
user2 = UserFactory(username="user2", superuser=True)
|
||||
|
||||
self.client.force_authenticate(user1)
|
||||
@@ -974,7 +971,7 @@ class TestApiUser(DirectoriesMixin, APITestCase):
|
||||
"""
|
||||
|
||||
user1 = UserFactory(username="user1")
|
||||
user1.user_permissions.add(*Permission.objects.all())
|
||||
grant_all_global(user1)
|
||||
user2 = UserFactory(username="user2", superuser=True)
|
||||
|
||||
self.client.force_authenticate(user1)
|
||||
@@ -1277,7 +1274,7 @@ class TestBulkEditObjectPermissions(APITestCase):
|
||||
},
|
||||
}
|
||||
|
||||
assign_perm("view_tag", self.user3, self.t1)
|
||||
grant_object(self.user3, self.t1, "view_tag")
|
||||
self.t1.owner = self.user3
|
||||
self.t1.save()
|
||||
|
||||
@@ -1374,13 +1371,9 @@ class TestBulkEditObjectPermissions(APITestCase):
|
||||
"""
|
||||
self.t1.owner = self.user2
|
||||
self.t1.save()
|
||||
assign_perm("view_tag", self.user1, self.t1)
|
||||
assign_perm("change_tag", self.user1, self.t1)
|
||||
self.user1.user_permissions.add(
|
||||
*Permission.objects.filter(
|
||||
codename__in=["view_tag", "change_tag"],
|
||||
),
|
||||
)
|
||||
grant_object(self.user1, self.t1, "view_tag")
|
||||
grant_object(self.user1, self.t1, "change_tag")
|
||||
grant_global(self.user1, "view_tag", "change_tag")
|
||||
user1 = User.objects.get(pk=self.user1.pk)
|
||||
self.client.force_authenticate(user=user1)
|
||||
|
||||
@@ -1427,13 +1420,9 @@ class TestBulkEditObjectPermissions(APITestCase):
|
||||
"""
|
||||
owned = Tag.objects.create(name="owned", owner=self.user1)
|
||||
shared = Tag.objects.create(name="shared", owner=self.user2)
|
||||
assign_perm("view_tag", self.user1, shared)
|
||||
assign_perm("change_tag", self.user1, shared)
|
||||
self.user1.user_permissions.add(
|
||||
*Permission.objects.filter(
|
||||
codename__in=["view_tag", "change_tag"],
|
||||
),
|
||||
)
|
||||
grant_object(self.user1, shared, "view_tag")
|
||||
grant_object(self.user1, shared, "change_tag")
|
||||
grant_global(self.user1, "view_tag", "change_tag")
|
||||
user1 = User.objects.get(pk=self.user1.pk)
|
||||
self.client.force_authenticate(user=user1)
|
||||
|
||||
@@ -1474,14 +1463,10 @@ class TestBulkEditObjectPermissions(APITestCase):
|
||||
"""
|
||||
self.t1.owner = self.user2
|
||||
self.t1.save()
|
||||
assign_perm("view_tag", self.user1, self.t1)
|
||||
assign_perm("change_tag", self.user1, self.t1)
|
||||
assign_perm("delete_tag", self.user1, self.t1)
|
||||
self.user1.user_permissions.add(
|
||||
*Permission.objects.filter(
|
||||
codename__in=["view_tag", "change_tag", "delete_tag"],
|
||||
),
|
||||
)
|
||||
grant_object(self.user1, self.t1, "view_tag")
|
||||
grant_object(self.user1, self.t1, "change_tag")
|
||||
grant_object(self.user1, self.t1, "delete_tag")
|
||||
grant_global(self.user1, "view_tag", "change_tag", "delete_tag")
|
||||
user1 = User.objects.get(pk=self.user1.pk)
|
||||
self.client.force_authenticate(user=user1)
|
||||
|
||||
@@ -1586,7 +1571,7 @@ class TestBulkEditObjectPermissions(APITestCase):
|
||||
- Request succeeds and null is treated as an empty user list,
|
||||
so the existing view permission is removed
|
||||
"""
|
||||
assign_perm("view_tag", self.user1, self.t1)
|
||||
grant_object(self.user1, self.t1, "view_tag")
|
||||
|
||||
response = self.client.post(
|
||||
"/api/bulk_edit_objects/",
|
||||
|
||||
Reference in New Issue
Block a user