summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2019-11-15 16:20:07 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-18 14:06:51 +0100
commit11e327a3ff84e16ceace13ea6ec408a93ca9e72c (patch)
tree438e482ac75e6ae404920493a628eb00e7519e59 /tests
parentcbe4d6203ff2d702b63dae52adbe7a50830a5cbe (diff)
Fixed #30988 -- Deprecated the InvalidQuery exception.
It was barely documented without pointers at its defining location and was abused to prevent misuse of the QuerySet field deferring feature.
Diffstat (limited to 'tests')
-rw-r--r--tests/defer/tests.py6
-rw-r--r--tests/queries/test_deprecation.py30
-rw-r--r--tests/raw_query/tests.py5
3 files changed, 36 insertions, 5 deletions
diff --git a/tests/defer/tests.py b/tests/defer/tests.py
index b67c5d9a5e..b85475f74f 100644
--- a/tests/defer/tests.py
+++ b/tests/defer/tests.py
@@ -1,4 +1,4 @@
-from django.db.models.query_utils import InvalidQuery
+from django.core.exceptions import FieldError
from django.test import TestCase
from .models import (
@@ -113,7 +113,7 @@ class DeferTests(AssertionMixin, TestCase):
'Field Primary.related cannot be both deferred and traversed '
'using select_related at the same time.'
)
- with self.assertRaisesMessage(InvalidQuery, msg):
+ with self.assertRaisesMessage(FieldError, msg):
Primary.objects.defer("related").select_related("related")[0]
def test_only_select_related_raises_invalid_query(self):
@@ -121,7 +121,7 @@ class DeferTests(AssertionMixin, TestCase):
'Field Primary.related cannot be both deferred and traversed using '
'select_related at the same time.'
)
- with self.assertRaisesMessage(InvalidQuery, msg):
+ with self.assertRaisesMessage(FieldError, msg):
Primary.objects.only("name").select_related("related")[0]
def test_defer_foreign_keys_are_deferred_and_not_traversed(self):
diff --git a/tests/queries/test_deprecation.py b/tests/queries/test_deprecation.py
new file mode 100644
index 0000000000..1dc8031fa7
--- /dev/null
+++ b/tests/queries/test_deprecation.py
@@ -0,0 +1,30 @@
+from contextlib import contextmanager
+
+from django.core.exceptions import FieldDoesNotExist, FieldError
+from django.db.models.query_utils import InvalidQuery
+from django.test import SimpleTestCase
+from django.utils.deprecation import RemovedInDjango40Warning
+
+
+class InvalidQueryTests(SimpleTestCase):
+ @contextmanager
+ def assert_warns(self):
+ msg = (
+ 'The InvalidQuery exception class is deprecated. Use '
+ 'FieldDoesNotExist or FieldError instead.'
+ )
+ with self.assertWarnsMessage(RemovedInDjango40Warning, msg):
+ yield
+
+ def test_type(self):
+ self.assertIsInstance(InvalidQuery(), InvalidQuery)
+
+ def test_isinstance(self):
+ for exception in (FieldError, FieldDoesNotExist):
+ with self.assert_warns(), self.subTest(exception.__name__):
+ self.assertIsInstance(exception(), InvalidQuery)
+
+ def test_issubclass(self):
+ for exception in (FieldError, FieldDoesNotExist, InvalidQuery):
+ with self.assert_warns(), self.subTest(exception.__name__):
+ self.assertIs(issubclass(exception, InvalidQuery), True)
diff --git a/tests/raw_query/tests.py b/tests/raw_query/tests.py
index 703a6b311e..bc9ed47c81 100644
--- a/tests/raw_query/tests.py
+++ b/tests/raw_query/tests.py
@@ -1,8 +1,8 @@
from datetime import date
from decimal import Decimal
+from django.core.exceptions import FieldDoesNotExist
from django.db.models.query import RawQuerySet
-from django.db.models.query_utils import InvalidQuery
from django.test import TestCase, skipUnlessDBFeature
from .models import (
@@ -235,7 +235,8 @@ class RawQueryTests(TestCase):
def test_missing_fields_without_PK(self):
query = "SELECT first_name, dob FROM raw_query_author"
- with self.assertRaisesMessage(InvalidQuery, 'Raw query must include the primary key'):
+ msg = 'Raw query must include the primary key'
+ with self.assertRaisesMessage(FieldDoesNotExist, msg):
list(Author.objects.raw(query))
def test_annotations(self):