|
5 | 5 | from django.db.models import fields |
6 | 6 | from django.db import models |
7 | 7 | from django.urls import path, re_path |
8 | | -from rest_framework import serializers, viewsets, mixins, routers, views, generics |
| 8 | +from rest_framework import serializers, viewsets, mixins, routers, views, generics, parsers |
9 | 9 | from rest_framework.decorators import action, api_view |
10 | 10 | from rest_framework.views import APIView |
11 | 11 |
|
@@ -569,3 +569,24 @@ class XView(generics.ListAPIView): |
569 | 569 | operation = schema['paths']['/x']['get'] |
570 | 570 | assert operation['operationId'] == 'x_list' |
571 | 571 | assert get_response_schema(operation)['type'] == 'array' |
| 572 | + |
| 573 | + |
| 574 | +@mock.patch('drf_spectacular.settings.spectacular_settings.COMPONENT_SPLIT_REQUEST', True) |
| 575 | +def test_file_field_duality_on_split_request(no_warnings): |
| 576 | + class XSerializer(serializers.Serializer): |
| 577 | + file = serializers.FileField() |
| 578 | + |
| 579 | + class XView(generics.ListCreateAPIView): |
| 580 | + serializer_class = XSerializer |
| 581 | + parser_classes = [parsers.MultiPartParser] |
| 582 | + |
| 583 | + schema = generate_schema('/x', view=XView) |
| 584 | + assert get_response_schema( |
| 585 | + schema['paths']['/x']['get'] |
| 586 | + )['items']['$ref'] == '#/components/schemas/X' |
| 587 | + assert get_request_schema( |
| 588 | + schema['paths']['/x']['post'], content_type='multipart/form-data' |
| 589 | + )['$ref'] == '#/components/schemas/XRequest' |
| 590 | + |
| 591 | + assert schema['components']['schemas']['X']['properties']['file']['format'] == 'uri' |
| 592 | + assert schema['components']['schemas']['XRequest']['properties']['file']['format'] == 'binary' |
0 commit comments