/tests/modeltests/custom_managers/tests.py

https://code.google.com/p/mango-py/ · Python · 71 lines · 49 code · 13 blank · 9 comment · 0 complexity · ee376fbf1df13b3112c3b3c8f8e30c61 MD5 · raw file

  1. from django.test import TestCase
  2. from models import Person, Book, Car, PersonManager, PublishedBookManager
  3. class CustomManagerTests(TestCase):
  4. def test_manager(self):
  5. p1 = Person.objects.create(first_name="Bugs", last_name="Bunny", fun=True)
  6. p2 = Person.objects.create(first_name="Droopy", last_name="Dog", fun=False)
  7. self.assertQuerysetEqual(
  8. Person.objects.get_fun_people(), [
  9. "Bugs Bunny"
  10. ],
  11. unicode
  12. )
  13. # The RelatedManager used on the 'books' descriptor extends the default
  14. # manager
  15. self.assertTrue(isinstance(p2.books, PublishedBookManager))
  16. b1 = Book.published_objects.create(
  17. title="How to program", author="Rodney Dangerfield", is_published=True
  18. )
  19. b2 = Book.published_objects.create(
  20. title="How to be smart", author="Albert Einstein", is_published=False
  21. )
  22. # The default manager, "objects", doesn't exist, because a custom one
  23. # was provided.
  24. self.assertRaises(AttributeError, lambda: Book.objects)
  25. # The RelatedManager used on the 'authors' descriptor extends the
  26. # default manager
  27. self.assertTrue(isinstance(b2.authors, PersonManager))
  28. self.assertQuerysetEqual(
  29. Book.published_objects.all(), [
  30. "How to program",
  31. ],
  32. lambda b: b.title
  33. )
  34. c1 = Car.cars.create(name="Corvette", mileage=21, top_speed=180)
  35. c2 = Car.cars.create(name="Neon", mileage=31, top_speed=100)
  36. self.assertQuerysetEqual(
  37. Car.cars.order_by("name"), [
  38. "Corvette",
  39. "Neon",
  40. ],
  41. lambda c: c.name
  42. )
  43. self.assertQuerysetEqual(
  44. Car.fast_cars.all(), [
  45. "Corvette",
  46. ],
  47. lambda c: c.name
  48. )
  49. # Each model class gets a "_default_manager" attribute, which is a
  50. # reference to the first manager defined in the class. In this case,
  51. # it's "cars".
  52. self.assertQuerysetEqual(
  53. Car._default_manager.order_by("name"), [
  54. "Corvette",
  55. "Neon",
  56. ],
  57. lambda c: c.name
  58. )