123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- from __future__ import absolute_import
- from django.test import TestCase
- from django.utils import six
- from .models import Person, Book, Car, PersonManager, PublishedBookManager
- class CustomManagerTests(TestCase):
- def test_manager(self):
- p1 = Person.objects.create(first_name="Bugs", last_name="Bunny", fun=True)
- p2 = Person.objects.create(first_name="Droopy", last_name="Dog", fun=False)
-
- self.assertQuerysetEqual(
- Person.objects.get_fun_people(), [
- "Bugs Bunny"
- ],
- six.text_type
- )
-
-
- for manager in ['custom_queryset_default_manager',
- 'custom_queryset_custom_manager']:
- manager = getattr(Person, manager)
-
- manager.public_method()
-
- with self.assertRaises(AttributeError):
- manager._private_method()
-
- manager._optin_private_method()
-
- with self.assertRaises(AttributeError):
- manager.optout_public_method()
-
- queryset = manager.filter()
- self.assertQuerysetEqual(queryset, ["Bugs Bunny"], six.text_type)
- self.assertEqual(queryset._filter_CustomQuerySet, True)
-
- queryset = manager.values_list('first_name', flat=True).filter()
- self.assertEqual(list(queryset), [six.text_type("Bugs")])
- self.assertEqual(queryset._filter_CustomQuerySet, True)
-
- self.assertEqual(Person.custom_queryset_custom_manager.init_arg, 'hello')
-
- Person.custom_queryset_custom_manager.manager_only()
- with self.assertRaises(AttributeError):
- Person.custom_queryset_custom_manager.all().manager_only()
-
- queryset = Person.custom_queryset_custom_manager.filter()
- self.assertQuerysetEqual(queryset, ["Bugs Bunny"], six.text_type)
- self.assertEqual(queryset._filter_CustomManager, True)
-
-
- self.assertIsInstance(p2.books, PublishedBookManager)
- b1 = Book.published_objects.create(
- title="How to program", author="Rodney Dangerfield", is_published=True
- )
- b2 = Book.published_objects.create(
- title="How to be smart", author="Albert Einstein", is_published=False
- )
-
-
- self.assertRaises(AttributeError, lambda: Book.objects)
-
-
- self.assertIsInstance(b2.authors, PersonManager)
- self.assertQuerysetEqual(
- Book.published_objects.all(), [
- "How to program",
- ],
- lambda b: b.title
- )
- c1 = Car.cars.create(name="Corvette", mileage=21, top_speed=180)
- c2 = Car.cars.create(name="Neon", mileage=31, top_speed=100)
- self.assertQuerysetEqual(
- Car.cars.order_by("name"), [
- "Corvette",
- "Neon",
- ],
- lambda c: c.name
- )
- self.assertQuerysetEqual(
- Car.fast_cars.all(), [
- "Corvette",
- ],
- lambda c: c.name
- )
-
-
-
- self.assertQuerysetEqual(
- Car._default_manager.order_by("name"), [
- "Corvette",
- "Neon",
- ],
- lambda c: c.name
- )
|