From 9fbeff41b362d3138ecc8a3d48d68d58a73e2b59 Mon Sep 17 00:00:00 2001 From: jacobtm Date: Tue, 7 Jan 2020 17:00:17 +0000 Subject: [PATCH] Update reference to , add basic tests for locked pages report, and update to cope with missing UserPagePermissionsProxy.permissions if inactive or superuser --- wagtail/admin/tests/test_reports_views.py | 35 +++++++++++++++++++++++ wagtail/admin/views/reports.py | 2 +- wagtail/core/models.py | 7 ++++- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 wagtail/admin/tests/test_reports_views.py diff --git a/wagtail/admin/tests/test_reports_views.py b/wagtail/admin/tests/test_reports_views.py new file mode 100644 index 000000000..be8e3470c --- /dev/null +++ b/wagtail/admin/tests/test_reports_views.py @@ -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) diff --git a/wagtail/admin/views/reports.py b/wagtail/admin/views/reports.py index c6e987333..9ab2ca8bd 100644 --- a/wagtail/admin/views/reports.py +++ b/wagtail/admin/views/reports.py @@ -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) diff --git a/wagtail/core/models.py b/wagtail/core/models.py index 9c8ff9495..10bd73d7c 100644 --- a/wagtail/core/models.py +++ b/wagtail/core/models.py @@ -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: