@@ -286,11 +286,56 @@ public function it_switch_method_for_302(
286286
287287 $ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
288288 $ 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 ' );
289324
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 );
290335 $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
291336 $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
292337 $ modifiedRequest ->getMethod ()->willReturn ('POST ' );
293- $ modifiedRequest ->withMethod ('GET ' )->willReturn ( $ modifiedRequest );
338+ $ modifiedRequest ->withMethod ('GET ' )->shouldNotBeCalled ( );
294339
295340 $ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
296341 if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
0 commit comments