Skip to content

Commit

Permalink
add api_view view extension testcase
Browse files Browse the repository at this point in the history
  • Loading branch information
tfranzel committed Apr 30, 2020
1 parent 4341150 commit c21a177
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
8 changes: 4 additions & 4 deletions drf_spectacular/extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def get_security_requirement(self, auto_schema):

@abstractmethod
def get_security_definition(self, auto_schema):
pass
pass # pragma: no cover


class OpenApiSerializerExtension(OpenApiGeneratorExtension['OpenApiSerializerExtension']):
Expand All @@ -33,7 +33,7 @@ def get_name(self) -> Optional[str]:

@abstractmethod
def map_serializer(self, auto_schema, direction):
pass
pass # pragma: no cover


class OpenApiSerializerFieldExtension(OpenApiGeneratorExtension['OpenApiSerializerFieldExtension']):
Expand All @@ -44,7 +44,7 @@ class OpenApiSerializerFieldExtension(OpenApiGeneratorExtension['OpenApiSerializ

@abstractmethod
def map_serializer_field(self, auto_schema):
pass
pass # pragma: no cover


class OpenApiViewExtension(OpenApiGeneratorExtension['OpenApiViewExtension']):
Expand All @@ -62,4 +62,4 @@ def _load_class(cls):

@abstractmethod
def view_replacement(self):
pass
pass # pragma: no cover
24 changes: 23 additions & 1 deletion tests/test_extensions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from rest_framework import fields, serializers, viewsets, mixins
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.views import APIView

from drf_spectacular.extensions import OpenApiSerializerFieldExtension, OpenApiViewExtension
Expand Down Expand Up @@ -35,7 +37,7 @@ class XViewset(mixins.ListModelMixin, viewsets.GenericViewSet):
class XView(APIView):
""" underspecified library view """
def get(self):
return 1.234 # pragma: no cover
return Response(1.234) # pragma: no cover


def test_view_extension(no_warnings):
Expand All @@ -54,3 +56,23 @@ def get(self, request):
validate_schema(schema)
operation = schema['paths']['/x']['get']
assert operation['responses']['200']['content']['application/json']['schema']['type'] == 'number'


@api_view()
def x_view_function():
""" underspecified library view """
return Response(1.234) # pragma: no cover


def test_view_function_extension(no_warnings):
class FixXFunctionView(OpenApiViewExtension):
target_class = 'tests.test_extensions.x_view_function'

def view_replacement(self):
fixed = extend_schema(responses=OpenApiTypes.FLOAT)(self.target_class)
return fixed

schema = generate_schema('x', view_function=x_view_function)
validate_schema(schema)
operation = schema['paths']['/x']['get']
assert operation['responses']['200']['content']['application/json']['schema']['type'] == 'number'

0 comments on commit c21a177

Please sign in to comment.