mirror of
https://github.com/shlinkio/shlink.git
synced 2026-03-06 23:33:13 +08:00
Removed content-based-error-handler in preparation for the problem details module
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Shlinkio\Shlink\Rest\ErrorHandler\JsonErrorResponseGenerator;
|
||||
|
||||
return [
|
||||
|
||||
'error_handler' => [
|
||||
'plugins' => [
|
||||
'invokables' => [
|
||||
'application/json' => JsonErrorResponseGenerator::class,
|
||||
],
|
||||
'aliases' => [
|
||||
'application/x-json' => 'application/json',
|
||||
'text/json' => 'application/json',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
@@ -15,8 +15,8 @@ use Zend\Diactoros\Response\JsonResponse;
|
||||
class HealthAction extends AbstractRestAction
|
||||
{
|
||||
private const HEALTH_CONTENT_TYPE = 'application/health+json';
|
||||
private const PASS_STATUS = 'pass';
|
||||
private const FAIL_STATUS = 'fail';
|
||||
private const STATUS_PASS = 'pass';
|
||||
private const STATUS_FAIL = 'fail';
|
||||
|
||||
protected const ROUTE_PATH = '/health';
|
||||
protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET];
|
||||
@@ -48,7 +48,7 @@ class HealthAction extends AbstractRestAction
|
||||
|
||||
$statusCode = $connected ? self::STATUS_OK : self::STATUS_SERVICE_UNAVAILABLE;
|
||||
return new JsonResponse([
|
||||
'status' => $connected ? self::PASS_STATUS : self::FAIL_STATUS,
|
||||
'status' => $connected ? self::STATUS_PASS : self::STATUS_FAIL,
|
||||
'version' => $this->options->getVersion(),
|
||||
'links' => [
|
||||
'about' => 'https://shlink.io',
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Shlinkio\Shlink\Rest\ErrorHandler;
|
||||
|
||||
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorInterface;
|
||||
use Fig\Http\Message\StatusCodeInterface;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Throwable;
|
||||
use Zend\Diactoros\Response\JsonResponse;
|
||||
|
||||
use function str_replace;
|
||||
use function strtoupper;
|
||||
|
||||
class JsonErrorResponseGenerator implements ErrorResponseGeneratorInterface, StatusCodeInterface
|
||||
{
|
||||
/**
|
||||
* Final handler for an application.
|
||||
*
|
||||
* @param \Throwable|\Exception $e
|
||||
* @param Request $request
|
||||
* @param Response $response
|
||||
* @return Response
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function __invoke(?Throwable $e, Request $request, Response $response)
|
||||
{
|
||||
$status = $response->getStatusCode();
|
||||
$responsePhrase = $status < 400 ? 'Internal Server Error' : $response->getReasonPhrase();
|
||||
$status = $status < 400 ? self::STATUS_INTERNAL_SERVER_ERROR : $status;
|
||||
|
||||
return new JsonResponse([
|
||||
'error' => $this->responsePhraseToCode($responsePhrase),
|
||||
'message' => $responsePhrase,
|
||||
], $status);
|
||||
}
|
||||
|
||||
private function responsePhraseToCode(string $responsePhrase): string
|
||||
{
|
||||
return strtoupper(str_replace(' ', '_', $responsePhrase));
|
||||
}
|
||||
}
|
||||
@@ -18,11 +18,10 @@ class ConfigProviderTest extends TestCase
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function properConfigIsReturned()
|
||||
public function properConfigIsReturned(): void
|
||||
{
|
||||
$config = $this->configProvider->__invoke();
|
||||
|
||||
$this->assertArrayHasKey('error_handler', $config);
|
||||
$this->assertArrayHasKey('routes', $config);
|
||||
$this->assertArrayHasKey('dependencies', $config);
|
||||
}
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ShlinkioTest\Shlink\Rest\ErrorHandler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shlinkio\Shlink\Rest\ErrorHandler\JsonErrorResponseGenerator;
|
||||
use Zend\Diactoros\Response;
|
||||
use Zend\Diactoros\ServerRequest;
|
||||
|
||||
use function array_map;
|
||||
use function range;
|
||||
|
||||
class JsonErrorResponseGeneratorTest extends TestCase
|
||||
{
|
||||
/** @var JsonErrorResponseGenerator */
|
||||
private $errorHandler;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
$this->errorHandler = new JsonErrorResponseGenerator();
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function noErrorStatusReturnsInternalServerError(): void
|
||||
{
|
||||
/** @var Response\JsonResponse $response */
|
||||
$response = $this->errorHandler->__invoke(null, new ServerRequest(), new Response());
|
||||
$payload = $response->getPayload();
|
||||
|
||||
$this->assertInstanceOf(Response\JsonResponse::class, $response);
|
||||
$this->assertEquals(500, $response->getStatusCode());
|
||||
$this->assertEquals('Internal Server Error', $payload['message']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @dataProvider provideStatus
|
||||
*/
|
||||
public function errorStatusReturnsThatStatus(int $status, string $message): void
|
||||
{
|
||||
/** @var Response\JsonResponse $response */
|
||||
$response = $this->errorHandler->__invoke(
|
||||
null,
|
||||
new ServerRequest(),
|
||||
(new Response())->withStatus($status, $message)
|
||||
);
|
||||
$payload = $response->getPayload();
|
||||
|
||||
$this->assertInstanceOf(Response\JsonResponse::class, $response);
|
||||
$this->assertEquals($status, $response->getStatusCode());
|
||||
$this->assertEquals($message, $payload['message']);
|
||||
}
|
||||
|
||||
public function provideStatus(): iterable
|
||||
{
|
||||
return array_map(function (int $status) {
|
||||
return [$status, 'Some message'];
|
||||
}, range(400, 500, 20));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user