CachedMarkdownConverterTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace App\Tests\Utils;
  3. use App\CommonMark\CachedMarkdownConverter;
  4. use App\CommonMark\MarkdownConverter;
  5. use PHPUnit\Framework\TestCase;
  6. use Psr\Cache\CacheItemInterface;
  7. use Psr\Cache\CacheItemPoolInterface;
  8. class CachedMarkdownConverterTest extends TestCase {
  9. public function testLoadFromCache() {
  10. $cacheItem = $this->createMock(CacheItemInterface::class);
  11. $cacheItem
  12. ->expects($this->once())
  13. ->method('isHit')
  14. ->willReturn(true);
  15. $cacheItem
  16. ->expects($this->never())
  17. ->method('set');
  18. $cacheItem
  19. ->expects($this->once())
  20. ->method('get')
  21. ->willReturn('html output');
  22. $cacheItemPool = $this->createMock(CacheItemPoolInterface::class);
  23. $cacheItemPool
  24. ->expects($this->once())
  25. ->method('getItem')
  26. ->with($this->equalTo(sprintf(
  27. 'cached_markdown.%s.%s',
  28. hash('sha256', 'markdown input'),
  29. hash('sha256', '{"base_path":"","open_external_links_in_new_tab":false}')
  30. )))
  31. ->willReturn($cacheItem);
  32. $cacheItemPool
  33. ->expects($this->never())
  34. ->method('saveDeferred');
  35. $converter = $this->createMock(MarkdownConverter::class);
  36. $converter
  37. ->expects($this->never())
  38. ->method('convertToHtml');
  39. /* @var \App\CommonMark\CachedMarkdownConverter $cachedConverter */
  40. $cachedConverter = $this->getMockBuilder(CachedMarkdownConverter::class)
  41. ->setConstructorArgs([$cacheItemPool, $converter])
  42. ->enableProxyingToOriginalMethods()
  43. ->getMock();
  44. $this->assertSame(
  45. 'html output',
  46. $cachedConverter->convertToHtml('markdown input')
  47. );
  48. }
  49. public function testSaveToCache() {
  50. $cacheItem = $this->createMock(CacheItemInterface::class);
  51. $cacheItem
  52. ->expects($this->once())
  53. ->method('isHit')
  54. ->willReturn(false);
  55. $cacheItem
  56. ->expects($this->once())
  57. ->method('set')
  58. ->with('html output');
  59. $cacheItem
  60. ->expects($this->once())
  61. ->method('get')
  62. ->willReturn('html output');
  63. $cacheItemPool = $this->createMock(CacheItemPoolInterface::class);
  64. $cacheItemPool
  65. ->expects($this->once())
  66. ->method('getItem')
  67. ->with($this->equalTo(sprintf(
  68. 'cached_markdown.%s.%s',
  69. hash('sha256', 'markdown input'),
  70. hash('sha256', '{"base_path":"","open_external_links_in_new_tab":false}')
  71. )))
  72. ->willReturn($cacheItem);
  73. $cacheItemPool
  74. ->expects($this->once())
  75. ->method('saveDeferred');
  76. $converter = $this->createMock(MarkdownConverter::class);
  77. $converter
  78. ->expects($this->once())
  79. ->method('convertToHtml')
  80. ->with(
  81. $this->equalTo('markdown input'),
  82. $this->equalTo([
  83. 'base_path' => '',
  84. 'open_external_links_in_new_tab' => false,
  85. ])
  86. )
  87. ->willReturn('html output');
  88. /* @var \App\CommonMark\CachedMarkdownConverter $cachedConverter */
  89. $cachedConverter = $this->getMockBuilder(CachedMarkdownConverter::class)
  90. ->setConstructorArgs([$cacheItemPool, $converter])
  91. ->enableProxyingToOriginalMethods()
  92. ->getMock();
  93. $this->assertSame(
  94. 'html output',
  95. $cachedConverter->convertToHtml('markdown input')
  96. );
  97. }
  98. }