1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
import pytest
from django.urls import path
from rest_framework import serializers
from rest_framework.decorators import api_view
from drf_spectacular.utils import extend_schema
from tests import assert_schema, generate_schema
try:
from rest_framework_recursive.fields import RecursiveField
except ImportError:
from rest_framework.fields import Field as RecursiveField
class TreeSerializer(serializers.Serializer):
name = serializers.CharField()
children = serializers.ListField(child=RecursiveField())
class TreeManySerializer(serializers.Serializer):
name = serializers.CharField()
children = RecursiveField(many=True)
class PingSerializer(serializers.Serializer):
ping_id = serializers.IntegerField()
pong = RecursiveField('PongSerializer', required=False)
class PongSerializer(serializers.Serializer):
pong_id = serializers.IntegerField()
ping = PingSerializer()
class LinkSerializer(serializers.Serializer):
name = serializers.CharField(max_length=25)
next = RecursiveField(allow_null=True)
@pytest.mark.contrib('rest_framework_recursive')
def test_rest_framework_recursive(no_warnings):
@extend_schema(request=TreeSerializer, responses=TreeSerializer)
@api_view(['POST'])
def tree(request):
pass # pragma: no cover
@extend_schema(request=TreeManySerializer, responses=TreeManySerializer)
@api_view(['POST'])
def tree_many(request):
pass # pragma: no cover
@extend_schema(request=PingSerializer, responses=PingSerializer)
@api_view(['POST'])
def pong(request):
pass # pragma: no cover
@extend_schema(request=LinkSerializer, responses=LinkSerializer)
@api_view(['POST'])
def link(request):
pass # pragma: no cover
urlpatterns = [
path('tree', tree),
path('tree_many', tree_many),
path('pong', pong),
path('link', link)
]
assert_schema(
generate_schema(None, patterns=urlpatterns),
'tests/contrib/test_rest_framework_recursive.yml'
)
|