summaryrefslogtreecommitdiff
path: root/tests/generic_relations
diff options
context:
space:
mode:
authorAndré Ericson <de.ericson@gmail.com>2014-10-08 03:27:31 +0700
committerLoic Bistuer <loic.bistuer@gmail.com>2014-10-08 04:55:47 +0700
commitfa4b6482df08d308fe88044b8c8bf981c6225fb8 (patch)
treec988171c48c77266e42a09d483681796ec07c806 /tests/generic_relations
parentdbd52f339cdae7fb57526cb86d45792438799e5b (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.py58
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