@@ -122,7 +122,8 @@ def test_unit_create_response():
122
122
123
123
124
124
def test_unit_create_request ():
125
- """Test create request method properly sets file, Content-Type and Content-Length headers."""
125
+ """Test create request method properly sets file, Content-Type and Content-Length headers.
126
+ List parameters should be flattened in the body."""
126
127
127
128
# Prepare test data
128
129
request = requests .PreparedRequest ()
@@ -133,27 +134,27 @@ def test_unit_create_request():
133
134
form_data = {
134
135
"parameter_1" : "value_1" ,
135
136
"parameter_2" : "value_2" ,
137
+ "list_parameter" : ["value_1" , "value_2" ],
136
138
}
137
139
page = (io .BytesIO (b"page_content" ), 1 )
138
140
filename = "test_file.pdf"
139
141
140
142
# Expected results
141
- expected_payload = {
142
- "parameter_1" : "value_1" ,
143
- "parameter_2" : "value_2" ,
144
- "split_pdf_page" : "false" ,
145
- "starting_page_number" : "7" ,
146
- }
147
143
expected_page_filename = "test_file.pdf"
148
144
expected_body = MultipartEncoder (
149
- fields = {
150
- ** expected_payload ,
151
- "files" : (
145
+ fields = [
146
+ ("parameter_1" , "value_1" ),
147
+ ("parameter_2" , "value_2" ),
148
+ ("list_parameter" , "value_1" ),
149
+ ("list_parameter" , "value_2" ),
150
+ ("split_pdf_page" , "false" ),
151
+ ("starting_page_number" , "7" ),
152
+ ("files" , (
152
153
expected_page_filename ,
153
154
page [0 ],
154
155
"application/pdf" ,
155
- ),
156
- }
156
+ )) ,
157
+ ]
157
158
)
158
159
expected_url = ""
159
160
@@ -164,7 +165,10 @@ def test_unit_create_request():
164
165
# Assert the request object
165
166
assert request_obj .method == "POST"
166
167
assert request_obj .url == expected_url
167
- assert request_obj .data .fields == expected_body .fields
168
+
169
+ # Validate fields ignoring order
170
+ assert set (request_obj .data .fields ) == set (expected_body .fields )
171
+
168
172
assert request_content_type .startswith ("multipart/form-data" )
169
173
170
174
@@ -191,11 +195,37 @@ def test_unit_decode_content_disposition():
191
195
192
196
193
197
def test_unit_parse_form_data ():
194
- """Test parse form data method properly parses the form data and returns dictionary."""
198
+ """Test parse form data method properly parses the form data and returns dictionary.
199
+ Parameters with the same key should be consolidated to a list."""
195
200
196
201
# Prepare test data
202
+ test_form_data = (
203
+ b"--boundary\r \n "
204
+ b"Content-Disposition: form-data; name=\" files\" ; filename=\" test_file.pdf\" \r \n "
205
+ b"\r \n "
206
+ b"file_content\r \n "
207
+ b"--boundary\r \n "
208
+ b"Content-Disposition: form-data; name=\" parameter_1\" \r \n "
209
+ b"\r \n "
210
+ b"value_1\r \n "
211
+ b"--boundary\r \n "
212
+ b"Content-Disposition: form-data; name=\" parameter_2\" \r \n "
213
+ b"\r \n "
214
+ b"value_2\r \n "
215
+ b"--boundary\r \n "
216
+ b"Content-Disposition: form-data; name=\" list_parameter\" \r \n "
217
+ b"\r \n "
218
+ b"value_1\r \n "
219
+ b"--boundary\r \n "
220
+ b"Content-Disposition: form-data; name=\" list_parameter\" \r \n "
221
+ b"\r \n "
222
+ b"value_2\r \n "
223
+ b"--boundary--\r \n "
224
+ )
225
+
226
+
197
227
decoded_data = MultipartDecoder (
198
- b'--boundary \r \n Content-Disposition: form-data; name="files"; filename="test_file.pdf" \r \n \r \n file_content \r \n --boundary \r \n Content-Disposition: form-data; name="parameter_1" \r \n \r \n value_1 \r \n --boundary \r \n Content-Disposition: form-data; name="parameter_2" \r \n \r \n value_2 \r \n --boundary-- \r \n ' ,
228
+ test_form_data ,
199
229
"multipart/form-data; boundary=boundary" ,
200
230
)
201
231
@@ -204,6 +234,7 @@ def test_unit_parse_form_data():
204
234
"files" : shared .Files (b"file_content" , "test_file.pdf" ),
205
235
"parameter_1" : "value_1" ,
206
236
"parameter_2" : "value_2" ,
237
+ "list_parameter" : ["value_1" , "value_2" ],
207
238
}
208
239
209
240
# Parse form data
@@ -212,6 +243,7 @@ def test_unit_parse_form_data():
212
243
# Assert the parsed form data
213
244
assert form_data .get ("parameter_1" ) == expected_form_data .get ("parameter_1" )
214
245
assert form_data .get ("parameter_2" ) == expected_form_data .get ("parameter_2" )
246
+ assert form_data .get ("list_parameter" ) == expected_form_data .get ("list_parameter" )
215
247
assert form_data .get ("files" ).file_name == expected_form_data .get ("files" ).file_name
216
248
217
249
assert form_data .get ("files" ).content == expected_form_data .get ("files" ).content
0 commit comments