Adding test case for self-referencing documents with cascade deletes
This commit is contained in:
parent
2d9b581f34
commit
2ec1476e50
@ -1344,6 +1344,37 @@ class QuerySetTest(unittest.TestCase):
|
||||
self.Person.objects(name='Test User').delete()
|
||||
self.assertEqual(1, BlogPost.objects.count())
|
||||
|
||||
def test_reverse_delete_rule_cascade_self_referencing(self):
|
||||
"""Ensure self-referencing CASCADE deletes do not result in infinite loop
|
||||
"""
|
||||
class Category(Document):
|
||||
name = StringField()
|
||||
parent = ReferenceField('self', reverse_delete_rule=CASCADE)
|
||||
|
||||
num_children = 3
|
||||
base = Category(name='Root')
|
||||
base.save()
|
||||
|
||||
# Create a simple parent-child tree
|
||||
for i in range(num_children):
|
||||
child_name = 'Child-%i' % i
|
||||
child = Category(name=child_name, parent=base)
|
||||
child.save()
|
||||
|
||||
for i in range(num_children):
|
||||
child_child_name = 'Child-Child-%i' % i
|
||||
child_child = Category(name=child_child_name, parent=child)
|
||||
child_child.save()
|
||||
|
||||
tree_size = 1 + num_children + (num_children * num_children)
|
||||
self.assertEquals(tree_size, Category.objects.count())
|
||||
self.assertEquals(num_children, Category.objects(parent=base).count())
|
||||
|
||||
# The delete should effectively wipe out the Category collection
|
||||
# without resulting in infinite parent-child cascade recursion
|
||||
base.delete()
|
||||
self.assertEquals(0, Category.objects.count())
|
||||
|
||||
def test_reverse_delete_rule_nullify(self):
|
||||
"""Ensure nullification of references to deleted documents.
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user