forked from tfranzel/drf-spectacular
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_oas31.py
More file actions
91 lines (72 loc) · 2.76 KB
/
Copy pathtest_oas31.py
File metadata and controls
91 lines (72 loc) · 2.76 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from unittest import mock
from rest_framework import serializers, viewsets
from rest_framework.views import APIView
from drf_spectacular.utils import extend_schema
from tests import generate_schema
from tests.models import SimpleModel
@mock.patch('drf_spectacular.settings.spectacular_settings.OAS_VERSION', '3.1.0')
def test_nullable_sub_serializer(no_warnings):
class XSerializer(serializers.Serializer):
f = serializers.FloatField(allow_null=True)
class YSerializer(serializers.Serializer):
x = XSerializer(allow_null=True)
class XAPIView(APIView):
@extend_schema(responses=YSerializer)
def get(self, request):
pass # pragma: no cover
schema = generate_schema('x', view=XAPIView)
assert schema['components']['schemas'] == {
'X': {
'properties': {'f': {'format': 'double', 'type': ['number', 'null']}},
'required': ['f'],
'type': 'object'
},
'Y': {
'properties': {'x': {'oneOf': [{'$ref': '#/components/schemas/X'}, {'type': 'null'}]}},
'required': ['x'],
'type': 'object'
}
}
@mock.patch('drf_spectacular.settings.spectacular_settings.OAS_VERSION', '3.1.0')
def test_nullable_enum_resolution(no_warnings):
class XSerializer(serializers.Serializer):
foo = serializers.ChoiceField(
choices=[('A', 'A'), ('B', 'B')],
allow_null=True
)
class XAPIView(APIView):
@extend_schema(responses=XSerializer)
def get(self, request):
pass # pragma: no cover
schema = generate_schema('x', view=XAPIView)
assert schema['components']['schemas']['FooEnum'] == {
'description': '* `A` - A\n* `B` - B',
'enum': ['A', 'B'],
'type': 'string',
}
assert schema['components']['schemas']['X'] == {
'properties': {
'foo': {
'oneOf': [
{'$ref': '#/components/schemas/FooEnum'},
{'$ref': '#/components/schemas/NullEnum'}
]
}
},
'required': ['foo'],
'type': 'object'
}
@mock.patch('drf_spectacular.settings.spectacular_settings.OAS_VERSION', '3.1.0')
def test_validator_addition_for_oas31(no_warnings):
class XSerializer(serializers.Serializer):
field = serializers.CharField(allow_blank=True, allow_null=True, max_length=40, required=False)
class XViewset(viewsets.ModelViewSet):
serializer_class = XSerializer
queryset = SimpleModel.objects.none()
schema = generate_schema('x', XViewset)
assert schema['components']['schemas']['X'] == {
'properties': {
'field': {'maxLength': 40, 'type': ['string', 'null']}
},
'type': 'object'
}