@@ -160,8 +160,35 @@ def test_finish_empty(self):
160160 self .assertRaises (ValueError , batch .finish )
161161 self .assertTrue (connection .http is http )
162162
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 ):
164176 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 ):
165192 URL = 'http://api.example.com/other_api'
166193 expected = _Response ()
167194 expected ['Content-Type' ] = 'multipart/mixed; boundary="DEADBEEF="'
@@ -188,7 +215,7 @@ def test_finish_nonempty(self):
188215 self .assertEqual (uri , 'http://api.example.com/batch' )
189216 self .assertEqual (len (headers ), 2 )
190217 ctype , boundary = [x .strip ()
191- for x in headers ['Content-Type' ].split (';' )]
218+ for x in headers ['Content-Type' ].split (';' )]
192219 self .assertEqual (ctype , 'multipart/mixed' )
193220 self .assertTrue (boundary .startswith ('boundary="==' ))
194221 self .assertTrue (boundary .endswith ('=="' ))
@@ -198,43 +225,12 @@ def test_finish_nonempty(self):
198225 chunks = body .split (divider )[1 :- 1 ] # discard prolog / epilog
199226 self .assertEqual (len (chunks ), 3 )
200227
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 })
226230
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 })
237232
233+ self ._check_subrequest_no_payload (chunks [2 ], 'DELETE' , URL )
238234
239235 def test_finish_nonempty_non_multipart_response (self ):
240236 URL = 'http://api.example.com/other_api'
0 commit comments