summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/regressiontests/delete_regress/tests.py66
1 files changed, 30 insertions, 36 deletions
diff --git a/tests/regressiontests/delete_regress/tests.py b/tests/regressiontests/delete_regress/tests.py
index e7f4619dcf..889fba81be 100644
--- a/tests/regressiontests/delete_regress/tests.py
+++ b/tests/regressiontests/delete_regress/tests.py
@@ -152,28 +152,35 @@ class LargeDeleteTests(TestCase):
class ProxyDeleteTest(TestCase):
"""
- Tests on_delete behavior for proxy models. Deleting the *proxy*
- instance bubbles through to its non-proxy and *all* referring objects
- are deleted.
+ Tests on_delete behavior for proxy models.
See #16128.
"""
-
- def setUp(self):
+ def create_image(self):
+ """Return an Image referenced by both a FooImage and a FooFile."""
# Create an Image
- self.test_image = Image()
- self.test_image.save()
- foo_image = FooImage(my_image=self.test_image)
+ test_image = Image()
+ test_image.save()
+ foo_image = FooImage(my_image=test_image)
foo_image.save()
# Get the Image instance as a File
- test_file = File.objects.get(pk=self.test_image.pk)
+ test_file = File.objects.get(pk=test_image.pk)
foo_file = FooFile(my_file=test_file)
foo_file.save()
+ return test_image
+
+
+ def test_delete_proxy(self):
+ """
+ Deleting the *proxy* instance bubbles through to its non-proxy and
+ *all* referring objects are deleted.
+
+ """
+ self.create_image()
- def test_delete(self):
Image.objects.all().delete()
# An Image deletion == File deletion
@@ -185,28 +192,19 @@ class ProxyDeleteTest(TestCase):
self.assertEqual(len(FooFile.objects.all()), 0)
+ def test_delete_proxy_of_proxy(self):
+ """
+ Deleting a proxy-of-proxy instance should bubble through to its proxy
+ and non-proxy parents, deleting *all* referring objects.
-class ProxyOfProxyDeleteTest(ProxyDeleteTest):
- """
- Tests on_delete behavior for proxy-of-proxy models. Deleting the *proxy*
- instance should bubble through to its proxy and non-proxy variants.
- Deleting *all* referring objects.
-
- See #16128.
-
- """
-
- def setUp(self):
- # Create the Image, FooImage and FooFile instances
- super(ProxyOfProxyDeleteTest, self).setUp()
+ """
+ test_image = self.create_image()
# Get the Image as a Photo
- test_photo = Photo.objects.get(pk=self.test_image.pk)
+ test_photo = Photo.objects.get(pk=test_image.pk)
foo_photo = FooPhoto(my_photo=test_photo)
foo_photo.save()
-
- def test_delete(self):
Photo.objects.all().delete()
# A Photo deletion == Image deletion == File deletion
@@ -221,18 +219,14 @@ class ProxyOfProxyDeleteTest(ProxyDeleteTest):
self.assertEqual(len(FooImage.objects.all()), 0)
+ def test_delete_concrete_parent(self):
+ """
+ Deleting an instance of a concrete model should also delete objects
+ referencing its proxy subclass.
-class ProxyParentDeleteTest(ProxyDeleteTest):
- """
- Tests on_delete cascade behavior for proxy models. Deleting the
- *non-proxy* instance of a model should delete objects referencing the
- proxy.
-
- See #16128.
-
- """
+ """
+ self.create_image()
- def test_delete(self):
File.objects.all().delete()
# A File deletion == Image deletion