@@ -286,11 +286,56 @@ public function it_switch_method_for_302(
286
286
287
287
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
288
288
$ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
289
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
290
+ $ modifiedRequest ->getMethod ()->willReturn ('POST ' );
291
+ $ modifiedRequest ->withMethod ('GET ' )->shouldBeCalled ()->willReturn ($ modifiedRequest );
292
+
293
+ $ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
294
+ if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
295
+ return new HttpFulfilledPromise ($ responseRedirect ->getWrappedObject ());
296
+ }
297
+ };
298
+
299
+ $ first = function (RequestInterface $ receivedRequest ) use ($ modifiedRequest , $ promise ) {
300
+ if (Argument::is ($ modifiedRequest ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
301
+ return $ promise ->getWrappedObject ();
302
+ }
303
+ };
304
+
305
+ $ promise ->getState ()->willReturn (Promise::FULFILLED );
306
+ $ promise ->wait ()->shouldBeCalled ()->willReturn ($ finalResponse );
307
+
308
+ $ this ->handleRequest ($ request , $ next , $ first );
309
+ }
310
+
311
+ public function it_does_not_switch_method_for_302_with_strict_option (
312
+ UriInterface $ uri ,
313
+ UriInterface $ uriRedirect ,
314
+ RequestInterface $ request ,
315
+ ResponseInterface $ responseRedirect ,
316
+ RequestInterface $ modifiedRequest ,
317
+ ResponseInterface $ finalResponse ,
318
+ Promise $ promise
319
+ ) {
320
+ $ this ->beConstructedWith (['strict ' => true ]);
321
+
322
+ $ request ->getUri ()->willReturn ($ uri );
323
+ $ uri ->__toString ()->willReturn ('/original ' );
289
324
325
+ $ responseRedirect ->getStatusCode ()->willReturn (302 );
326
+ $ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
327
+ $ responseRedirect ->getHeaderLine ('Location ' )->willReturn ('/redirect ' );
328
+
329
+ $ request ->getUri ()->willReturn ($ uri );
330
+ $ uri ->withPath ('/redirect ' )->willReturn ($ uriRedirect );
331
+ $ uriRedirect ->withFragment ('' )->willReturn ($ uriRedirect );
332
+ $ uriRedirect ->withQuery ('' )->willReturn ($ uriRedirect );
333
+
334
+ $ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
290
335
$ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
291
336
$ uriRedirect ->__toString ()->willReturn ('/redirect ' );
292
337
$ modifiedRequest ->getMethod ()->willReturn ('POST ' );
293
- $ modifiedRequest ->withMethod ('GET ' )->willReturn ( $ modifiedRequest );
338
+ $ modifiedRequest ->withMethod ('GET ' )->shouldNotBeCalled ( );
294
339
295
340
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
296
341
if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
0 commit comments