Fixed autoschema for listserializer

This commit is contained in:
Torstein A. Bø 2020-08-27 16:27:38 +02:00
parent d44afafbc7
commit eede3ce936
2 changed files with 32 additions and 2 deletions

View File

@ -360,10 +360,11 @@ class AutoSchema(ViewInspector):
# Nested Serializers, `many` or not. # Nested Serializers, `many` or not.
if isinstance(field, serializers.ListSerializer): if isinstance(field, serializers.ListSerializer):
ref, components = self.map_serializer(field.child)
return { return {
'type': 'array', 'type': 'array',
'items': self.map_serializer(field.child) 'items': ref
}, {} }, components
if isinstance(field, serializers.Serializer): if isinstance(field, serializers.Serializer):
data, components = self.map_serializer(field) data, components = self.map_serializer(field)
return data, components return data, components

View File

@ -353,6 +353,35 @@ class TestOperationIntrospection(TestCase):
assert list(nested['properties'].keys()) == ['number'] assert list(nested['properties'].keys()) == ['number']
assert nested['required'] == ['number'] assert nested['required'] == ['number']
def test_response_body_list_serializer(self):
path = '/'
method = 'POST'
class NestedSerializer(serializers.Serializer):
number = serializers.IntegerField()
text = serializers.CharField()
class ItemSerializer(serializers.ListSerializer):
child = NestedSerializer()
class MainSerializer(serializers.Serializer):
main = ItemSerializer()
class View(generics.GenericAPIView):
serializer_class = MainSerializer
view = create_view(
View,
method,
create_request(path),
)
inspector = AutoSchema()
inspector.view = view
responses = inspector.get_responses(path, method)
assert responses['201']['content']['application/json']['schema']['$ref'] == '#/components/schemas/Main'
components = inspector.get_components(path, method)
assert sorted(list(components.keys())) == ['Main', 'Nested']
def test_list_response_body_generation(self): def test_list_response_body_generation(self):
"""Test that an array schema is returned for list views.""" """Test that an array schema is returned for list views."""
path = '/' path = '/'