Reorganized proxy-delete tests for easier addition of new tests. Refs #16128.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17755 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Carl Meyer 2012-03-16 23:27:40 +00:00
parent c8c59c812c
commit edcaf8b7ff
1 changed files with 30 additions and 36 deletions

View File

@ -152,28 +152,35 @@ class LargeDeleteTests(TestCase):
class ProxyDeleteTest(TestCase): class ProxyDeleteTest(TestCase):
""" """
Tests on_delete behavior for proxy models. Deleting the *proxy* Tests on_delete behavior for proxy models.
instance bubbles through to its non-proxy and *all* referring objects
are deleted.
See #16128. See #16128.
""" """
def create_image(self):
def setUp(self): """Return an Image referenced by both a FooImage and a FooFile."""
# Create an Image # Create an Image
self.test_image = Image() test_image = Image()
self.test_image.save() test_image.save()
foo_image = FooImage(my_image=self.test_image) foo_image = FooImage(my_image=test_image)
foo_image.save() foo_image.save()
# Get the Image instance as a File # 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 = FooFile(my_file=test_file)
foo_file.save() 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() Image.objects.all().delete()
# An Image deletion == File deletion # An Image deletion == File deletion
@ -185,28 +192,19 @@ class ProxyDeleteTest(TestCase):
self.assertEqual(len(FooFile.objects.all()), 0) self.assertEqual(len(FooFile.objects.all()), 0)
def test_delete_proxy_of_proxy(self):
class ProxyOfProxyDeleteTest(ProxyDeleteTest):
""" """
Tests on_delete behavior for proxy-of-proxy models. Deleting the *proxy* Deleting a proxy-of-proxy instance should bubble through to its proxy
instance should bubble through to its proxy and non-proxy variants. and non-proxy parents, deleting *all* referring objects.
Deleting *all* referring objects.
See #16128.
""" """
test_image = self.create_image()
def setUp(self):
# Create the Image, FooImage and FooFile instances
super(ProxyOfProxyDeleteTest, self).setUp()
# Get the Image as a Photo # 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 = FooPhoto(my_photo=test_photo)
foo_photo.save() foo_photo.save()
def test_delete(self):
Photo.objects.all().delete() Photo.objects.all().delete()
# A Photo deletion == Image deletion == File deletion # A Photo deletion == Image deletion == File deletion
@ -221,18 +219,14 @@ class ProxyOfProxyDeleteTest(ProxyDeleteTest):
self.assertEqual(len(FooImage.objects.all()), 0) self.assertEqual(len(FooImage.objects.all()), 0)
def test_delete_concrete_parent(self):
class ProxyParentDeleteTest(ProxyDeleteTest):
""" """
Tests on_delete cascade behavior for proxy models. Deleting the Deleting an instance of a concrete model should also delete objects
*non-proxy* instance of a model should delete objects referencing the referencing its proxy subclass.
proxy.
See #16128.
""" """
self.create_image()
def test_delete(self):
File.objects.all().delete() File.objects.all().delete()
# A File deletion == Image deletion # A File deletion == Image deletion