From 5128833c177c0d6cb19a460a38b312c284cdf529 Mon Sep 17 00:00:00 2001 From: l0gicgate Date: Tue, 20 Aug 2019 09:12:15 -0600 Subject: [PATCH] fix redirect method bug due $this keyword binding --- Slim/Routing/RouteCollectorProxy.php | 6 ++++-- tests/Routing/RouteCollectorProxyTest.php | 26 ++++++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Slim/Routing/RouteCollectorProxy.php b/Slim/Routing/RouteCollectorProxy.php index 85fe0e760..695c46c7a 100644 --- a/Slim/Routing/RouteCollectorProxy.php +++ b/Slim/Routing/RouteCollectorProxy.php @@ -195,8 +195,10 @@ public function group(string $pattern, $callable): RouteGroupInterface */ public function redirect(string $from, $to, int $status = 302): RouteInterface { - $handler = function () use ($to, $status) { - $response = $this->responseFactory->createResponse($status); + $responseFactory = $this->responseFactory; + + $handler = function () use ($to, $status, $responseFactory) { + $response = $responseFactory->createResponse($status); return $response->withHeader('Location', (string) $to); }; diff --git a/tests/Routing/RouteCollectorProxyTest.php b/tests/Routing/RouteCollectorProxyTest.php index 2fcb65de4..70f6c8430 100644 --- a/tests/Routing/RouteCollectorProxyTest.php +++ b/tests/Routing/RouteCollectorProxyTest.php @@ -12,6 +12,7 @@ use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; +use Slim\CallableResolver; use Slim\Interfaces\CallableResolverInterface; use Slim\Interfaces\RouteCollectorInterface; use Slim\Interfaces\RouteGroupInterface; @@ -384,9 +385,8 @@ public function testMap() public function testRedirect() { - - $callableResolverProphecy = $this->prophesize(CallableResolverInterface::class); $containerProphecy = $this->prophesize(ContainerInterface::class); + $callableResolver = new CallableResolver($containerProphecy->reveal()); $from = '/from'; $to = '/to'; @@ -399,27 +399,33 @@ public function testRedirect() $responseFactoryProphecy = $this->prophesize(ResponseFactoryInterface::class); $responseFactoryProphecy - ->createResponse(302) - ->willReturn($responseProphecy->reveal()) + ->createResponse() + ->will(function () use ($responseProphecy) { + $this + ->createResponse(302) + ->willReturn($responseProphecy) + ->shouldBeCalledOnce(); + return $responseProphecy->reveal(); + }) ->shouldBeCalledOnce(); $routeCollector = new RouteCollector( $responseFactoryProphecy->reveal(), - $callableResolverProphecy->reveal() + $callableResolver ); $routeCollectorProxy = new RouteCollectorProxy( $responseFactoryProphecy->reveal(), - $callableResolverProphecy->reveal(), - null, + $callableResolver, + $containerProphecy->reveal(), $routeCollector ); $route = $routeCollectorProxy->redirect($from, $to); - $routeCallable = $route->getCallable(); - $routeCallable(); + $request = $this->createServerRequest('/'); + $response = $route->run($request); - $this->assertEquals($from, $route->getPattern()); + $this->assertSame($responseProphecy->reveal(), $response); } public function testGroup()