QrCodeCacheMiddlewareTest.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. declare(strict_types=1);
  3. namespace ShlinkioTest\Shlink\Core\Middleware;
  4. use Doctrine\Common\Cache\ArrayCache;
  5. use Doctrine\Common\Cache\Cache;
  6. use Laminas\Diactoros\Response;
  7. use Laminas\Diactoros\ServerRequest;
  8. use Laminas\Diactoros\Uri;
  9. use PHPUnit\Framework\TestCase;
  10. use Prophecy\Argument;
  11. use Psr\Http\Server\RequestHandlerInterface;
  12. use Shlinkio\Shlink\Core\Middleware\QrCodeCacheMiddleware;
  13. class QrCodeCacheMiddlewareTest extends TestCase
  14. {
  15. private QrCodeCacheMiddleware $middleware;
  16. private Cache $cache;
  17. public function setUp(): void
  18. {
  19. $this->cache = new ArrayCache();
  20. $this->middleware = new QrCodeCacheMiddleware($this->cache);
  21. }
  22. /** @test */
  23. public function noCachedPathFallsBackToNextMiddleware(): void
  24. {
  25. $delegate = $this->prophesize(RequestHandlerInterface::class);
  26. $delegate->handle(Argument::any())->willReturn(new Response())->shouldBeCalledOnce();
  27. $this->middleware->process((new ServerRequest())->withUri(new Uri('/foo/bar')), $delegate->reveal());
  28. $this->assertTrue($this->cache->contains('/foo/bar'));
  29. }
  30. /** @test */
  31. public function cachedPathReturnsCacheContent(): void
  32. {
  33. $isCalled = false;
  34. $uri = (new Uri())->withPath('/foo');
  35. $this->cache->save('/foo', ['body' => 'the body', 'content-type' => 'image/png']);
  36. $delegate = $this->prophesize(RequestHandlerInterface::class);
  37. $resp = $this->middleware->process((new ServerRequest())->withUri($uri), $delegate->reveal());
  38. $this->assertFalse($isCalled);
  39. $resp->getBody()->rewind();
  40. $this->assertEquals('the body', $resp->getBody()->getContents());
  41. $this->assertEquals('image/png', $resp->getHeaderLine('Content-Type'));
  42. $delegate->handle(Argument::any())->shouldHaveBeenCalledTimes(0);
  43. }
  44. }