summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/prefetch_related/test_prefetch_related_objects.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/prefetch_related/test_prefetch_related_objects.py b/tests/prefetch_related/test_prefetch_related_objects.py
index eea9a7fff7..20f620417a 100644
--- a/tests/prefetch_related/test_prefetch_related_objects.py
+++ b/tests/prefetch_related/test_prefetch_related_objects.py
@@ -1,3 +1,5 @@
+from collections import deque
+
from django.db.models import Prefetch, prefetch_related_objects
from django.test import TestCase
@@ -221,3 +223,32 @@ class PrefetchRelatedObjectsTests(TestCase):
with self.assertNumQueries(0):
self.assertCountEqual(book1.authors.all(), [self.author1, self.author2])
+
+ def test_prefetch_related_objects_with_various_iterables(self):
+ book = self.book1
+
+ class MyIterable:
+ def __iter__(self):
+ yield book
+
+ cases = {
+ "set": {book},
+ "tuple": (book,),
+ "dict_values": {"a": book}.values(),
+ "frozenset": frozenset([book]),
+ "deque": deque([book]),
+ "custom iterator": MyIterable(),
+ }
+ for case_type, case in cases.items():
+ with self.subTest(case=case_type):
+ # Clear the prefetch cache.
+ book._prefetched_objects_cache = {}
+ with self.assertNumQueries(1):
+ prefetch_related_objects(case, "authors")
+ with self.assertNumQueries(0):
+ self.assertCountEqual(
+ book.authors.all(), [self.author1, self.author2, self.author3]
+ )
+
+ def test_prefetch_related_objects_empty(self):
+ prefetch_related_objects([], "authors")