summaryrefslogtreecommitdiff
path: root/tests/modeltests/signals/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/modeltests/signals/tests.py')
-rw-r--r--tests/modeltests/signals/tests.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/modeltests/signals/tests.py b/tests/modeltests/signals/tests.py
new file mode 100644
index 0000000000..329636c306
--- /dev/null
+++ b/tests/modeltests/signals/tests.py
@@ -0,0 +1,28 @@
+from django.db.models import signals
+from django.test import TestCase
+from modeltests.signals.models import Person
+
+class MyReceiver(object):
+ def __init__(self, param):
+ self.param = param
+ self._run = False
+
+ def __call__(self, signal, sender, **kwargs):
+ self._run = True
+ signal.disconnect(receiver=self, sender=sender)
+
+class SignalTests(TestCase):
+ def test_disconnect_in_dispatch(self):
+ """
+ Test that signals that disconnect when being called don't mess future
+ dispatching.
+ """
+ a, b = MyReceiver(1), MyReceiver(2)
+ signals.post_save.connect(sender=Person, receiver=a)
+ signals.post_save.connect(sender=Person, receiver=b)
+ p = Person.objects.create(first_name='John', last_name='Smith')
+
+ self.failUnless(a._run)
+ self.failUnless(b._run)
+ self.assertEqual(signals.post_save.receivers, [])
+