|
| 1 | +import datetime |
1 | 2 | import re
|
2 | 3 | import sys
|
3 | 4 | from decimal import Decimal
|
@@ -274,6 +275,45 @@ class MyEnum(Enum):
|
274 | 275 | assert v.validate_json('[1, 2]') is MyEnum.a
|
275 | 276 |
|
276 | 277 |
|
| 278 | +def test_plain_enum_datetime(): |
| 279 | + class MyEnum(Enum): |
| 280 | + a = datetime.datetime.fromisoformat('2024-01-01T00:00:00Z') |
| 281 | + |
| 282 | + v = SchemaValidator(core_schema.enum_schema(MyEnum, list(MyEnum.__members__.values()))) |
| 283 | + assert v.validate_python(datetime.datetime.fromisoformat('2024-01-01T00:00:00Z')) is MyEnum.a |
| 284 | + assert v.validate_json('"2024-01-01T00:00:00Z"') is MyEnum.a |
| 285 | + |
| 286 | + |
| 287 | +def test_plain_enum_complex(): |
| 288 | + class MyEnum(Enum): |
| 289 | + a = complex(1, 2) |
| 290 | + |
| 291 | + v = SchemaValidator(core_schema.enum_schema(MyEnum, list(MyEnum.__members__.values()))) |
| 292 | + assert v.validate_python(complex(1, 2)) is MyEnum.a |
| 293 | + assert v.validate_json('"1+2j"') is MyEnum.a |
| 294 | + |
| 295 | + |
| 296 | +def test_plain_enum_identical_serialized_form(): |
| 297 | + class MyEnum(Enum): |
| 298 | + tuple_ = 1, 2 |
| 299 | + list_ = [1, 2] |
| 300 | + |
| 301 | + v = SchemaValidator(core_schema.enum_schema(MyEnum, list(MyEnum.__members__.values()))) |
| 302 | + assert v.validate_python((1, 2)) is MyEnum.tuple_ |
| 303 | + assert v.validate_python([1, 2]) is MyEnum.list_ |
| 304 | + assert v.validate_json('[1,2]') is MyEnum.tuple_ |
| 305 | + |
| 306 | + # Change the order of `a` and `b` in MyEnum2; validate_json should pick [1, 2] this time |
| 307 | + class MyEnum2(Enum): |
| 308 | + list_ = [1, 2] |
| 309 | + tuple_ = 1, 2 |
| 310 | + |
| 311 | + v = SchemaValidator(core_schema.enum_schema(MyEnum2, list(MyEnum2.__members__.values()))) |
| 312 | + assert v.validate_python((1, 2)) is MyEnum2.tuple_ |
| 313 | + assert v.validate_python([1, 2]) is MyEnum2.list_ |
| 314 | + assert v.validate_json('[1,2]') is MyEnum2.list_ |
| 315 | + |
| 316 | + |
277 | 317 | def test_plain_enum_empty():
|
278 | 318 | class MyEnum(Enum):
|
279 | 319 | pass
|
|
0 commit comments