mirror of
				https://github.com/django/django.git
				synced 2025-11-04 13:39:16 +00:00 
			
		
		
		
	Made an app-cache test not dependent on all models in defer_regress
This commit is contained in:
		
							parent
							
								
									e6ff238431
								
							
						
					
					
						commit
						bb80d2976b
					
				
					 1 changed files with 33 additions and 52 deletions
				
			
		| 
						 | 
					@ -98,29 +98,36 @@ class DeferRegressionTest(TestCase):
 | 
				
			||||||
        i2 = s["item"]
 | 
					        i2 = s["item"]
 | 
				
			||||||
        self.assertFalse(i2._deferred)
 | 
					        self.assertFalse(i2._deferred)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Regression for #16409 - make sure defer() and only() work with annotate()
 | 
				
			||||||
 | 
					        self.assertIsInstance(
 | 
				
			||||||
 | 
					            list(SimpleItem.objects.annotate(Count('feature')).defer('name')),
 | 
				
			||||||
 | 
					            list)
 | 
				
			||||||
 | 
					        self.assertIsInstance(
 | 
				
			||||||
 | 
					            list(SimpleItem.objects.annotate(Count('feature')).only('name')),
 | 
				
			||||||
 | 
					            list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_ticket_11936(self):
 | 
				
			||||||
        # Regression for #11936 - loading.get_models should not return deferred
 | 
					        # Regression for #11936 - loading.get_models should not return deferred
 | 
				
			||||||
        # models by default.
 | 
					        # models by default.
 | 
				
			||||||
        klasses = sorted(
 | 
					        # Run a couple of defer queries so that app-cache must contain some
 | 
				
			||||||
            cache.get_models(cache.get_app("defer_regress")),
 | 
					        # deferred classes. It might contain a lot more classes depending on
 | 
				
			||||||
            key=lambda klass: klass.__name__
 | 
					        # the order the tests are ran.
 | 
				
			||||||
 | 
					        list(Item.objects.defer("name"))
 | 
				
			||||||
 | 
					        list(Child.objects.defer("value"))
 | 
				
			||||||
 | 
					        klasses = set(
 | 
				
			||||||
 | 
					            map(
 | 
				
			||||||
 | 
					                attrgetter("__name__"),
 | 
				
			||||||
 | 
					                cache.get_models(cache.get_app("defer_regress"))
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        self.assertEqual(
 | 
					 | 
				
			||||||
            klasses, [
 | 
					 | 
				
			||||||
                Child,
 | 
					 | 
				
			||||||
                Feature,
 | 
					 | 
				
			||||||
                Item,
 | 
					 | 
				
			||||||
                ItemAndSimpleItem,
 | 
					 | 
				
			||||||
                Leaf,
 | 
					 | 
				
			||||||
                OneToOneItem,
 | 
					 | 
				
			||||||
                Proxy,
 | 
					 | 
				
			||||||
                RelatedItem,
 | 
					 | 
				
			||||||
                ResolveThis,
 | 
					 | 
				
			||||||
                SimpleItem,
 | 
					 | 
				
			||||||
                SpecialFeature,
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        self.assertIn("Child", klasses)
 | 
				
			||||||
 | 
					        self.assertIn("Item", klasses)
 | 
				
			||||||
 | 
					        self.assertNotIn("Child_Deferred_value", klasses)
 | 
				
			||||||
 | 
					        self.assertNotIn("Item_Deferred_name", klasses)
 | 
				
			||||||
 | 
					        self.assertFalse(any(
 | 
				
			||||||
 | 
					            k._deferred for k in cache.get_models(cache.get_app("defer_regress"))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        klasses = sorted(
 | 
					        klasses_with_deferred = set(
 | 
				
			||||||
            map(
 | 
					            map(
 | 
				
			||||||
                attrgetter("__name__"),
 | 
					                attrgetter("__name__"),
 | 
				
			||||||
                cache.get_models(
 | 
					                cache.get_models(
 | 
				
			||||||
| 
						 | 
					@ -128,41 +135,15 @@ class DeferRegressionTest(TestCase):
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        # FIXME: This is dependent on the order in which tests are run --
 | 
					        self.assertIn("Child", klasses_with_deferred)
 | 
				
			||||||
        # this test case has to be the first, otherwise a LOT more classes
 | 
					        self.assertIn("Item", klasses_with_deferred)
 | 
				
			||||||
        # appear.
 | 
					        self.assertIn("Child_Deferred_value", klasses_with_deferred)
 | 
				
			||||||
        self.assertEqual(
 | 
					        self.assertIn("Item_Deferred_name", klasses_with_deferred)
 | 
				
			||||||
            klasses, [
 | 
					        self.assertTrue(any(
 | 
				
			||||||
                "Child",
 | 
					            k._deferred for k in cache.get_models(
 | 
				
			||||||
                "Child_Deferred_value",
 | 
					                cache.get_app("defer_regress"), include_deferred=True))
 | 
				
			||||||
                "Feature",
 | 
					 | 
				
			||||||
                "Item",
 | 
					 | 
				
			||||||
                "ItemAndSimpleItem",
 | 
					 | 
				
			||||||
                "Item_Deferred_name",
 | 
					 | 
				
			||||||
                "Item_Deferred_name_other_value_text",
 | 
					 | 
				
			||||||
                "Item_Deferred_name_other_value_value",
 | 
					 | 
				
			||||||
                "Item_Deferred_other_value_text_value",
 | 
					 | 
				
			||||||
                "Item_Deferred_text_value",
 | 
					 | 
				
			||||||
                "Leaf",
 | 
					 | 
				
			||||||
                "Leaf_Deferred_child_id_second_child_id_value",
 | 
					 | 
				
			||||||
                "Leaf_Deferred_name_value",
 | 
					 | 
				
			||||||
                "Leaf_Deferred_second_child_id_value",
 | 
					 | 
				
			||||||
                "Leaf_Deferred_value",
 | 
					 | 
				
			||||||
                "OneToOneItem",
 | 
					 | 
				
			||||||
                "Proxy",
 | 
					 | 
				
			||||||
                "RelatedItem",
 | 
					 | 
				
			||||||
                "RelatedItem_Deferred_",
 | 
					 | 
				
			||||||
                "RelatedItem_Deferred_item_id",
 | 
					 | 
				
			||||||
                "ResolveThis",
 | 
					 | 
				
			||||||
                "SimpleItem",
 | 
					 | 
				
			||||||
                "SpecialFeature",
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Regression for #16409 - make sure defer() and only() work with annotate()
 | 
					 | 
				
			||||||
        self.assertIsInstance(list(SimpleItem.objects.annotate(Count('feature')).defer('name')), list)
 | 
					 | 
				
			||||||
        self.assertIsInstance(list(SimpleItem.objects.annotate(Count('feature')).only('name')), list)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_only_and_defer_usage_on_proxy_models(self):
 | 
					    def test_only_and_defer_usage_on_proxy_models(self):
 | 
				
			||||||
        # Regression for #15790 - only() broken for proxy models
 | 
					        # Regression for #15790 - only() broken for proxy models
 | 
				
			||||||
        proxy = Proxy.objects.create(name="proxy", value=42)
 | 
					        proxy = Proxy.objects.create(name="proxy", value=42)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue