-
-
Notifications
You must be signed in to change notification settings - Fork 31.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Migrated the custom_managers_regress doctests. Thanks to Paul McMillan.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13866 bcc190cf-cafb-0310-a4f2-bffc1f526a37
- Loading branch information
1 parent
9d6eeee
commit e2ff11c
Showing
2 changed files
with
47 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,47 @@ | |||
from django.test import TestCase | |||
|
|||
from models import RelatedModel, RestrictedModel, OneToOneRestrictedModel | |||
|
|||
class CustomManagersRegressTestCase(TestCase): | |||
def test_filtered_default_manager(self): | |||
"""Even though the default manager filters out some records, | |||
we must still be able to save (particularly, save by updating | |||
existing records) those filtered instances. This is a | |||
regression test for #8990, #9527""" | |||
related = RelatedModel.objects.create(name="xyzzy") | |||
obj = RestrictedModel.objects.create(name="hidden", related=related) | |||
obj.name = "still hidden" | |||
obj.save() | |||
|
|||
# If the hidden object wasn't seen during the save process, | |||
# there would now be two objects in the database. | |||
self.assertEqual(RestrictedModel.plain_manager.count(), 1) | |||
|
|||
def test_delete_related_on_filtered_manager(self): | |||
"""Deleting related objects should also not be distracted by a | |||
restricted manager on the related object. This is a regression | |||
test for #2698.""" | |||
related = RelatedModel.objects.create(name="xyzzy") | |||
|
|||
for name, public in (('one', True), ('two', False), ('three', False)): | |||
RestrictedModel.objects.create(name=name, is_public=public, related=related) | |||
|
|||
obj = RelatedModel.objects.get(name="xyzzy") | |||
obj.delete() | |||
|
|||
# All of the RestrictedModel instances should have been | |||
# deleted, since they *all* pointed to the RelatedModel. If | |||
# the default manager is used, only the public one will be | |||
# deleted. | |||
self.assertEqual(len(RestrictedModel.plain_manager.all()), 0) | |||
|
|||
def test_delete_one_to_one_manager(self): | |||
# The same test case as the last one, but for one-to-one | |||
# models, which are implemented slightly different internally, | |||
# so it's a different code path. | |||
obj = RelatedModel.objects.create(name="xyzzy") | |||
OneToOneRestrictedModel.objects.create(name="foo", is_public=False, related=obj) | |||
obj = RelatedModel.objects.get(name="xyzzy") | |||
obj.delete() | |||
self.assertEqual(len(OneToOneRestrictedModel.plain_manager.all()), 0) | |||
|