From 1e84465276d386a268fef8cc3652d70e37280481 Mon Sep 17 00:00:00 2001 From: Alex Orange Date: Tue, 21 May 2013 14:23:23 -0600 Subject: [PATCH] Test and fix for second grandchild bug. Bug is, second grandchild of a given child will get cast to the child rather then the grandchild. --- model_utils/managers.py | 2 +- model_utils/tests/models.py | 4 ++++ model_utils/tests/tests.py | 11 ++++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/model_utils/managers.py b/model_utils/managers.py index 7c6c9f9..80b7621 100644 --- a/model_utils/managers.py +++ b/model_utils/managers.py @@ -89,7 +89,7 @@ class InheritanceQuerySet(QuerySet): return None if s: child = self._get_sub_obj_recurse(node, s) - return child or node + return child else: return node diff --git a/model_utils/tests/models.py b/model_utils/tests/models.py index 0513a45..08ba31f 100644 --- a/model_utils/tests/models.py +++ b/model_utils/tests/models.py @@ -34,6 +34,10 @@ class InheritanceManagerTestGrandChild1(InheritanceManagerTestChild1): text_field = models.TextField() +class InheritanceManagerTestGrandChild1_2(InheritanceManagerTestChild1): + text_field = models.TextField() + + class InheritanceManagerTestChild2(InheritanceManagerTestParent): non_related_field_using_descriptor_2 = models.FileField(upload_to="test") normal_field_2 = models.TextField() diff --git a/model_utils/tests/tests.py b/model_utils/tests/tests.py index 3331ac3..6eb90f8 100644 --- a/model_utils/tests/tests.py +++ b/model_utils/tests/tests.py @@ -16,6 +16,7 @@ from model_utils.managers import QueryManager from model_utils.models import StatusModel, TimeFramedModel from model_utils.tests.models import ( InheritanceManagerTestRelated, InheritanceManagerTestGrandChild1, + InheritanceManagerTestGrandChild1_2, InheritanceManagerTestParent, InheritanceManagerTestChild1, InheritanceManagerTestChild2, TimeStamp, Post, Article, Status, StatusPlainTuple, TimeFrame, Monitored, StatusManagerAdded, @@ -301,6 +302,8 @@ class InheritanceManagerTests(TestCase): self.child1 = InheritanceManagerTestChild1.objects.create() self.child2 = InheritanceManagerTestChild2.objects.create() self.grandchild1 = InheritanceManagerTestGrandChild1.objects.create() + self.grandchild1_2 = \ + InheritanceManagerTestGrandChild1_2.objects.create() def get_manager(self): @@ -312,6 +315,7 @@ class InheritanceManagerTests(TestCase): InheritanceManagerTestParent(pk=self.child1.pk), InheritanceManagerTestParent(pk=self.child2.pk), InheritanceManagerTestParent(pk=self.grandchild1.pk), + InheritanceManagerTestParent(pk=self.grandchild1_2.pk), ]) self.assertEqual(set(self.get_manager().all()), children) @@ -320,8 +324,10 @@ class InheritanceManagerTests(TestCase): children = set([self.child1, self.child2]) if django.VERSION >= (1, 6, 0): children.add(self.grandchild1) + children.add(self.grandchild1_2) else: children.add(InheritanceManagerTestChild1(pk=self.grandchild1.pk)) + children.add(InheritanceManagerTestChild1(pk=self.grandchild1_2.pk)) self.assertEqual( set(self.get_manager().select_subclasses()), children) @@ -331,6 +337,7 @@ class InheritanceManagerTests(TestCase): self.child1, InheritanceManagerTestParent(pk=self.child2.pk), InheritanceManagerTestChild1(pk=self.grandchild1.pk), + InheritanceManagerTestChild1(pk=self.grandchild1_2.pk), ]) self.assertEqual( set( @@ -344,9 +351,10 @@ class InheritanceManagerTests(TestCase): def test_select_specific_grandchildren(self): if django.VERSION >= (1, 6, 0): children = set([ - self.child1, + InheritanceManagerTestParent(pk=self.child1.pk), InheritanceManagerTestParent(pk=self.child2.pk), self.grandchild1, + InheritanceManagerTestParent(pk=self.grandchild1_2.pk), ]) self.assertEqual( set( @@ -384,6 +392,7 @@ class InheritanceManagerRelatedTests(InheritanceManagerTests): self.child2 = InheritanceManagerTestChild2.objects.create( related=self.related) self.grandchild1 = InheritanceManagerTestGrandChild1.objects.create(related=self.related) + self.grandchild1_2 = InheritanceManagerTestGrandChild1_2.objects.create(related=self.related) def get_manager(self):