11import datetime as dt
22import importlib .metadata
33import re
4+ import uuid
45from enum import Enum
56
67import pytest
@@ -19,6 +20,51 @@ def test_field2choices_preserving_order(openapi):
1920 assert openapi .field2choices (field ) == {"enum" : choices }
2021
2122
23+ def test_field2choices_serializes_choices (openapi ):
24+ date_choices = [dt .date (2023 , 1 , 1 ), dt .date (2023 , 1 , 2 )]
25+ field = fields .Date (validate = validate .OneOf (date_choices ))
26+ assert openapi .field2choices (field ) == {"enum" : ["2023-01-01" , "2023-01-02" ]}
27+
28+ dtime_choices = [dt .datetime (2023 , 1 , 1 , 12 , 0 )]
29+ field = fields .DateTime (validate = validate .OneOf (dtime_choices ))
30+ assert openapi .field2choices (field ) == {"enum" : ["2023-01-01T12:00:00" ]}
31+
32+ u = uuid .uuid4 ()
33+ field = fields .UUID (validate = validate .OneOf ([u ]))
34+ assert openapi .field2choices (field ) == {"enum" : [str (u )]}
35+
36+ field = fields .Date (validate = validate .Equal (dt .date (2023 , 1 , 1 )))
37+ assert openapi .field2choices (field ) == {"enum" : ["2023-01-01" ]}
38+
39+
40+ def test_field2choices_with_labels (openapi ):
41+ field = fields .Integer (validate = validate .OneOf ([1 , 2 ], labels = ["one" , "two" ]))
42+ assert openapi .field2choices (field ) == {"enum" : [1 , 2 ]}
43+
44+
45+ def test_enum_field_with_oneof_validator (spec_fixture ):
46+ class MyEnum (Enum ):
47+ one = 1
48+ two = 2
49+ three = 3
50+
51+ field = fields .Enum (MyEnum , validate = validate .OneOf ([MyEnum .one , MyEnum .two ]))
52+ ret = spec_fixture .openapi .field2property (field )
53+ assert ret ["type" ] == "string"
54+ assert ret ["enum" ] == ["one" , "two" ]
55+
56+ field_val = fields .Enum (
57+ MyEnum , by_value = True , validate = validate .OneOf ([MyEnum .one , MyEnum .two ])
58+ )
59+ ret_val = spec_fixture .openapi .field2property (field_val )
60+ assert ret_val ["enum" ] == [1 , 2 ]
61+
62+ field_eq = fields .Enum (MyEnum , validate = validate .Equal (MyEnum .two ))
63+ ret_eq = spec_fixture .openapi .field2property (field_eq )
64+ assert ret_eq ["type" ] == "string"
65+ assert ret_eq ["enum" ] == ["two" ]
66+
67+
2268@pytest .mark .parametrize (
2369 ("FieldClass" , "jsontype" ),
2470 [
0 commit comments