Prevent error on locked pages report when a user has locked multiple pages (#11245)

Fixes #10960. Thanks to @richie-blake and @rohitsrma for reporting / investigation.
pull/11297/head
Matt Westcott 2023-11-16 13:55:36 +00:00
rodzic e8ff6a2fa3
commit c001335e71
4 zmienionych plików z 35 dodań i 7 usunięć

Wyświetl plik

@ -16,6 +16,7 @@ Changelog
* Fix: Make searching on specific fields work correctly on Elasticsearch when boost is in use (Matt Westcott)
* Fix: Prevent snippet permission post-migrate hook from failing on multiple database configurations (Joe Tsoi)
* Fix: Reinstate ability to filter on page type when searching on an empty query (Sage Abdullah)
* Fix: Prevent error on locked pages report when a user has locked multiple pages (Matt Westcott)
* Docs: Fix code example for `{% picture ... as ... %}` template tag (Rezyapkin)

Wyświetl plik

@ -26,6 +26,7 @@ depth: 1
* Make searching on specific fields work correctly on Elasticsearch when boost is in use (Matt Westcott)
* Prevent snippet permission post-migrate hook from failing on multiple database configurations (Joe Tsoi)
* Reinstate ability to filter on page type when searching on an empty query (Sage Abdullah)
* Prevent error on locked pages report when a user has locked multiple pages (Matt Westcott)
### Documentation

Wyświetl plik

@ -44,18 +44,31 @@ class TestLockedPagesView(WagtailTestUtils, TestCase):
response.content.decode(),
)
self.page = Page.objects.first()
self.page.locked = True
self.page.locked_by = self.user
self.page.locked_at = timezone.now()
self.page.save()
parent_page = Page.objects.first()
parent_page.add_child(
instance=Page(
title="First locked page",
locked=True,
locked_by=self.user,
locked_at=timezone.now(),
)
)
parent_page.add_child(
instance=Page(
title="Second locked page",
locked=True,
locked_by=self.user,
locked_at=timezone.now(),
)
)
# 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)
self.assertContains(response, "First locked page")
self.assertContains(response, "Second locked page")
self.assertInHTML(
f"""
@ -198,6 +211,12 @@ class TestFilteredLockedPagesView(WagtailTestUtils, TestCase):
self.unpublished_page.locked_at = timezone.now()
self.unpublished_page.save()
self.christmas_page = Page.objects.get(url_path="/home/events/christmas/")
self.christmas_page.locked = True
self.christmas_page.locked_by = self.user
self.christmas_page.locked_at = timezone.now()
self.christmas_page.save()
def get(self, params={}):
return self.client.get(reverse("wagtailadmin_reports:locked_pages"), params)
@ -206,16 +225,19 @@ class TestFilteredLockedPagesView(WagtailTestUtils, TestCase):
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, "Tentative Unpublished Event")
self.assertContains(response, "My locked page")
self.assertContains(response, "Christmas")
response = self.get(params={"live": "false"})
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Tentative Unpublished Event")
self.assertNotContains(response, "My locked page")
self.assertNotContains(response, "Christmas")
def test_filter_by_user(self):
response = self.get(params={"locked_by": self.user.pk})
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Tentative Unpublished Event")
self.assertContains(response, "Christmas")
self.assertNotContains(response, "My locked page")

Wyświetl plik

@ -15,7 +15,11 @@ from .base import PageReportView
def get_users_for_filter():
User = get_user_model()
return User.objects.filter(locked_pages__isnull=False).order_by(User.USERNAME_FIELD)
return (
User.objects.filter(locked_pages__isnull=False)
.order_by(User.USERNAME_FIELD)
.distinct()
)
class LockedPagesReportFilterSet(WagtailFilterSet):