/tests/regressiontests/custom_managers_regress/tests.py

https://code.google.com/p/mango-py/ · Python · 47 lines · 22 code · 9 blank · 16 comment · 1 complexity · 61247b5ed1e7020fb6942d97c015601b MD5 · raw file

  1. from django.test import TestCase
  2. from models import RelatedModel, RestrictedModel, OneToOneRestrictedModel
  3. class CustomManagersRegressTestCase(TestCase):
  4. def test_filtered_default_manager(self):
  5. """Even though the default manager filters out some records,
  6. we must still be able to save (particularly, save by updating
  7. existing records) those filtered instances. This is a
  8. regression test for #8990, #9527"""
  9. related = RelatedModel.objects.create(name="xyzzy")
  10. obj = RestrictedModel.objects.create(name="hidden", related=related)
  11. obj.name = "still hidden"
  12. obj.save()
  13. # If the hidden object wasn't seen during the save process,
  14. # there would now be two objects in the database.
  15. self.assertEqual(RestrictedModel.plain_manager.count(), 1)
  16. def test_delete_related_on_filtered_manager(self):
  17. """Deleting related objects should also not be distracted by a
  18. restricted manager on the related object. This is a regression
  19. test for #2698."""
  20. related = RelatedModel.objects.create(name="xyzzy")
  21. for name, public in (('one', True), ('two', False), ('three', False)):
  22. RestrictedModel.objects.create(name=name, is_public=public, related=related)
  23. obj = RelatedModel.objects.get(name="xyzzy")
  24. obj.delete()
  25. # All of the RestrictedModel instances should have been
  26. # deleted, since they *all* pointed to the RelatedModel. If
  27. # the default manager is used, only the public one will be
  28. # deleted.
  29. self.assertEqual(len(RestrictedModel.plain_manager.all()), 0)
  30. def test_delete_one_to_one_manager(self):
  31. # The same test case as the last one, but for one-to-one
  32. # models, which are implemented slightly different internally,
  33. # so it's a different code path.
  34. obj = RelatedModel.objects.create(name="xyzzy")
  35. OneToOneRestrictedModel.objects.create(name="foo", is_public=False, related=obj)
  36. obj = RelatedModel.objects.get(name="xyzzy")
  37. obj.delete()
  38. self.assertEqual(len(OneToOneRestrictedModel.plain_manager.all()), 0)