From 3c8d0eeb440b8c263686ba81df7be87290ad9695 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Tue, 18 Dec 2018 02:16:25 +0100 Subject: [PATCH] ErrorHandler: Don't wrap the response if a content-type is defined --- src/Middleware/ErrorHandler.php | 8 +++++++- tests/Unit/Middleware/ErrorHandlerTest.php | 20 +++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Middleware/ErrorHandler.php b/src/Middleware/ErrorHandler.php index c99ac24f..9fc34722 100644 --- a/src/Middleware/ErrorHandler.php +++ b/src/Middleware/ErrorHandler.php @@ -46,7 +46,13 @@ class ErrorHandler implements MiddlewareInterface } $statusCode = $response->getStatusCode(); - if ($statusCode < 400 || !$response instanceof Response) { + $contentType = $response->getHeader('content-type'); + $contentType = array_shift($contentType); + if ( + $statusCode < 400 + || !$response instanceof Response + || !empty($contentType) + ) { return $response; } diff --git a/tests/Unit/Middleware/ErrorHandlerTest.php b/tests/Unit/Middleware/ErrorHandlerTest.php index c0834591..cce752d1 100644 --- a/tests/Unit/Middleware/ErrorHandlerTest.php +++ b/tests/Unit/Middleware/ErrorHandlerTest.php @@ -32,6 +32,10 @@ class ErrorHandlerTest extends TestCase $psrResponse->expects($this->once()) ->method('getStatusCode') ->willReturn(505); + $psrResponse->expects($this->once()) + ->method('getHeader') + ->with('content-type') + ->willReturn([]); $errorHandler = new ErrorHandler($twigLoader); @@ -41,13 +45,22 @@ class ErrorHandlerTest extends TestCase /** @var Response|MockObject $response */ $response = $this->createMock(Response::class); - $response->expects($this->exactly(3)) + $response->expects($this->exactly(4)) ->method('getStatusCode') ->willReturnOnConsecutiveCalls( 200, 418, + 505, 505 ); + $response->expects($this->exactly(4)) + ->method('getHeader') + ->willReturnOnConsecutiveCalls( + [], + [], + [], + ['application/json'] + ); $returnResponseHandler->setResponse($response); $return = $errorHandler->process($request, $returnResponseHandler); @@ -85,6 +98,7 @@ class ErrorHandlerTest extends TestCase $errorHandler->process($request, $returnResponseHandler); $errorHandler->process($request, $returnResponseHandler); + $errorHandler->process($request, $returnResponseHandler); } /** @@ -104,6 +118,10 @@ class ErrorHandlerTest extends TestCase $psrResponse->expects($this->once()) ->method('getStatusCode') ->willReturn(300); + $psrResponse->expects($this->once()) + ->method('getHeader') + ->with('content-type') + ->willReturn([]); $returnResponseHandler->expects($this->once()) ->method('handle')