diff options
author | Loic Bistuer <loic.bistuer@sixmedia.com> | 2013-11-22 00:14:16 +0700 |
---|---|---|
committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-11-27 19:45:22 +0200 |
commit | f450bc9f44bc1270eae911daa157c155c29d1d9d (patch) | |
tree | 7d456e19e1e928d6616d7d0fe975feba87231be2 /tests/custom_managers | |
parent | 52015b963d263642957aec880b52ad4063b484cd (diff) | |
download | django-f450bc9f44bc1270eae911daa157c155c29d1d9d.tar.gz |
Added a bulk option to RelatedManager remove() and clear() methods
Refs #21169
Diffstat (limited to 'tests/custom_managers')
-rw-r--r-- | tests/custom_managers/tests.py | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/tests/custom_managers/tests.py b/tests/custom_managers/tests.py index af36110eca..440274e0e0 100644 --- a/tests/custom_managers/tests.py +++ b/tests/custom_managers/tests.py @@ -226,11 +226,11 @@ class CustomManagerTests(TestCase): ordered=False, ) - def test_removal_through_default_fk_related_manager(self): + def test_removal_through_default_fk_related_manager(self, bulk=True): bugs = FunPerson.objects.create(first_name="Bugs", last_name="Bunny", fun=True, favorite_book=self.b1) droopy = FunPerson.objects.create(first_name="Droopy", last_name="Dog", fun=False, favorite_book=self.b1) - self.b1.fun_people_favorite_books.remove(droopy) + self.b1.fun_people_favorite_books.remove(droopy, bulk=bulk) self.assertQuerysetEqual( FunPerson._base_manager.filter(favorite_book=self.b1), [ "Bugs", @@ -240,7 +240,7 @@ class CustomManagerTests(TestCase): ordered=False, ) - self.b1.fun_people_favorite_books.remove(bugs) + self.b1.fun_people_favorite_books.remove(bugs, bulk=bulk) self.assertQuerysetEqual( FunPerson._base_manager.filter(favorite_book=self.b1), [ "Droopy", @@ -251,7 +251,7 @@ class CustomManagerTests(TestCase): bugs.favorite_book = self.b1 bugs.save() - self.b1.fun_people_favorite_books.clear() + self.b1.fun_people_favorite_books.clear(bulk=bulk) self.assertQuerysetEqual( FunPerson._base_manager.filter(favorite_book=self.b1), [ "Droopy", @@ -260,12 +260,15 @@ class CustomManagerTests(TestCase): ordered=False, ) - def test_removal_through_specified_fk_related_manager(self): + def test_slow_removal_through_default_fk_related_manager(self): + self.test_removal_through_default_fk_related_manager(bulk=False) + + def test_removal_through_specified_fk_related_manager(self, bulk=True): Person.objects.create(first_name="Bugs", last_name="Bunny", fun=True, favorite_book=self.b1) droopy = Person.objects.create(first_name="Droopy", last_name="Dog", fun=False, favorite_book=self.b1) # Check that the fun manager DOESN'T remove boring people. - self.b1.favorite_books(manager='fun_people').remove(droopy) + self.b1.favorite_books(manager='fun_people').remove(droopy, bulk=bulk) self.assertQuerysetEqual( self.b1.favorite_books(manager='boring_people').all(), [ "Droopy", @@ -274,7 +277,7 @@ class CustomManagerTests(TestCase): ordered=False, ) # Check that the boring manager DOES remove boring people. - self.b1.favorite_books(manager='boring_people').remove(droopy) + self.b1.favorite_books(manager='boring_people').remove(droopy, bulk=bulk) self.assertQuerysetEqual( self.b1.favorite_books(manager='boring_people').all(), [ ], @@ -285,7 +288,7 @@ class CustomManagerTests(TestCase): droopy.save() # Check that the fun manager ONLY clears fun people. - self.b1.favorite_books(manager='fun_people').clear() + self.b1.favorite_books(manager='fun_people').clear(bulk=bulk) self.assertQuerysetEqual( self.b1.favorite_books(manager='boring_people').all(), [ "Droopy", @@ -300,11 +303,14 @@ class CustomManagerTests(TestCase): ordered=False, ) - def test_removal_through_default_gfk_related_manager(self): + def test_slow_removal_through_specified_fk_related_manager(self): + self.test_removal_through_specified_fk_related_manager(bulk=False) + + def test_removal_through_default_gfk_related_manager(self, bulk=True): bugs = FunPerson.objects.create(first_name="Bugs", last_name="Bunny", fun=True, favorite_thing=self.b1) droopy = FunPerson.objects.create(first_name="Droopy", last_name="Dog", fun=False, favorite_thing=self.b1) - self.b1.fun_people_favorite_things.remove(droopy) + self.b1.fun_people_favorite_things.remove(droopy, bulk=bulk) self.assertQuerysetEqual( FunPerson._base_manager.order_by('first_name').filter(favorite_thing_id=self.b1.pk), [ "Bugs", @@ -314,7 +320,7 @@ class CustomManagerTests(TestCase): ordered=False, ) - self.b1.fun_people_favorite_things.remove(bugs) + self.b1.fun_people_favorite_things.remove(bugs, bulk=bulk) self.assertQuerysetEqual( FunPerson._base_manager.order_by('first_name').filter(favorite_thing_id=self.b1.pk), [ "Droopy", @@ -325,7 +331,7 @@ class CustomManagerTests(TestCase): bugs.favorite_book = self.b1 bugs.save() - self.b1.fun_people_favorite_things.clear() + self.b1.fun_people_favorite_things.clear(bulk=bulk) self.assertQuerysetEqual( FunPerson._base_manager.order_by('first_name').filter(favorite_thing_id=self.b1.pk), [ "Droopy", @@ -334,12 +340,15 @@ class CustomManagerTests(TestCase): ordered=False, ) - def test_removal_through_specified_gfk_related_manager(self): + def test_slow_removal_through_default_gfk_related_manager(self): + self.test_removal_through_default_gfk_related_manager(bulk=False) + + def test_removal_through_specified_gfk_related_manager(self, bulk=True): Person.objects.create(first_name="Bugs", last_name="Bunny", fun=True, favorite_thing=self.b1) droopy = Person.objects.create(first_name="Droopy", last_name="Dog", fun=False, favorite_thing=self.b1) # Check that the fun manager DOESN'T remove boring people. - self.b1.favorite_things(manager='fun_people').remove(droopy) + self.b1.favorite_things(manager='fun_people').remove(droopy, bulk=bulk) self.assertQuerysetEqual( self.b1.favorite_things(manager='boring_people').all(), [ "Droopy", @@ -349,7 +358,7 @@ class CustomManagerTests(TestCase): ) # Check that the boring manager DOES remove boring people. - self.b1.favorite_things(manager='boring_people').remove(droopy) + self.b1.favorite_things(manager='boring_people').remove(droopy, bulk=bulk) self.assertQuerysetEqual( self.b1.favorite_things(manager='boring_people').all(), [ ], @@ -360,7 +369,7 @@ class CustomManagerTests(TestCase): droopy.save() # Check that the fun manager ONLY clears fun people. - self.b1.favorite_things(manager='fun_people').clear() + self.b1.favorite_things(manager='fun_people').clear(bulk=bulk) self.assertQuerysetEqual( self.b1.favorite_things(manager='boring_people').all(), [ "Droopy", @@ -375,6 +384,9 @@ class CustomManagerTests(TestCase): ordered=False, ) + def test_slow_removal_through_specified_gfk_related_manager(self): + self.test_removal_through_specified_gfk_related_manager(bulk=False) + def test_removal_through_default_m2m_related_manager(self): bugs = FunPerson.objects.create(first_name="Bugs", last_name="Bunny", fun=True) self.b1.fun_authors.add(bugs) |