Add more tests to ensure WorkflowState and Revision cascade on object delete

pull/11310/head
Sage Abdullah 2023-12-05 16:05:10 +00:00 zatwierdzone przez LB (Ben Johnston)
rodzic cc00c6a8af
commit 3e940a1e2b
2 zmienionych plików z 43 dodań i 0 usunięć

Wyświetl plik

@ -6,6 +6,7 @@ from freezegun import freeze_time
from wagtail.models import Page, Revision, get_default_page_content_type
from wagtail.test.testapp.models import (
FullFeaturedSnippet,
RevisableGrandChildModel,
RevisableModel,
SimplePage,
@ -168,3 +169,25 @@ class TestRevisableModel(TestCase):
# The id is used as a tie breaker
self.assertEqual(first.created_at, second.created_at)
self.assertLess(first.id, second.id)
def test_revision_cascade_on_object_delete(self):
page = self.create_page()
full_featured_snippet = FullFeaturedSnippet.objects.create(text="foo")
cases = [
# Tuple of (instance, cascades)
# For models that define a GenericRelation to Revision, the revision
# should be deleted when the instance is deleted.
(page, True),
(full_featured_snippet, True),
(self.instance, False), # No GenericRelation to Revision
]
for instance, cascades in cases:
with self.subTest(instance=instance):
revision = instance.save_revision()
query = {
"base_content_type": instance.get_base_content_type(),
"object_id": str(instance.pk),
}
self.assertEqual(Revision.objects.filter(**query).first(), revision)
instance.delete()
self.assertIs(Revision.objects.filter(**query).exists(), not cascades)

Wyświetl plik

@ -449,6 +449,19 @@ class TestPageWorkflows(WagtailTestUtils, TestCase):
self.assertIsNone(self.object.locked_at)
self.assertIsNone(self.object.locked_by)
def test_workflow_state_cascade_on_object_delete(self, cascades=True):
data = self.start_workflow()
query = {
"base_content_type": self.object.get_base_content_type(),
"object_id": str(self.object.pk),
}
self.assertEqual(
WorkflowState.objects.filter(**query).first(),
data["workflow_state"],
)
self.object.delete()
self.assertIs(WorkflowState.objects.filter(**query).exists(), not cascades)
class TestSnippetWorkflows(TestPageWorkflows):
fixtures = None
@ -479,3 +492,10 @@ class TestSnippetWorkflowsNotLockable(TestSnippetWorkflows):
self.assertEqual(workflow_state.workflow, workflow)
self.assertEqual(workflow_state.content_object, self.object)
self.assertEqual(workflow_state.status, "in_progress")
def test_workflow_state_cascade_on_object_delete(self):
# We expect the cascade to not happen as the model does not define
# a GenericRelation to WorkflowState. However, workflows should still
# work as expected.
# See https://github.com/wagtail/wagtail/issues/11300 for more details.
return super().test_workflow_state_cascade_on_object_delete(cascades=False)