kopia lustrzana https://github.com/wagtail/wagtail
Add more tests to ensure WorkflowState and Revision cascade on object delete
rodzic
cc00c6a8af
commit
3e940a1e2b
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue