diff options
| author | Anssi Kääriäinen <anssi.kaariainen@thl.fi> | 2016-02-02 11:33:09 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-04-29 13:06:32 -0400 |
| commit | 7f51876f99851fdc3fef63aecdfbcffa199c26b9 (patch) | |
| tree | 9b2fc6cda60771d699c85a5259ba80b120417fcd /tests | |
| parent | dac075e9103ba961af4f70b4011616daa72985d4 (diff) | |
Fixed #26207 -- Replaced dynamic classes with non-data descriptors for deferred instance loading.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/admin_views/tests.py | 4 | ||||
| -rw-r--r-- | tests/defer/tests.py | 11 | ||||
| -rw-r--r-- | tests/defer_regress/tests.py | 63 |
3 files changed, 7 insertions, 71 deletions
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index b657afe859..b1c7a29a03 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -3650,7 +3650,7 @@ class AdminCustomQuerysetTest(TestCase): self.assertContains( response, '<li class="success">The short message "<a href="%s">' - 'ShortMessage_Deferred_timestamp object</a>" was changed successfully.</li>' % + 'ShortMessage object</a>" was changed successfully.</li>' % reverse('admin:admin_views_shortmessage_change', args=(sm.pk,)), html=True ) @@ -3697,7 +3697,7 @@ class AdminCustomQuerysetTest(TestCase): self.assertContains( response, '<li class="success">The paper "<a href="%s">' - 'Paper_Deferred_author object</a>" was changed successfully.</li>' % + 'Paper object</a>" was changed successfully.</li>' % reverse('admin:admin_views_paper_change', args=(p.pk,)), html=True ) diff --git a/tests/defer/tests.py b/tests/defer/tests.py index b148c31906..8303ab5068 100644 --- a/tests/defer/tests.py +++ b/tests/defer/tests.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.db.models.query_utils import DeferredAttribute, InvalidQuery +from django.db.models.query_utils import InvalidQuery from django.test import TestCase from .models import ( @@ -15,10 +15,7 @@ class AssertionMixin(object): we examine attribute values. Therefore, this method returns the number of deferred fields on returned instances. """ - count = 0 - for field in obj._meta.fields: - if isinstance(obj.__class__.__dict__.get(field.attname), DeferredAttribute): - count += 1 + count = len(obj.get_deferred_fields()) self.assertEqual(count, num) @@ -45,7 +42,9 @@ class DeferTests(AssertionMixin, TestCase): # of them except the model's primary key see #15494 self.assert_delayed(qs.only("pk")[0], 3) # You can use 'pk' with reverse foreign key lookups. - self.assert_delayed(self.s1.primary_set.all().only('pk')[0], 3) + # The related_id is alawys set even if it's not fetched from the DB, + # so pk and related_id are not deferred. + self.assert_delayed(self.s1.primary_set.all().only('pk')[0], 2) def test_defer_only_chaining(self): qs = Primary.objects.all() diff --git a/tests/defer_regress/tests.py b/tests/defer_regress/tests.py index eb2fb8ecfc..899b437120 100644 --- a/tests/defer_regress/tests.py +++ b/tests/defer_regress/tests.py @@ -2,16 +2,10 @@ from __future__ import unicode_literals from operator import attrgetter -from django.apps import apps from django.contrib.contenttypes.models import ContentType from django.contrib.sessions.backends.db import SessionStore -from django.db import models from django.db.models import Count -from django.db.models.query_utils import ( - DeferredAttribute, deferred_class_factory, -) from django.test import TestCase, override_settings -from django.test.utils import isolate_apps from .models import ( Base, Child, Derived, Feature, Item, ItemAndSimpleItem, Leaf, Location, @@ -98,28 +92,6 @@ class DeferRegressionTest(TestCase): list(SimpleItem.objects.annotate(Count('feature')).only('name')), list) - def test_ticket_11936(self): - app_config = apps.get_app_config("defer_regress") - # Regression for #11936 - get_models should not return deferred models - # by default. Run a couple of defer queries so that app registry must - # contain some deferred classes. It might contain a lot more classes - # depending on the order the tests are ran. - list(Item.objects.defer("name")) - list(Child.objects.defer("value")) - klasses = {model.__name__ for model in app_config.get_models()} - 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 app_config.get_models())) - - klasses_with_deferred = {model.__name__ for model in app_config.get_models(include_deferred=True)} - self.assertIn("Child", klasses_with_deferred) - self.assertIn("Item", klasses_with_deferred) - self.assertIn("Child_Deferred_value", klasses_with_deferred) - self.assertIn("Item_Deferred_name", klasses_with_deferred) - self.assertTrue(any(k._deferred for k in app_config.get_models(include_deferred=True))) - @override_settings(SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer') def test_ticket_12163(self): # Test for #12163 - Pickling error saving session with unsaved model @@ -246,41 +218,6 @@ class DeferRegressionTest(TestCase): qs = SpecialFeature.objects.only('feature__item__name').select_related('feature__item') self.assertEqual(len(qs), 1) - def test_deferred_class_factory(self): - new_class = deferred_class_factory( - Item, - ('this_is_some_very_long_attribute_name_so_modelname_truncation_is_triggered',)) - self.assertEqual( - new_class.__name__, - 'Item_Deferred_this_is_some_very_long_attribute_nac34b1f495507dad6b02e2cb235c875e') - - def test_deferred_class_factory_already_deferred(self): - deferred_item1 = deferred_class_factory(Item, ('name',)) - deferred_item2 = deferred_class_factory(deferred_item1, ('value',)) - self.assertIs(deferred_item2._meta.proxy_for_model, Item) - self.assertNotIsInstance(deferred_item2.__dict__.get('name'), DeferredAttribute) - self.assertIsInstance(deferred_item2.__dict__.get('value'), DeferredAttribute) - - def test_deferred_class_factory_no_attrs(self): - deferred_cls = deferred_class_factory(Item, ()) - self.assertFalse(deferred_cls._deferred) - - @isolate_apps('defer_regress', kwarg_name='apps') - def test_deferred_class_factory_apps_reuse(self, apps): - """ - #25563 - model._meta.apps should be used for caching and - retrieval of the created proxy class. - """ - class BaseModel(models.Model): - field = models.BooleanField() - - class Meta: - app_label = 'defer_regress' - - deferred_model = deferred_class_factory(BaseModel, ['field']) - self.assertIs(deferred_model._meta.apps, apps) - self.assertIs(deferred_class_factory(BaseModel, ['field']), deferred_model) - class DeferAnnotateSelectRelatedTest(TestCase): def test_defer_annotate_select_related(self): |
