MCPcopy Index your code
hub / github.com/MongoEngine/mongoengine / test_recursive_embedding

Method test_recursive_embedding

tests/fields/test_fields.py:1444–1506  ·  view source on GitHub ↗

Ensure that EmbeddedDocumentFields can contain their own documents.

(self)

Source from the content-addressed store, hash-verified

1442 assert peter.friends == friends
1443
1444 def test_recursive_embedding(self):
1445 """Ensure that EmbeddedDocumentFields can contain their own documents."""
1446
1447 class TreeNode(EmbeddedDocument):
1448 name = StringField()
1449 children = ListField(EmbeddedDocumentField("self"))
1450
1451 class Tree(Document):
1452 name = StringField()
1453 children = ListField(EmbeddedDocumentField("TreeNode"))
1454
1455 Tree.drop_collection()
1456
1457 tree = Tree(name="Tree")
1458 first_child = TreeNode(name="Child 1")
1459 tree.children.append(first_child)
1460
1461 second_child = TreeNode(name="Child 2")
1462 first_child.children.append(second_child)
1463 tree.save()
1464
1465 tree = Tree.objects.first()
1466 assert len(tree.children) == 1
1467
1468 assert len(tree.children[0].children) == 1
1469
1470 third_child = TreeNode(name="Child 3")
1471 tree.children[0].children.append(third_child)
1472 tree.save()
1473
1474 assert len(tree.children) == 1
1475 assert tree.children[0].name == first_child.name
1476 assert tree.children[0].children[0].name == second_child.name
1477 assert tree.children[0].children[1].name == third_child.name
1478
1479 # Test updating
1480 tree.children[0].name = "I am Child 1"
1481 tree.children[0].children[0].name = "I am Child 2"
1482 tree.children[0].children[1].name = "I am Child 3"
1483 tree.save()
1484
1485 assert tree.children[0].name == "I am Child 1"
1486 assert tree.children[0].children[0].name == "I am Child 2"
1487 assert tree.children[0].children[1].name == "I am Child 3"
1488
1489 # Test removal
1490 assert len(tree.children[0].children) == 2
1491 del tree.children[0].children[1]
1492
1493 tree.save()
1494 assert len(tree.children[0].children) == 1
1495
1496 tree.children[0].children.pop(0)
1497 tree.save()
1498 assert len(tree.children[0].children) == 0
1499 assert tree.children[0].children == []
1500
1501 tree.children[0].children.insert(0, third_child)

Callers

nothing calls this directly

Calls 7

TreeClass · 0.85
TreeNodeClass · 0.85
drop_collectionMethod · 0.80
popMethod · 0.80
insertMethod · 0.80
saveMethod · 0.45
firstMethod · 0.45

Tested by

no test coverage detected