mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-06 13:30:12 +03:00
Merge branch 'recursion'
This commit is contained in:
commit
98d71b556a
|
@ -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.
|
||||||
# ----------------------------------------
|
# ----------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user