@@ -160,8 +160,35 @@ def test_finish_empty(self):
160
160
self .assertRaises (ValueError , batch .finish )
161
161
self .assertTrue (connection .http is http )
162
162
163
- def test_finish_nonempty (self ):
163
+ def _check_subrequest_no_payload (self , chunk , method , url ):
164
+ lines = chunk .splitlines ()
165
+ # blank + 2 headers + blank + request + blank + blank
166
+ self .assertEqual (len (lines ), 7 )
167
+ self .assertEqual (lines [0 ], '' )
168
+ self .assertEqual (lines [1 ], 'Content-Type: application/http' )
169
+ self .assertEqual (lines [2 ], 'MIME-Version: 1.0' )
170
+ self .assertEqual (lines [3 ], '' )
171
+ self .assertEqual (lines [4 ], '%s %s HTTP/1.1' % (method , url ))
172
+ self .assertEqual (lines [5 ], '' )
173
+ self .assertEqual (lines [6 ], '' )
174
+
175
+ def _check_subrequest_payload (self , chunk , method , url , payload ):
164
176
import json
177
+ lines = chunk .splitlines ()
178
+ # blank + 2 headers + blank + request + 2 headers + blank + body
179
+ payload_str = json .dumps (payload )
180
+ self .assertEqual (len (lines ), 9 )
181
+ self .assertEqual (lines [0 ], '' )
182
+ self .assertEqual (lines [1 ], 'Content-Type: application/http' )
183
+ self .assertEqual (lines [2 ], 'MIME-Version: 1.0' )
184
+ self .assertEqual (lines [3 ], '' )
185
+ self .assertEqual (lines [4 ], '%s %s HTTP/1.1' % (method , url ))
186
+ self .assertEqual (lines [5 ], 'Content-Length: %d' % len (payload_str ))
187
+ self .assertEqual (lines [6 ], 'Content-Type: application/json' )
188
+ self .assertEqual (lines [7 ], '' )
189
+ self .assertEqual (json .loads (lines [8 ]), payload )
190
+
191
+ def test_finish_nonempty (self ):
165
192
URL = 'http://api.example.com/other_api'
166
193
expected = _Response ()
167
194
expected ['Content-Type' ] = 'multipart/mixed; boundary="DEADBEEF="'
@@ -188,7 +215,7 @@ def test_finish_nonempty(self):
188
215
self .assertEqual (uri , 'http://api.example.com/batch' )
189
216
self .assertEqual (len (headers ), 2 )
190
217
ctype , boundary = [x .strip ()
191
- for x in headers ['Content-Type' ].split (';' )]
218
+ for x in headers ['Content-Type' ].split (';' )]
192
219
self .assertEqual (ctype , 'multipart/mixed' )
193
220
self .assertTrue (boundary .startswith ('boundary="==' ))
194
221
self .assertTrue (boundary .endswith ('=="' ))
@@ -198,43 +225,12 @@ def test_finish_nonempty(self):
198
225
chunks = body .split (divider )[1 :- 1 ] # discard prolog / epilog
199
226
self .assertEqual (len (chunks ), 3 )
200
227
201
- lines = chunks [0 ].splitlines ()
202
- # blank + 2 headers + blank + request + 2 headers + blank + body
203
- self .assertEqual (len (lines ), 9 )
204
- self .assertEqual (lines [0 ], '' )
205
- self .assertEqual (lines [1 ], 'Content-Type: application/http' )
206
- self .assertEqual (lines [2 ], 'MIME-Version: 1.0' )
207
- self .assertEqual (lines [3 ], '' )
208
- self .assertEqual (lines [4 ], 'POST %s HTTP/1.1' % URL )
209
- self .assertEqual (lines [5 ], 'Content-Length: 20' )
210
- self .assertEqual (lines [6 ], 'Content-Type: application/json' )
211
- self .assertEqual (lines [7 ], '' )
212
- self .assertEqual (json .loads (lines [8 ]), {'foo' : 1 , 'bar' : 2 })
213
-
214
- lines = chunks [1 ].splitlines ()
215
- # blank + 2 headers + blank + request + 2 headers + blank + body
216
- self .assertEqual (len (lines ), 9 )
217
- self .assertEqual (lines [0 ], '' )
218
- self .assertEqual (lines [1 ], 'Content-Type: application/http' )
219
- self .assertEqual (lines [2 ], 'MIME-Version: 1.0' )
220
- self .assertEqual (lines [3 ], '' )
221
- self .assertEqual (lines [4 ], 'PATCH %s HTTP/1.1' % URL )
222
- self .assertEqual (lines [5 ], 'Content-Length: 10' )
223
- self .assertEqual (lines [6 ], 'Content-Type: application/json' )
224
- self .assertEqual (lines [7 ], '' )
225
- self .assertEqual (json .loads (lines [8 ]), {'bar' : 3 })
228
+ self ._check_subrequest_payload (chunks [0 ], 'POST' , URL ,
229
+ {'foo' : 1 , 'bar' : 2 })
226
230
227
- lines = chunks [2 ].splitlines ()
228
- # blank + 2 headers + blank + request + 2 headers + blank + body
229
- self .assertEqual (len (lines ), 7 )
230
- self .assertEqual (lines [0 ], '' )
231
- self .assertEqual (lines [1 ], 'Content-Type: application/http' )
232
- self .assertEqual (lines [2 ], 'MIME-Version: 1.0' )
233
- self .assertEqual (lines [3 ], '' )
234
- self .assertEqual (lines [4 ], 'DELETE %s HTTP/1.1' % URL )
235
- self .assertEqual (lines [5 ], '' )
236
- self .assertEqual (lines [6 ], '' )
231
+ self ._check_subrequest_payload (chunks [1 ], 'PATCH' , URL , {'bar' : 3 })
237
232
233
+ self ._check_subrequest_no_payload (chunks [2 ], 'DELETE' , URL )
238
234
239
235
def test_finish_nonempty_non_multipart_response (self ):
240
236
URL = 'http://api.example.com/other_api'
0 commit comments