NotFoundTemplateHandlerTest.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. declare(strict_types=1);
  3. namespace ShlinkioTest\Shlink\Core\ErrorHandler;
  4. use Laminas\Diactoros\Response;
  5. use Laminas\Diactoros\ServerRequestFactory;
  6. use Mezzio\Router\Route;
  7. use Mezzio\Router\RouteResult;
  8. use Mezzio\Template\TemplateRendererInterface;
  9. use PHPUnit\Framework\TestCase;
  10. use Prophecy\Prophecy\ObjectProphecy;
  11. use Psr\Http\Message\ServerRequestInterface;
  12. use Psr\Http\Server\MiddlewareInterface;
  13. use Shlinkio\Shlink\Core\ErrorHandler\NotFoundTemplateHandler;
  14. class NotFoundTemplateHandlerTest extends TestCase
  15. {
  16. private NotFoundTemplateHandler $handler;
  17. private ObjectProphecy $renderer;
  18. public function setUp(): void
  19. {
  20. $this->renderer = $this->prophesize(TemplateRendererInterface::class);
  21. $this->handler = new NotFoundTemplateHandler($this->renderer->reveal());
  22. }
  23. /**
  24. * @test
  25. * @dataProvider provideTemplates
  26. */
  27. public function properErrorTemplateIsRendered(ServerRequestInterface $request, string $expectedTemplate): void
  28. {
  29. $request = $request->withHeader('Accept', 'text/html');
  30. $render = $this->renderer->render($expectedTemplate)->willReturn('');
  31. $resp = $this->handler->handle($request);
  32. $this->assertInstanceOf(Response\HtmlResponse::class, $resp);
  33. $render->shouldHaveBeenCalledOnce();
  34. }
  35. public function provideTemplates(): iterable
  36. {
  37. $request = ServerRequestFactory::fromGlobals();
  38. yield [$request, NotFoundTemplateHandler::NOT_FOUND_TEMPLATE];
  39. yield [
  40. $request->withAttribute(
  41. RouteResult::class,
  42. RouteResult::fromRoute(new Route('', $this->prophesize(MiddlewareInterface::class)->reveal())),
  43. ),
  44. NotFoundTemplateHandler::INVALID_SHORT_CODE_TEMPLATE,
  45. ];
  46. }
  47. }