diff --git a/CHANGELOG.md b/CHANGELOG.md index 74082f33..5091b0c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this ### Changed * [#1359](https://github.com/shlinkio/shlink/issues/1359) Hidden database commands. +* [#1385](https://github.com/shlinkio/shlink/issues/1385) Prevented a big error message from being logged when using Shlink without mercure. ### Deprecated * [#1340](https://github.com/shlinkio/shlink/issues/1340) Deprecated webhooks. New events will only be added to other real-time updates approaches, and webhooks will be completely removed in Shlink 4.0.0. diff --git a/module/Rest/test/Action/MercureInfoActionTest.php b/module/Rest/test/Action/MercureInfoActionTest.php index eca4177d..33083c79 100644 --- a/module/Rest/test/Action/MercureInfoActionTest.php +++ b/module/Rest/test/Action/MercureInfoActionTest.php @@ -11,7 +11,6 @@ use PHPUnit\Framework\TestCase; use Prophecy\Argument; use Prophecy\PhpUnit\ProphecyTrait; use Prophecy\Prophecy\ObjectProphecy; -use RuntimeException; use Shlinkio\Shlink\Common\Mercure\JwtProviderInterface; use Shlinkio\Shlink\Rest\Action\MercureInfoAction; use Shlinkio\Shlink\Rest\Exception\MercureException; @@ -49,24 +48,6 @@ class MercureInfoActionTest extends TestCase yield 'host is null' => [['public_hub_url' => null]]; } - /** - * @test - * @dataProvider provideValidConfigs - */ - public function throwsExceptionWhenBuildingTokenFails(array $mercureConfig): void - { - $buildToken = $this->provider->buildSubscriptionToken(Argument::any())->willThrow( - new RuntimeException('Error'), - ); - - $action = new MercureInfoAction($this->provider->reveal(), $mercureConfig); - - $this->expectException(MercureException::class); - $buildToken->shouldBeCalledOnce(); - - $action->handle(ServerRequestFactory::fromGlobals()); - } - public function provideValidConfigs(): iterable { yield 'days not defined' => [['public_hub_url' => 'http://foobar.com']]; diff --git a/module/Rest/test/Middleware/Mercure/NotConfiguredMercureErrorHandlerTest.php b/module/Rest/test/Middleware/Mercure/NotConfiguredMercureErrorHandlerTest.php new file mode 100644 index 00000000..138c01f0 --- /dev/null +++ b/module/Rest/test/Middleware/Mercure/NotConfiguredMercureErrorHandlerTest.php @@ -0,0 +1,62 @@ +respFactory = $this->prophesize(ProblemDetailsResponseFactory::class); + $this->logger = $this->prophesize(LoggerInterface::class); + $this->middleware = new NotConfiguredMercureErrorHandler($this->respFactory->reveal(), $this->logger->reveal()); + $this->handler = $this->prophesize(RequestHandlerInterface::class); + } + + /** @test */ + public function requestHandlerIsInvokedWhenNotErrorOccurs(): void + { + $req = ServerRequestFactory::fromGlobals(); + $handle = $this->handler->handle($req)->willReturn(new Response()); + + $this->middleware->process($req, $this->handler->reveal()); + + $handle->shouldHaveBeenCalledOnce(); + $this->logger->warning(Argument::cetera())->shouldNotHaveBeenCalled(); + $this->respFactory->createResponseFromThrowable(Argument::cetera())->shouldNotHaveBeenCalled(); + } + + /** @test */ + public function exceptionIsParsedToResponse(): void + { + $req = ServerRequestFactory::fromGlobals(); + $handle = $this->handler->handle($req)->willThrow(MercureException::mercureNotConfigured()); + $createResp = $this->respFactory->createResponseFromThrowable(Argument::cetera())->willReturn(new Response()); + + $this->middleware->process($req, $this->handler->reveal()); + + $handle->shouldHaveBeenCalledOnce(); + $createResp->shouldHaveBeenCalledOnce(); + $this->logger->warning(Argument::cetera())->shouldHaveBeenCalledOnce(); + } +}