|
4 | 4 | from django_filters import CharFilter |
5 | 5 | from django_filters.rest_framework import DjangoFilterBackend, FilterSet |
6 | 6 | from drf_spectacular.generators import SchemaGenerator |
| 7 | +from drf_spectacular.types import OpenApiTypes |
| 8 | +from drf_spectacular.utils import extend_schema |
7 | 9 | from rest_framework import serializers |
8 | 10 | from rest_framework.authentication import BasicAuthentication |
9 | 11 | from rest_framework.generics import GenericAPIView, ListAPIView |
@@ -118,6 +120,27 @@ def test_no_validation_error_for_unsafe_method(): |
118 | 120 | assert "400" not in responses |
119 | 121 |
|
120 | 122 |
|
| 123 | +class OpenAPITypesView(GenericAPIView): |
| 124 | + # ensure that 400 is not added due to the parser classes by using a parser |
| 125 | + # that does not raise a ParseError which results in adding a 400 error response |
| 126 | + parser_classes = [CustomParser] |
| 127 | + |
| 128 | + @extend_schema(request=OpenApiTypes.OBJECT, responses={204: None}) |
| 129 | + def post(self, request, *args, **kwargs): |
| 130 | + return Response(status=204) |
| 131 | + |
| 132 | + |
| 133 | +def test_no_error_raised_when_request_serializer_is_set_as_openapi_type(): |
| 134 | + route = "validate/" |
| 135 | + view = OpenAPITypesView.as_view() |
| 136 | + try: |
| 137 | + generate_view_schema(route, view) |
| 138 | + except Exception: |
| 139 | + pytest.fail( |
| 140 | + "Schema generation failed when using `@extend_schema(request.OpenApiTypes.OBJECT)`" |
| 141 | + ) |
| 142 | + |
| 143 | + |
121 | 144 | class CustomFilterSet(FilterSet): |
122 | 145 | first_name = CharFilter() |
123 | 146 |
|
|
0 commit comments