summaryrefslogtreecommitdiff
path: root/tests/get_or_create
diff options
context:
space:
mode:
authorFrançois Freitag <francois.freitag@polyconseil.fr>2016-09-15 20:42:31 -0700
committerTim Graham <timograham@gmail.com>2016-09-24 20:16:16 -0400
commita5e13a0b926156f7885a0f1d8b300221f74601fc (patch)
treedd30bf8bffc998936e69f1f02edd3f4157ee688b /tests/get_or_create
parentb3330f52a86e79d3d2323d6a7347b7b0bdf5b3fa (diff)
downloaddjango-a5e13a0b926156f7885a0f1d8b300221f74601fc.tar.gz
Fixed #27118 -- Made QuerySet.get_or_create()/update_or_create() error for a non-field in their arguments.
Diffstat (limited to 'tests/get_or_create')
-rw-r--r--tests/get_or_create/tests.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/get_or_create/tests.py b/tests/get_or_create/tests.py
index 108c8e3b4f..c569d938b0 100644
--- a/tests/get_or_create/tests.py
+++ b/tests/get_or_create/tests.py
@@ -5,9 +5,10 @@ import traceback
from datetime import date, datetime, timedelta
from threading import Thread
+from django.core.exceptions import FieldError
from django.db import DatabaseError, IntegrityError, connection
from django.test import (
- TestCase, TransactionTestCase, ignore_warnings, skipUnlessDBFeature,
+ SimpleTestCase, TestCase, TransactionTestCase, ignore_warnings, skipUnlessDBFeature,
)
from django.utils.encoding import DjangoUnicodeDecodeError
@@ -484,3 +485,27 @@ class UpdateOrCreateTransactionTests(TransactionTestCase):
updated_person = Person.objects.get(first_name='John')
self.assertGreater(after_update - before_start, timedelta(seconds=0.5))
self.assertEqual(updated_person.last_name, 'NotLennon')
+
+
+class InvalidCreateArgumentsTests(SimpleTestCase):
+ msg = "Invalid field name(s) for model Thing: 'nonexistent'."
+
+ def test_get_or_create_with_invalid_defaults(self):
+ with self.assertRaisesMessage(FieldError, self.msg):
+ Thing.objects.get_or_create(name='a', defaults={'nonexistent': 'b'})
+
+ def test_get_or_create_with_invalid_kwargs(self):
+ with self.assertRaisesMessage(FieldError, self.msg):
+ Thing.objects.get_or_create(name='a', nonexistent='b')
+
+ def test_update_or_create_with_invalid_defaults(self):
+ with self.assertRaisesMessage(FieldError, self.msg):
+ Thing.objects.update_or_create(name='a', defaults={'nonexistent': 'b'})
+
+ def test_update_or_create_with_invalid_kwargs(self):
+ with self.assertRaisesMessage(FieldError, self.msg):
+ Thing.objects.update_or_create(name='a', nonexistent='b')
+
+ def test_multiple_invalid_fields(self):
+ with self.assertRaisesMessage(FieldError, "Invalid field name(s) for model Thing: 'invalid', 'nonexistent'"):
+ Thing.objects.update_or_create(name='a', nonexistent='b', defaults={'invalid': 'c'})