From 43327ea4e1ca2041de248b438d77b392bd59f6c3 Mon Sep 17 00:00:00 2001 From: benoitlouy Date: Fri, 1 Mar 2013 07:38:28 -0500 Subject: [PATCH] Add testcase for issue #237 --- tests/test_document.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/test_document.py b/tests/test_document.py index 3e8d8134..134ba34f 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -3368,6 +3368,40 @@ class DocumentTest(unittest.TestCase): } ) ]), "1,2") + def test_complex_nesting_document_and_embeddeddocument(self): + class Macro(EmbeddedDocument): + value = DynamicField(default="UNDEFINED") + + class Parameter(EmbeddedDocument): + macros = MapField(EmbeddedDocumentField(Macro)) + + def expand(self): + self.macros["test"] = Macro() + + class Node(Document): + parameters = MapField(EmbeddedDocumentField(Parameter)) + + def expand(self): + self.flattened_parameter = {} + for parameter_name, parameter in self.parameters.iteritems(): + parameter.expand() + + class System(Document): + name = StringField(required=True) + nodes = MapField(ReferenceField(Node, dbref=False)) + + def save(self, *args, **kwargs): + for node_name, node in self.nodes.iteritems(): + node.expand() + node.save(*args, **kwargs) + super(System, self).save(*args, **kwargs) + + system = System(name="system") + system.save() + system.nodes["node"] = Node() + system.save() + system.nodes["node"].parameters["param"] = Parameter() + system.save() class ValidatorErrorTest(unittest.TestCase):