Log delete for all descendents of pages, not just direct children

This leads to a misleading audit log, where some pages aren't shown as being deleted
pull/8313/head
Jake Howard 2022-04-06 14:25:29 +01:00 zatwierdzone przez Matt Westcott
rodzic bfd513cc7a
commit 9183fc8f85
2 zmienionych plików z 17 dodań i 11 usunięć

Wyświetl plik

@ -33,9 +33,8 @@ class DeletePageAction:
# works around a bug in treebeard <= 3.0 where calling SpecificPage.delete() fails to delete
# child pages that are not instances of SpecificPage
if type(page) is Page:
if page.get_children().exists():
for child in page.get_children():
self.log_deletion(child.specific)
for child in page.get_descendants():
self.log_deletion(child.specific)
self.log_deletion(page.specific)
# this is a Page instance, so carry on as we were

Wyświetl plik

@ -224,16 +224,23 @@ class TestAuditLog(TestCase):
child = self.home_page.add_child(
instance=SimplePage(title="Another child", slug="child-page-2", content="hello")
)
child.add_child(
instance=SimplePage(
title="Grandchild", slug="grandchild-page", content="hello"
)
)
child.delete()
self.assertEqual(PageLogEntry.objects.filter(action='wagtail.delete').count(), 1)
# check deleting a parent page logs child deletion
# check deleting a parent page logs descendent deletion
self.home_page.delete()
self.assertEqual(PageLogEntry.objects.filter(action='wagtail.delete').count(), 3)
self.assertListEqual(
list(PageLogEntry.objects.filter(action='wagtail.delete').values_list('label', flat=True)),
['Homepage (simple page)', 'Child (simple page)', 'Another child (simple page)']
self.assertEqual(PageLogEntry.objects.filter(action='wagtail.delete').count(), 4)
self.assertEqual(
set(PageLogEntry.objects.filter(action='wagtail.delete').values_list('label', flat=True)),
{
'Homepage (simple page)',
'Grandchild (simple page)',
'Child (simple page)',
'Another child (simple page)',
},
)
def test_workflow_actions(self):