diff --git a/module/Core/test/Action/PreviewActionTest.php b/module/Core/test/Action/PreviewActionTest.php index a5e57d2d..fa7a84c0 100644 --- a/module/Core/test/Action/PreviewActionTest.php +++ b/module/Core/test/Action/PreviewActionTest.php @@ -1,16 +1,15 @@ urlShortener->shortCodeToUrl($shortCode)->willReturn(null)->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); + $delegate->process(Argument::cetera())->shouldBeCalledTimes(1); $this->action->process( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), $delegate->reveal() ); - - $delegate->process(Argument::cetera())->shouldHaveBeenCalledTimes(1); } /** @@ -75,12 +73,12 @@ class PreviewActionTest extends TestCase /** * @test */ - public function invalidShortcodeExceptionFallsBackToNextMiddleware() + public function invalidShortCodeExceptionFallsBackToNextMiddleware() { $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willThrow(InvalidShortCodeException::class) ->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $this->action->process( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), diff --git a/module/Core/test/Action/QrCodeActionTest.php b/module/Core/test/Action/QrCodeActionTest.php index dc005b11..ea71d855 100644 --- a/module/Core/test/Action/QrCodeActionTest.php +++ b/module/Core/test/Action/QrCodeActionTest.php @@ -1,6 +1,7 @@ urlShortener->shortCodeToUrl($shortCode)->willReturn(null)->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $this->action->process( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), @@ -59,7 +59,7 @@ class QrCodeActionTest extends TestCase $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willThrow(InvalidShortCodeException::class) ->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $this->action->process( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), @@ -76,7 +76,7 @@ class QrCodeActionTest extends TestCase { $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willReturn(new ShortUrl())->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $resp = $this->action->process( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), diff --git a/module/Core/test/Action/RedirectActionTest.php b/module/Core/test/Action/RedirectActionTest.php index 65b6250f..6e629772 100644 --- a/module/Core/test/Action/RedirectActionTest.php +++ b/module/Core/test/Action/RedirectActionTest.php @@ -1,6 +1,7 @@ urlShortener->shortCodeToUrl($shortCode)->willReturn(null) ->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $request = ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode); $this->action->process($request, $delegate->reveal()); @@ -73,7 +74,7 @@ class RedirectActionTest extends TestCase $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willThrow(\Exception::class) ->shouldBeCalledTimes(1); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $request = ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode); $this->action->process($request, $delegate->reveal()); diff --git a/module/Core/test/Middleware/QrCodeCacheMiddlewareTest.php b/module/Core/test/Middleware/QrCodeCacheMiddlewareTest.php index abc1801d..7e1ffc65 100644 --- a/module/Core/test/Middleware/QrCodeCacheMiddlewareTest.php +++ b/module/Core/test/Middleware/QrCodeCacheMiddlewareTest.php @@ -3,10 +3,10 @@ namespace ShlinkioTest\Shlink\Core\Middleware; use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Cache\Cache; +use Interop\Http\ServerMiddleware\DelegateInterface; use PHPUnit\Framework\TestCase; use Prophecy\Argument; use Shlinkio\Shlink\Core\Middleware\QrCodeCacheMiddleware; -use ShlinkioTest\Shlink\Common\Util\TestUtils; use Zend\Diactoros\Response; use Zend\Diactoros\ServerRequestFactory; use Zend\Diactoros\Uri; @@ -33,13 +33,14 @@ class QrCodeCacheMiddlewareTest extends TestCase */ public function noCachedPathFallsBackToNextMiddleware() { - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); + $delegate->process(Argument::any())->willReturn(new Response())->shouldBeCalledTimes(1); + $this->middleware->process(ServerRequestFactory::fromGlobals()->withUri( new Uri('/foo/bar') ), $delegate->reveal()); $this->assertTrue($this->cache->contains('/foo/bar')); - $delegate->process(Argument::any())->shouldHaveBeenCalledTimes(1); } /** @@ -50,7 +51,7 @@ class QrCodeCacheMiddlewareTest extends TestCase $isCalled = false; $uri = (new Uri())->withPath('/foo'); $this->cache->save('/foo', ['body' => 'the body', 'content-type' => 'image/png']); - $delegate = TestUtils::createDelegateMock(); + $delegate = $this->prophesize(DelegateInterface::class); $resp = $this->middleware->process( ServerRequestFactory::fromGlobals()->withUri($uri), diff --git a/module/Rest/src/Middleware/BodyParserMiddleware.php b/module/Rest/src/Middleware/BodyParserMiddleware.php index 7344ccc4..b12c8ef1 100644 --- a/module/Rest/src/Middleware/BodyParserMiddleware.php +++ b/module/Rest/src/Middleware/BodyParserMiddleware.php @@ -1,55 +1,45 @@ getMethod(); $currentParams = $request->getParsedBody(); // In requests that do not allow body or if the body has already been parsed, continue to next middleware - if (in_array($method, ['GET', 'HEAD', 'OPTIONS']) || ! empty($currentParams)) { - return $out($request, $response); + if (! empty($currentParams) || in_array($method, [ + self::METHOD_GET, + self::METHOD_HEAD, + self::METHOD_OPTIONS + ], true)) { + return $delegate->process($request); } // If the accepted content is JSON, try to parse the body from JSON $contentType = $this->getRequestContentType($request); - if (in_array($contentType, ['application/json', 'text/json', 'application/x-json'])) { - return $out($this->parseFromJson($request), $response); + if (in_array($contentType, ['application/json', 'text/json', 'application/x-json'], true)) { + return $delegate->process($this->parseFromJson($request)); } - return $out($this->parseFromUrlEncoded($request), $response); + return $delegate->process($this->parseFromUrlEncoded($request)); } /** diff --git a/module/Rest/test/Middleware/BodyParserMiddlewareTest.php b/module/Rest/test/Middleware/BodyParserMiddlewareTest.php index 67261b93..f42c99ef 100644 --- a/module/Rest/test/Middleware/BodyParserMiddlewareTest.php +++ b/module/Rest/test/Middleware/BodyParserMiddlewareTest.php @@ -1,8 +1,11 @@ withMethod('GET'); - $test = $this; - $this->middleware->__invoke($request, new Response(), function ($req, $resp) use ($test, $request) { - $test->assertSame($request, $req); - }); + $delegate = $this->prophesize(DelegateInterface::class); + /** @var MethodProphecy $process */ + $process = $delegate->process($request)->willReturn(new Response()); - $request = $request->withMethod('POST'); - $test = $this; - $this->middleware->__invoke($request, new Response(), function ($req, $resp) use ($test, $request) { - $test->assertSame($request, $req); - }); + $this->middleware->process($request, $delegate->reveal()); + + $process->shouldHaveBeenCalledTimes(1); } /** @@ -43,19 +43,31 @@ class BodyParserMiddlewareTest extends TestCase */ public function jsonRequestsAreJsonDecoded() { + $test = $this; $body = new Stream('php://temp', 'wr'); $body->write('{"foo": "bar", "bar": ["one", 5]}'); $request = ServerRequestFactory::fromGlobals()->withMethod('PUT') ->withBody($body) ->withHeader('content-type', 'application/json'); - $test = $this; - $this->middleware->__invoke($request, new Response(), function (Request $req, $resp) use ($test, $request) { - $test->assertNotSame($request, $req); - $test->assertEquals([ - 'foo' => 'bar', - 'bar' => ['one', 5], - ], $req->getParsedBody()); - }); + $delegate = $this->prophesize(DelegateInterface::class); + /** @var MethodProphecy $process */ + $process = $delegate->process(Argument::type(ServerRequestInterface::class))->will( + function (array $args) use ($test) { + /** @var ServerRequestInterface $req */ + $req = array_shift($args); + + $test->assertEquals([ + 'foo' => 'bar', + 'bar' => ['one', 5], + ], $req->getParsedBody()); + + return new Response(); + } + ); + + $this->middleware->process($request, $delegate->reveal()); + + $process->shouldHaveBeenCalledTimes(1); } /** @@ -63,17 +75,29 @@ class BodyParserMiddlewareTest extends TestCase */ public function regularRequestsAreUrlDecoded() { + $test = $this; $body = new Stream('php://temp', 'wr'); $body->write('foo=bar&bar[]=one&bar[]=5'); $request = ServerRequestFactory::fromGlobals()->withMethod('PUT') ->withBody($body); - $test = $this; - $this->middleware->__invoke($request, new Response(), function (Request $req, $resp) use ($test, $request) { - $test->assertNotSame($request, $req); - $test->assertEquals([ - 'foo' => 'bar', - 'bar' => ['one', 5], - ], $req->getParsedBody()); - }); + $delegate = $this->prophesize(DelegateInterface::class); + /** @var MethodProphecy $process */ + $process = $delegate->process(Argument::type(ServerRequestInterface::class))->will( + function (array $args) use ($test) { + /** @var ServerRequestInterface $req */ + $req = array_shift($args); + + $test->assertEquals([ + 'foo' => 'bar', + 'bar' => ['one', 5], + ], $req->getParsedBody()); + + return new Response(); + } + ); + + $this->middleware->process($request, $delegate->reveal()); + + $process->shouldHaveBeenCalledTimes(1); } }