# HG changeset patch # User Brodie Rao # Date 1306813701 25200 # Branch releases/1.2.X # Node ID 39ddf40b9554542e7fb205ae1002b3022a5a1175 # Parent b5f81663991987755dbe2bc2371a62571835335c signals: test post_delete signal firing order when deleting an instance and relations diff --git a/tests/regressiontests/fk_post_delete/__init__.py b/tests/regressiontests/fk_post_delete/__init__.py new file mode 100644 --- /dev/null +++ b/tests/regressiontests/fk_post_delete/__init__.py @@ -0,0 +1,1 @@ + diff --git a/tests/regressiontests/fk_post_delete/models.py b/tests/regressiontests/fk_post_delete/models.py new file mode 100644 --- /dev/null +++ b/tests/regressiontests/fk_post_delete/models.py @@ -0,0 +1,7 @@ +from django.db import models + +class Stick(models.Model): + pass + +class Marshmallow(models.Model): + stick = models.ForeignKey(Stick, related_name='stick') diff --git a/tests/regressiontests/fk_post_delete/tests.py b/tests/regressiontests/fk_post_delete/tests.py new file mode 100644 --- /dev/null +++ b/tests/regressiontests/fk_post_delete/tests.py @@ -0,0 +1,55 @@ +""" +Testing foreign key behavior in post_delete signal handlers. +""" + +from django.db import models +from django.test import TestCase + +from models import Stick, Marshmallow + +class PostDeleteTest(TestCase): + def post_delete_signal_receiver(self, signal, sender, **kwargs): + instance = kwargs['instance'] + message = { + 'pk': instance.pk, + 'stick_id': instance.stick_id, + 'extant_stick_pk': [stick.pk for stick in + Stick.objects.filter(pk=instance.stick_id)], + } + self.post_delete_messages.append(message) + + def setUp(self): + self.post_delete_messages = [] + + models.signals.post_delete.connect( + self.post_delete_signal_receiver, Marshmallow + ) + + self.stick = Stick() + self.stick.save() + self.marshmallow = Marshmallow(stick=self.stick) + self.marshmallow.save() + + def tearDown(self): + models.signals.post_delete.disconnect( + self.post_delete_signal_receiver, Marshmallow + ) + +class PostDeleteIDTest(PostDeleteTest): + def test_post_delete_ids(self): + expected_messages = [{ + 'pk': self.marshmallow.pk, + 'stick_id': self.marshmallow.stick_id, + 'extant_stick_pk': [self.stick.pk], + }] + + self.stick.delete() + self.assertEqual(self.post_delete_messages, expected_messages) + + +class PostDeleteFKTest(PostDeleteTest): + def post_delete_signal_receiver(self, signal, sender, **kwargs): + kwargs['instance'].stick + + def test_post_delete_fk(self): + self.stick.delete()