1
+ from email .mime .multipart import MIMEMultipart
2
+ from email .mime .nonmultipart import MIMENonMultipart
3
+
1
4
import pytest
2
5
3
6
from openapi_core .deserializing .exceptions import DeserializeError
7
10
from openapi_core .schema .media_types .models import MediaType
8
11
9
12
13
+ class MIMEFormdata (MIMENonMultipart ):
14
+ def __init__ (self , keyname , * args , ** kwargs ):
15
+ super (MIMEFormdata , self ).__init__ (* args , ** kwargs )
16
+ self .add_header (
17
+ "Content-Disposition" , "form-data; name=\" %s\" " % keyname )
18
+
19
+
20
+ def encode_multipart_formdata (fields ):
21
+ m = MIMEMultipart ("form-data" )
22
+
23
+ for field , value in fields .items ():
24
+ data = MIMEFormdata (field , "text" , "plain" )
25
+ data .set_payload (value )
26
+ m .attach (data )
27
+
28
+ return m
29
+
30
+
10
31
class TestMediaTypeDeserializer (object ):
11
32
12
33
@pytest .fixture
@@ -31,22 +52,39 @@ def test_json_empty_object(self, deserializer_factory):
31
52
32
53
assert result == {}
33
54
34
- def test_form_urlencoded_empty (self , deserializer_factory ):
55
+ def test_urlencoded_form_empty (self , deserializer_factory ):
35
56
media_type = MediaType ('application/x-www-form-urlencoded' )
36
57
value = ''
37
58
38
59
result = deserializer_factory (media_type )(value )
39
60
40
61
assert result == {}
41
62
42
- def test_form_urlencoded_simple (self , deserializer_factory ):
63
+ def test_urlencoded_form_simple (self , deserializer_factory ):
43
64
media_type = MediaType ('application/x-www-form-urlencoded' )
44
65
value = 'param1=test'
45
66
46
67
result = deserializer_factory (media_type )(value )
47
68
48
69
assert result == {'param1' : 'test' }
49
70
71
+ @pytest .mark .parametrize ('value' , [b'' , '' ])
72
+ def test_data_form_empty (self , deserializer_factory , value ):
73
+ media_type = MediaType ('multipart/form-data' )
74
+
75
+ result = deserializer_factory (media_type )(value )
76
+
77
+ assert result == {}
78
+
79
+ def test_data_form_simple (self , deserializer_factory ):
80
+ media_type = MediaType ('multipart/form-data' )
81
+ formdata = encode_multipart_formdata ({'param1' : 'test' })
82
+ value = str (formdata )
83
+
84
+ result = deserializer_factory (media_type )(value )
85
+
86
+ assert result == {'param1' : b'test' }
87
+
50
88
def test_custom_simple (self , deserializer_factory ):
51
89
custom_mimetype = 'application/custom'
52
90
media_type = MediaType (custom_mimetype )
0 commit comments