diff options
| author | André Ericson <de.ericson@gmail.com> | 2014-10-08 03:27:31 +0700 |
|---|---|---|
| committer | Loic Bistuer <loic.bistuer@gmail.com> | 2014-10-08 04:55:47 +0700 |
| commit | fa4b6482df08d308fe88044b8c8bf981c6225fb8 (patch) | |
| tree | c988171c48c77266e42a09d483681796ec07c806 /tests/generic_relations | |
| parent | dbd52f339cdae7fb57526cb86d45792438799e5b (diff) | |
[1.7.x] Fixed #23611 -- update_or_create failing from a related manager
Added update_or_create to RelatedManager, ManyRelatedManager and
GenericRelatedObjectManager.
Added missing get_or_create to GenericRelatedObjectManager.
Conflicts:
tests/generic_relations/tests.py
tests/get_or_create/tests.py
Backport of ed37f7e979 from master
Diffstat (limited to 'tests/generic_relations')
| -rw-r--r-- | tests/generic_relations/tests.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/generic_relations/tests.py b/tests/generic_relations/tests.py index 3e05bb7225..3508a1096b 100644 --- a/tests/generic_relations/tests.py +++ b/tests/generic_relations/tests.py @@ -309,6 +309,64 @@ class GenericRelationsTests(TestCase): TaggedItem.objects.get(content_object='') +class GetOrCreateAndUpdateOrCreateTests(TestCase): + """ + GenericRelationsTests has changed significantly on master, this + standalone TestCase is part of the backport for #23611. + """ + def setUp(self): + self.bacon = Vegetable.objects.create(name="Bacon", is_yucky=False) + self.bacon.tags.create(tag="fatty") + self.bacon.tags.create(tag="salty") + + def test_generic_update_or_create_when_created(self): + """ + Should be able to use update_or_create from the generic related manager + to create a tag. Refs #23611. + """ + count = self.bacon.tags.count() + tag, created = self.bacon.tags.update_or_create(tag='stinky') + self.assertTrue(created) + self.assertEqual(count + 1, self.bacon.tags.count()) + + def test_generic_update_or_create_when_updated(self): + """ + Should be able to use update_or_create from the generic related manager + to update a tag. Refs #23611. + """ + count = self.bacon.tags.count() + tag = self.bacon.tags.create(tag='stinky') + self.assertEqual(count + 1, self.bacon.tags.count()) + tag, created = self.bacon.tags.update_or_create(defaults={'tag': 'juicy'}, id=tag.id) + self.assertFalse(created) + self.assertEqual(count + 1, self.bacon.tags.count()) + self.assertEqual(tag.tag, 'juicy') + + def test_generic_get_or_create_when_created(self): + """ + Should be able to use get_or_create from the generic related manager + to create a tag. Refs #23611. + """ + count = self.bacon.tags.count() + tag, created = self.bacon.tags.get_or_create(tag='stinky') + self.assertTrue(created) + self.assertEqual(count + 1, self.bacon.tags.count()) + + def test_generic_get_or_create_when_exists(self): + """ + Should be able to use get_or_create from the generic related manager + to get a tag. Refs #23611. + """ + count = self.bacon.tags.count() + tag = self.bacon.tags.create(tag="stinky") + self.assertEqual(count + 1, self.bacon.tags.count()) + tag, created = self.bacon.tags.get_or_create(id=tag.id, defaults={'tag': 'juicy'}) + self.assertFalse(created) + self.assertEqual(count + 1, self.bacon.tags.count()) + # shouldn't had changed the tag + self.assertEqual(tag.tag, 'stinky') + + class CustomWidget(forms.TextInput): pass |
