Update reference to , add basic tests for locked pages report, and update to cope with missing UserPagePermissionsProxy.permissions if inactive or superuser

pull/5757/head
jacobtm 2020-01-07 17:00:17 +00:00
rodzic df194b40f3
commit 9fbeff41b3
3 zmienionych plików z 42 dodań i 2 usunięć

Wyświetl plik

@ -0,0 +1,35 @@
from django.test import TestCase
from django.urls import reverse
from django.utils import timezone
from wagtail.core.models import Page
from wagtail.tests.utils import WagtailTestUtils
class TestLockedPagesView(TestCase, WagtailTestUtils):
def setUp(self):
self.user = self.login()
def get(self, params={}):
return self.client.get(reverse('wagtailadmin_reports:locked_pages'), params)
def test_simple(self):
response = self.get()
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'wagtailadmin/reports/locked_pages.html')
# Initially there should be no locked pages
self.assertContains(response, "No locked pages found.")
self.page = Page.objects.first()
self.page.locked = True
self.page.locked_by = self.user
self.page.locked_at = timezone.now()
self.page.save()
# Now the listing should contain our locked page
response = self.get()
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'wagtailadmin/reports/locked_pages.html')
self.assertNotContains(response, "No locked pages found.")
self.assertContains(response, self.page.title)

Wyświetl plik

@ -31,6 +31,6 @@ class LockedPagesView(ReportView):
return super().get_queryset()
def dispatch(self, request, *args, **kwargs):
if not UserPagePermissionsProxy(request.user).can_unlock_pages():
if not UserPagePermissionsProxy(request.user).can_remove_locks():
return permission_denied(request)
return super().dispatch(request, *args, **kwargs)

Wyświetl plik

@ -1835,7 +1835,12 @@ class UserPagePermissionsProxy:
def can_remove_locks(self):
"""Returns True if the user has permission to unlock pages they have not locked"""
return self.user.is_superuser or self.permissions.filter(permission_type='unlock').exists()
if self.user.is_superuser:
return True
if not self.user.is_active:
return False
else:
return self.permissions.filter(permission_type='unlock').exists()
class PagePermissionTester: