Skip to content

Commit 81cb7c2

Browse files
author
Constantinos Symeonides
committed
test: allOf should work with enums, and get default from outer schema
1 parent 3da7d71 commit 81cb7c2

File tree

5 files changed

+54
-1
lines changed

5 files changed

+54
-1
lines changed

Diff for: end_to_end_tests/golden-record/my_test_api_client/models/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from .a_model import AModel
44
from .all_of_sub_model import AllOfSubModel
5+
from .an_all_of_enum import AnAllOfEnum
56
from .an_enum import AnEnum
67
from .an_int_enum import AnIntEnum
78
from .another_all_of_sub_model import AnotherAllOfSubModel

Diff for: end_to_end_tests/golden-record/my_test_api_client/models/a_model.py

+21
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import attr
55
from dateutil.parser import isoparse
66

7+
from ..models.an_all_of_enum import AnAllOfEnum
78
from ..models.an_enum import AnEnum
89
from ..models.different_enum import DifferentEnum
910
from ..models.free_form_model import FreeFormModel
@@ -27,6 +28,8 @@ class AModel:
2728
required_nullable: Optional[str]
2829
nullable_one_of_models: Union[FreeFormModel, ModelWithUnionProperty, None]
2930
nullable_model: Optional[ModelWithUnionProperty]
31+
an_allof_enum_with_overridden_default: AnAllOfEnum = AnAllOfEnum.OVERRIDDEN_DEFAULT
32+
an_optional_allof_enum: Union[Unset, AnAllOfEnum] = UNSET
3033
nested_list_of_enums: Union[Unset, List[List[DifferentEnum]]] = UNSET
3134
a_not_required_date: Union[Unset, datetime.date] = UNSET
3235
attr_1_leading_digit: Union[Unset, str] = UNSET
@@ -40,6 +43,8 @@ class AModel:
4043
def to_dict(self) -> Dict[str, Any]:
4144
an_enum_value = self.an_enum_value.value
4245

46+
an_allof_enum_with_overridden_default = self.an_allof_enum_with_overridden_default.value
47+
4348
if isinstance(self.a_camel_date_time, datetime.datetime):
4449
a_camel_date_time = self.a_camel_date_time.isoformat()
4550

@@ -56,6 +61,10 @@ def to_dict(self) -> Dict[str, Any]:
5661

5762
model = self.model.to_dict()
5863

64+
an_optional_allof_enum: Union[Unset, str] = UNSET
65+
if not isinstance(self.an_optional_allof_enum, Unset):
66+
an_optional_allof_enum = self.an_optional_allof_enum.value
67+
5968
nested_list_of_enums: Union[Unset, List[List[str]]] = UNSET
6069
if not isinstance(self.nested_list_of_enums, Unset):
6170
nested_list_of_enums = []
@@ -133,6 +142,7 @@ def to_dict(self) -> Dict[str, Any]:
133142
field_dict.update(
134143
{
135144
"an_enum_value": an_enum_value,
145+
"an_allof_enum_with_overridden_default": an_allof_enum_with_overridden_default,
136146
"aCamelDateTime": a_camel_date_time,
137147
"a_date": a_date,
138148
"required_not_nullable": required_not_nullable,
@@ -144,6 +154,8 @@ def to_dict(self) -> Dict[str, Any]:
144154
"nullable_model": nullable_model,
145155
}
146156
)
157+
if an_optional_allof_enum is not UNSET:
158+
field_dict["an_optional_allof_enum"] = an_optional_allof_enum
147159
if nested_list_of_enums is not UNSET:
148160
field_dict["nested_list_of_enums"] = nested_list_of_enums
149161
if a_not_required_date is not UNSET:
@@ -170,6 +182,8 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
170182
d = src_dict.copy()
171183
an_enum_value = AnEnum(d.pop("an_enum_value"))
172184

185+
an_allof_enum_with_overridden_default = AnAllOfEnum(d.pop("an_allof_enum_with_overridden_default"))
186+
173187
def _parse_a_camel_date_time(data: object) -> Union[datetime.date, datetime.datetime]:
174188
try:
175189
a_camel_date_time_type0: datetime.datetime
@@ -214,6 +228,11 @@ def _parse_one_of_models(data: object) -> Union[FreeFormModel, ModelWithUnionPro
214228

215229
model = ModelWithUnionProperty.from_dict(d.pop("model"))
216230

231+
an_optional_allof_enum: Union[Unset, AnAllOfEnum] = UNSET
232+
_an_optional_allof_enum = d.pop("an_optional_allof_enum", UNSET)
233+
if not isinstance(_an_optional_allof_enum, Unset):
234+
an_optional_allof_enum = AnAllOfEnum(_an_optional_allof_enum)
235+
217236
nested_list_of_enums = []
218237
_nested_list_of_enums = d.pop("nested_list_of_enums", UNSET)
219238
for nested_list_of_enums_item_data in _nested_list_of_enums or []:
@@ -350,11 +369,13 @@ def _parse_not_required_nullable_one_of_models(
350369

351370
a_model = cls(
352371
an_enum_value=an_enum_value,
372+
an_allof_enum_with_overridden_default=an_allof_enum_with_overridden_default,
353373
a_camel_date_time=a_camel_date_time,
354374
a_date=a_date,
355375
required_not_nullable=required_not_nullable,
356376
one_of_models=one_of_models,
357377
model=model,
378+
an_optional_allof_enum=an_optional_allof_enum,
358379
nested_list_of_enums=nested_list_of_enums,
359380
a_nullable_date=a_nullable_date,
360381
a_not_required_date=a_not_required_date,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from enum import Enum
2+
3+
4+
class AnAllOfEnum(str, Enum):
5+
FOO = "foo"
6+
BAR = "bar"
7+
A_DEFAULT = "a_default"
8+
OVERRIDDEN_DEFAULT = "overridden_default"
9+
10+
def __str__(self) -> str:
11+
return str(self.value)

Diff for: end_to_end_tests/openapi.json

+21
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@
737737
"title": "AModel",
738738
"required": [
739739
"an_enum_value",
740+
"an_allof_enum_with_overridden_default",
740741
"aCamelDateTime",
741742
"a_date",
742743
"a_nullable_date",
@@ -752,6 +753,21 @@
752753
"an_enum_value": {
753754
"$ref": "#/components/schemas/AnEnum"
754755
},
756+
"an_allof_enum_with_overridden_default": {
757+
"allOf": [
758+
{
759+
"$ref": "#/components/schemas/AnAllOfEnum"
760+
}
761+
],
762+
"default": "overridden_default"
763+
},
764+
"an_optional_allof_enum": {
765+
"allOf": [
766+
{
767+
"$ref": "#/components/schemas/AnAllOfEnum"
768+
}
769+
]
770+
},
755771
"nested_list_of_enums": {
756772
"title": "Nested List Of Enums",
757773
"type": "array",
@@ -904,6 +920,11 @@
904920
"enum": ["FIRST_VALUE", "SECOND_VALUE"],
905921
"description": "For testing Enums in all the ways they can be used "
906922
},
923+
"AnAllOfEnum": {
924+
"title": "AnAllOfEnum",
925+
"enum": ["foo", "bar", "a_default", "overridden_default"],
926+
"default": "a_default"
927+
},
907928
"AnIntEnum": {
908929
"title": "AnIntEnum",
909930
"enum": [-1, 1, 2],

Diff for: end_to_end_tests/regen_golden_record.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
""" Regenerate golden-record """
22
import shutil
3-
import sys
43
from pathlib import Path
54

65
from typer.testing import CliRunner

0 commit comments

Comments
 (0)