Merge branch 'recursion'

This commit is contained in:
Warren Jin 2015-01-25 22:34:17 -05:00
commit 98d71b556a

View File

@ -295,32 +295,67 @@ class TestCreateOnlyDefault:
# Tests for RecursiveField. # Tests for RecursiveField.
# ------------------------- # -------------------------
class TestRecursiveField: class TestRecursiveField:
def setup(self): def setup(self):
class ListSerializer(serializers.Serializer): class LinkSerializer(serializers.Serializer):
name = serializers.CharField() name = serializers.CharField()
next = serializers.RecursiveField(allow_null=True) next = serializers.RecursiveField(allow_null=True)
self.list_serializer = ListSerializer self.link_serializer = LinkSerializer
class TreeSerializer(serializers.Serializer): class NodeSerializer(serializers.Serializer):
name = serializers.CharField() name = serializers.CharField()
children = serializers.ListField(child=serializers.RecursiveField()) children = serializers.ListField(child=serializers.RecursiveField())
self.tree_serializer = TreeSerializer self.node_serializer = NodeSerializer
def test_serialize_list(self): def test_link_serializer(self):
value = { value = {
'name':'first', 'name': 'first',
'next': { 'next': {
'name':'second', 'name': 'second',
'next':{ 'next':{
'name':'third', 'name': 'third',
'next':None, 'next': None,
} }
} }
} }
serializer = self.list_serializer(value) # test serialization
assert serializer.data == value serializer = self.link_serializer(value)
assert serializer.data == value, \
'serialized data does not match input'
# test deserialization
serializer = self.link_serializer(data=value)
assert serializer.is_valid(), \
'cannot validate on deserialization'
assert serializer.validated_data == value, \
'deserialized data does not match input'
def test_node_serializer(self):
value = {
'name': 'root',
'children': [{
'name': 'first child',
'children': [],
},{
'name': 'second child',
'children': [],
}]
}
# serialization
serializer = self.node_serializer(value)
assert serializer.data == value, \
'serialized data does not match input'
# deserialization
serializer = self.link_serializer(data=value)
assert serializer.is_valid(), \
'cannot validate on deserialization'
assert serializer.validated_data == value, \
'deserialized data does not match input'
# Tests for field input and output values. # Tests for field input and output values.
# ---------------------------------------- # ----------------------------------------