# HG changeset patch
# User Brodie Rao <brodie@bitheap.org>
# 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()
