summaryrefslogtreecommitdiff
path: root/tests/generic_relations
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2025-04-14 15:12:28 +0100
committerJacob Walls <jacobtylerwalls@gmail.com>2025-10-16 14:52:22 -0400
commit6dc9b04018032dccbb5ad8347f7ddf4341316166 (patch)
treeda87f218b3992788d5804c552edffd270c030b7a /tests/generic_relations
parent821619aa8771ef211c4c4922001efdf914201ca3 (diff)
Refs #28586 -- Copied fetch modes to related objects.
This change ensures that behavior and performance remain consistent when traversing relationships.
Diffstat (limited to 'tests/generic_relations')
-rw-r--r--tests/generic_relations/tests.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/tests/generic_relations/tests.py b/tests/generic_relations/tests.py
index 3de243d7b8..dceb8f4bae 100644
--- a/tests/generic_relations/tests.py
+++ b/tests/generic_relations/tests.py
@@ -813,7 +813,6 @@ class GenericRelationsTests(TestCase):
self.assertEqual(quartz_tag.content_object, self.quartz)
def test_fetch_mode_raise(self):
- TaggedItem.objects.create(tag="lion", content_object=self.lion)
tag = TaggedItem.objects.fetch_mode(RAISE).get(tag="yellow")
msg = "Fetching of TaggedItem.content_object blocked."
with self.assertRaisesMessage(FieldFetchBlocked, msg) as cm:
@@ -821,6 +820,37 @@ class GenericRelationsTests(TestCase):
self.assertIsNone(cm.exception.__cause__)
self.assertTrue(cm.exception.__suppress_context__)
+ def test_fetch_mode_copied_forward_fetching_one(self):
+ tag = TaggedItem.objects.fetch_mode(FETCH_PEERS).get(tag="yellow")
+ self.assertEqual(tag.content_object, self.lion)
+ self.assertEqual(
+ tag.content_object._state.fetch_mode,
+ FETCH_PEERS,
+ )
+
+ def test_fetch_mode_copied_forward_fetching_many(self):
+ tags = list(TaggedItem.objects.fetch_mode(FETCH_PEERS).order_by("tag"))
+ tag = [t for t in tags if t.tag == "yellow"][0]
+ self.assertEqual(tag.content_object, self.lion)
+ self.assertEqual(
+ tag.content_object._state.fetch_mode,
+ FETCH_PEERS,
+ )
+
+ def test_fetch_mode_copied_reverse_fetching_one(self):
+ animal = Animal.objects.fetch_mode(FETCH_PEERS).get(pk=self.lion.pk)
+ self.assertEqual(animal._state.fetch_mode, FETCH_PEERS)
+ tag = animal.tags.get(tag="yellow")
+ self.assertEqual(tag._state.fetch_mode, FETCH_PEERS)
+
+ def test_fetch_mode_copied_reverse_fetching_many(self):
+ animals = list(Animal.objects.fetch_mode(FETCH_PEERS))
+ animal = animals[0]
+ self.assertEqual(animal._state.fetch_mode, FETCH_PEERS)
+ tags = list(animal.tags.all())
+ tag = tags[0]
+ self.assertEqual(tag._state.fetch_mode, FETCH_PEERS)
+
class ProxyRelatedModelTest(TestCase):
def test_default_behavior(self):