ErrorHandler: Don't wrap the response if a content-type is defined

This commit is contained in:
Igor Scheller 2018-12-18 02:16:25 +01:00 committed by msquare
parent 2570418e9f
commit 3c8d0eeb44
2 changed files with 26 additions and 2 deletions

View File

@ -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;
}

View File

@ -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')