summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/queries/tests.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py
index 7d01c16255..780af5a8b7 100644
--- a/tests/regressiontests/queries/tests.py
+++ b/tests/regressiontests/queries/tests.py
@@ -1919,6 +1919,7 @@ class SubqueryTests(TestCase):
class CloneTests(TestCase):
+
def test_evaluated_queryset_as_argument(self):
"#13227 -- If a queryset is already evaluated, it can still be used as a query arg"
n = Note(note='Test1', misc='misc')
@@ -1933,6 +1934,39 @@ class CloneTests(TestCase):
# that query in a way that involves cloning.
self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')
+ def test_no_model_options_cloning(self):
+ """
+ Test that cloning a queryset does not get out of hand. While complete
+ testing is impossible, this is a sanity check against invalid use of
+ deepcopy. refs #16759.
+ """
+ opts_class = type(Note._meta)
+ note_deepcopy = getattr(opts_class, "__deepcopy__", None)
+ opts_class.__deepcopy__ = lambda obj, memo: self.fail("Model options shouldn't be cloned.")
+ try:
+ Note.objects.filter(pk__lte=F('pk') + 1).all()
+ finally:
+ if note_deepcopy is None:
+ delattr(opts_class, "__deepcopy__")
+ else:
+ opts_class.__deepcopy__ = note_deepcopy
+
+ def test_no_fields_cloning(self):
+ """
+ Test that cloning a queryset does not get out of hand. While complete
+ testing is impossible, this is a sanity check against invalid use of
+ deepcopy. refs #16759.
+ """
+ opts_class = type(Note._meta.get_field_by_name("misc")[0])
+ note_deepcopy = getattr(opts_class, "__deepcopy__", None)
+ opts_class.__deepcopy__ = lambda obj, memo: self.fail("Model fields shouldn't be cloned")
+ try:
+ Note.objects.filter(note=F('misc')).all()
+ finally:
+ if note_deepcopy is None:
+ delattr(opts_class, "__deepcopy__")
+ else:
+ opts_class.__deepcopy__ = note_deepcopy
class EmptyQuerySetTests(TestCase):
def test_emptyqueryset_values(self):