diff options
author | Loic Bistuer <loic.bistuer@gmail.com> | 2015-01-30 01:15:27 +0700 |
---|---|---|
committer | Loic Bistuer <loic.bistuer@gmail.com> | 2015-02-05 12:45:08 +0700 |
commit | 71ada3a8e689a883b5ffdeb1744ea16f176ab730 (patch) | |
tree | 7e4696ec75370e0747a26c4dea541626573895b2 /tests/m2m_signals | |
parent | 49516f7158ed0ca39ea8116d25a32a80288d47b3 (diff) | |
download | django-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.py | 90 |
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, |