summaryrefslogtreecommitdiff
path: root/tests/m2m_signals
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@gmail.com>2015-01-30 01:15:27 +0700
committerLoic Bistuer <loic.bistuer@gmail.com>2015-02-05 12:45:08 +0700
commit71ada3a8e689a883b5ffdeb1744ea16f176ab730 (patch)
tree7e4696ec75370e0747a26c4dea541626573895b2 /tests/m2m_signals
parent49516f7158ed0ca39ea8116d25a32a80288d47b3 (diff)
downloaddjango-71ada3a8e689a883b5ffdeb1744ea16f176ab730.tar.gz
Fixed #6707 -- Added RelatedManager.set() and made descriptors' __set__ use it.
Thanks Anssi Kääriäinen, Carl Meyer, Collin Anderson, and Tim Graham for the reviews.
Diffstat (limited to 'tests/m2m_signals')
-rw-r--r--tests/m2m_signals/tests.py90
1 files changed, 46 insertions, 44 deletions
diff --git a/tests/m2m_signals/tests.py b/tests/m2m_signals/tests.py
index ea4649551d..f41f6efd8e 100644
--- a/tests/m2m_signals/tests.py
+++ b/tests/m2m_signals/tests.py
@@ -254,15 +254,17 @@ class ManyToManySignalsTest(TestCase):
self.vw.default_parts = [self.wheelset, self.doors, self.engine]
expected_messages.append({
'instance': self.vw,
- 'action': 'pre_clear',
+ 'action': 'pre_remove',
'reverse': False,
'model': Part,
+ 'objects': [p6],
})
expected_messages.append({
'instance': self.vw,
- 'action': 'post_clear',
+ 'action': 'post_remove',
'reverse': False,
'model': Part,
+ 'objects': [p6],
})
expected_messages.append({
'instance': self.vw,
@@ -280,23 +282,59 @@ class ManyToManySignalsTest(TestCase):
})
self.assertEqual(self.m2m_changed_messages, expected_messages)
- # Check that signals still work when model inheritance is involved
- c4 = SportsCar.objects.create(name='Bugatti', price='1000000')
- c4b = Car.objects.get(name='Bugatti')
- c4.default_parts = [self.doors]
+ # set by clearing.
+ self.vw.default_parts.set([self.wheelset, self.doors, self.engine], clear=True)
expected_messages.append({
- 'instance': c4,
+ 'instance': self.vw,
'action': 'pre_clear',
'reverse': False,
'model': Part,
})
expected_messages.append({
- 'instance': c4,
+ 'instance': self.vw,
'action': 'post_clear',
'reverse': False,
'model': Part,
})
expected_messages.append({
+ 'instance': self.vw,
+ 'action': 'pre_add',
+ 'reverse': False,
+ 'model': Part,
+ 'objects': [self.doors, self.engine, self.wheelset],
+ })
+ expected_messages.append({
+ 'instance': self.vw,
+ 'action': 'post_add',
+ 'reverse': False,
+ 'model': Part,
+ 'objects': [self.doors, self.engine, self.wheelset],
+ })
+ self.assertEqual(self.m2m_changed_messages, expected_messages)
+
+ # set by only removing what's necessary.
+ self.vw.default_parts.set([self.wheelset, self.doors], clear=False)
+ expected_messages.append({
+ 'instance': self.vw,
+ 'action': 'pre_remove',
+ 'reverse': False,
+ 'model': Part,
+ 'objects': [self.engine],
+ })
+ expected_messages.append({
+ 'instance': self.vw,
+ 'action': 'post_remove',
+ 'reverse': False,
+ 'model': Part,
+ 'objects': [self.engine],
+ })
+ self.assertEqual(self.m2m_changed_messages, expected_messages)
+
+ # Check that signals still work when model inheritance is involved
+ c4 = SportsCar.objects.create(name='Bugatti', price='1000000')
+ c4b = Car.objects.get(name='Bugatti')
+ c4.default_parts = [self.doors]
+ expected_messages.append({
'instance': c4,
'action': 'pre_add',
'reverse': False,
@@ -342,18 +380,6 @@ class ManyToManySignalsTest(TestCase):
self.alice.friends = [self.bob, self.chuck]
expected_messages.append({
'instance': self.alice,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
'action': 'pre_add',
'reverse': False,
'model': Person,
@@ -371,18 +397,6 @@ class ManyToManySignalsTest(TestCase):
self.alice.fans = [self.daisy]
expected_messages.append({
'instance': self.alice,
- 'action': 'pre_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
- 'action': 'post_clear',
- 'reverse': False,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.alice,
'action': 'pre_add',
'reverse': False,
'model': Person,
@@ -400,18 +414,6 @@ class ManyToManySignalsTest(TestCase):
self.chuck.idols = [self.alice, self.bob]
expected_messages.append({
'instance': self.chuck,
- 'action': 'pre_clear',
- 'reverse': True,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.chuck,
- 'action': 'post_clear',
- 'reverse': True,
- 'model': Person,
- })
- expected_messages.append({
- 'instance': self.chuck,
'action': 'pre_add',
'reverse': True,
'model': Person,