Fix crash when accessing workflow reports with a deleted snippet

This can happen if the model does not define GenericRelations correctly
pull/11601/head
Sage Abdullah 2024-02-05 14:19:46 +00:00
rodzic 1e47194d74
commit 5ad59c1a1a
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
2 zmienionych plików z 31 dodań i 1 usunięć

Wyświetl plik

@ -2412,7 +2412,7 @@ class TestPageWorkflowReport(BasePageWorkflowTests):
self.submitter.first_name = "Sebastian"
self.submitter.last_name = "Mitter"
self.submitter.save()
self.post("submit")
self.post("submit", follow=True)
self.login(user=self.moderator)
def setup_workflow_and_tasks(self):
@ -2545,11 +2545,35 @@ class TestPageWorkflowReport(BasePageWorkflowTests):
self.assertEqual(response.status_code, 200)
self.assertNotIn("Hello world!", content)
def test_workflow_report_deleted(self):
self.object.delete()
response = self.client.get(reverse("wagtailadmin_reports:workflow"))
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, "Hello world!")
# test_workflow is only rendered in the filter, not the results
self.assertContains(response, "test_workflow", count=1)
self.assertNotContains(response, "Sebastian Mitter")
self.assertNotContains(response, "March 31, 2020")
response = self.client.get(reverse("wagtailadmin_reports:workflow_tasks"))
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, "Hello world!")
class TestSnippetWorkflowReport(TestPageWorkflowReport, BaseSnippetWorkflowTests):
pass
class TestNonLockableSnippetWorkflowReport(
TestPageWorkflowReport, BaseSnippetWorkflowTests
):
# This model does not use LockableMixin, and it also does not have a
# GenericRelation to WorkflowState and Revision, but it should not break
# the report page.
# See https://github.com/wagtail/wagtail/issues/11300 for more details.
model = ModeratedModel
class TestPageNotificationPreferences(BasePageWorkflowTests):
def setUp(self):
super().setUp()

Wyświetl plik

@ -194,6 +194,9 @@ class WorkflowView(ReportView):
.order_by("-created_at")
)
def decorate_paginated_queryset(self, object_list):
return [obj for obj in object_list if obj.content_object]
class WorkflowTasksView(ReportView):
template_name = "wagtailadmin/reports/workflow_tasks.html"
@ -260,3 +263,6 @@ class WorkflowTasksView(ReportView):
)
.order_by("-started_at")
)
def decorate_paginated_queryset(self, object_list):
return [obj for obj in object_list if obj.workflow_state.content_object]