123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- from __future__ import unicode_literals
- from django.db import models
- from django.template import Context, Template
- from django.test import TestCase, override_settings
- from django.test.utils import isolate_apps
- from django.utils.encoding import force_text
- from .models import (
- AbstractBase1, AbstractBase2, AbstractBase3, Child1, Child2, Child3,
- Child4, Child5, Child6, Child7, RelatedModel, RelationModel,
- )
- class ManagersRegressionTests(TestCase):
- def test_managers(self):
- Child1.objects.create(name='fred', data='a1')
- Child1.objects.create(name='barney', data='a2')
- Child2.objects.create(name='fred', data='b1', value=1)
- Child2.objects.create(name='barney', data='b2', value=42)
- Child3.objects.create(name='fred', data='c1', comment='yes')
- Child3.objects.create(name='barney', data='c2', comment='no')
- Child4.objects.create(name='fred', data='d1')
- Child4.objects.create(name='barney', data='d2')
- Child5.objects.create(name='fred', comment='yes')
- Child5.objects.create(name='barney', comment='no')
- Child6.objects.create(name='fred', data='f1', value=42)
- Child6.objects.create(name='barney', data='f2', value=42)
- Child7.objects.create(name='fred')
- Child7.objects.create(name='barney')
- self.assertQuerysetEqual(Child1.manager1.all(), ["<Child1: a1>"])
- self.assertQuerysetEqual(Child1.manager2.all(), ["<Child1: a2>"])
- self.assertQuerysetEqual(Child1._default_manager.all(), ["<Child1: a1>"])
- self.assertQuerysetEqual(Child2._default_manager.all(), ["<Child2: b1>"])
- self.assertQuerysetEqual(Child2.restricted.all(), ["<Child2: b2>"])
- self.assertQuerysetEqual(Child3._default_manager.all(), ["<Child3: c1>"])
- self.assertQuerysetEqual(Child3.manager1.all(), ["<Child3: c1>"])
- self.assertQuerysetEqual(Child3.manager2.all(), ["<Child3: c2>"])
-
-
- self.assertQuerysetEqual(Child4._default_manager.order_by('data'), [
- "<Child4: d1>",
- "<Child4: d2>",
- "<Child4: f1>",
- "<Child4: f2>",
- ])
- self.assertQuerysetEqual(Child4.manager1.all(), ["<Child4: d1>", "<Child4: f1>"], ordered=False)
- self.assertQuerysetEqual(Child5._default_manager.all(), ["<Child5: fred>"])
- self.assertQuerysetEqual(Child6._default_manager.all(), ["<Child6: f1>", "<Child6: f2>"], ordered=False)
- self.assertQuerysetEqual(
- Child7._default_manager.order_by('name'),
- ["<Child7: barney>", "<Child7: fred>"]
- )
- def test_abstract_manager(self):
-
-
-
-
-
-
- msg = "type object 'AbstractBase3' has no attribute 'objects'"
- with self.assertRaisesMessage(AttributeError, msg):
- AbstractBase3.objects.all()
- def test_custom_abstract_manager(self):
-
-
-
- msg = "Manager isn't available; AbstractBase2 is abstract"
- with self.assertRaisesMessage(AttributeError, msg):
- AbstractBase2.restricted.all()
- def test_explicit_abstract_manager(self):
-
-
-
- msg = "Manager isn't available; AbstractBase1 is abstract"
- with self.assertRaisesMessage(AttributeError, msg):
- AbstractBase1.objects.all()
- @override_settings(TEST_SWAPPABLE_MODEL='managers_regress.Parent')
- @isolate_apps('managers_regress')
- def test_swappable_manager(self):
- class SwappableModel(models.Model):
- class Meta:
- swappable = 'TEST_SWAPPABLE_MODEL'
-
-
- msg = (
- "Manager isn't available; 'managers_regress.SwappableModel' "
- "has been swapped for 'managers_regress.Parent'"
- )
- with self.assertRaisesMessage(AttributeError, msg):
- SwappableModel.objects.all()
- @override_settings(TEST_SWAPPABLE_MODEL='managers_regress.Parent')
- @isolate_apps('managers_regress')
- def test_custom_swappable_manager(self):
- class SwappableModel(models.Model):
- stuff = models.Manager()
- class Meta:
- swappable = 'TEST_SWAPPABLE_MODEL'
-
-
-
- msg = (
- "Manager isn't available; 'managers_regress.SwappableModel' "
- "has been swapped for 'managers_regress.Parent'"
- )
- with self.assertRaisesMessage(AttributeError, msg):
- SwappableModel.stuff.all()
- @override_settings(TEST_SWAPPABLE_MODEL='managers_regress.Parent')
- @isolate_apps('managers_regress')
- def test_explicit_swappable_manager(self):
- class SwappableModel(models.Model):
- objects = models.Manager()
- class Meta:
- swappable = 'TEST_SWAPPABLE_MODEL'
-
-
-
- msg = (
- "Manager isn't available; 'managers_regress.SwappableModel' "
- "has been swapped for 'managers_regress.Parent'"
- )
- with self.assertRaisesMessage(AttributeError, msg):
- SwappableModel.objects.all()
- def test_regress_3871(self):
- related = RelatedModel.objects.create()
- relation = RelationModel()
- relation.fk = related
- relation.gfk = related
- relation.save()
- relation.m2m.add(related)
- t = Template('{{ related.test_fk.all.0 }}{{ related.test_gfk.all.0 }}{{ related.test_m2m.all.0 }}')
- self.assertEqual(
- t.render(Context({'related': related})),
- ''.join([force_text(relation.pk)] * 3),
- )
- def test_field_can_be_called_exact(self):
-
-
-
- related = RelatedModel.objects.create(exact=False)
- relation = related.test_fk.create()
- self.assertEqual(related.test_fk.get(), relation)
|