PdfEncoderTest.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace App\Tests\Unit\Service\Export\Encoder;
  3. use App\Service\Export\Encoder\PdfEncoder;
  4. use App\Service\Utils\PathUtils;
  5. use Dompdf\Dompdf;
  6. use Dompdf\Options;
  7. use PHPUnit\Framework\TestCase;
  8. class TestablePdfEncoder extends PdfEncoder
  9. {
  10. public function getDomPdf(): Dompdf
  11. {
  12. return parent::getDomPdf();
  13. }
  14. public function getDomPdfOptions(): Options
  15. {
  16. return parent::getDomPdfOptions();
  17. }
  18. }
  19. class PdfEncoderTest extends TestCase
  20. {
  21. private function getPdfEncoderMockFor(string $method): TestablePdfEncoder
  22. {
  23. return $this->getMockBuilder(TestablePdfEncoder::class)
  24. ->disableOriginalConstructor()
  25. ->setMethodsExcept([$method])
  26. ->getMock();
  27. }
  28. /**
  29. * @see PdfEncoder::support()
  30. */
  31. public function testSupport(): void
  32. {
  33. $encoder = $this->getPdfEncoderMockFor('support');
  34. $this->assertTrue($encoder->support('pdf'));
  35. $this->assertFalse($encoder->support('txt'));
  36. }
  37. /**
  38. * @see PdfEncoder::getDomPdf()
  39. */
  40. public function testGetDomPdf(): void
  41. {
  42. $encoder = $this->getPdfEncoderMockFor('getDomPdf');
  43. $dompdf = $encoder->getDomPdf();
  44. $this->assertInstanceOf(Dompdf::class, $dompdf);
  45. }
  46. /**
  47. * @see PdfEncoder::getDomPdfOptions()
  48. */
  49. public function testGetDomPdfOptions(): void
  50. {
  51. $encoder = $this->getPdfEncoderMockFor('getDomPdfOptions');
  52. $options = $encoder->getDomPdfOptions();
  53. $this->assertInstanceOf(Options::class, $options);
  54. }
  55. /**
  56. * @see PdfEncoder::encode()
  57. */
  58. public function testEncode(): void
  59. {
  60. $encoder = $this->getPdfEncoderMockFor('encode');
  61. $domPdfOptions = $this->getMockBuilder(Options::class)->disableOriginalConstructor()->getMock();
  62. $domPdf = $this->getMockBuilder(Dompdf::class)->disableOriginalConstructor()->getMock();
  63. $encoder->expects(self::once())->method('getDomPdfOptions')->willReturn($domPdfOptions);
  64. $encoder->expects(self::once())->method('getDomPdf')->willReturn($domPdf);
  65. $domPdfOptions->expects(self::once())->method('setIsRemoteEnabled')->with(true);
  66. $domPdfOptions->expects(self::once())->method('setChroot')->with(PathUtils::getProjectDir().'/public');
  67. $domPdfOptions->expects(self::once())->method('setDefaultPaperOrientation')->with('portrait');
  68. $domPdfOptions->expects(self::once())->method('setDefaultPaperSize')->with('A4');
  69. $domPdfOptions->expects(self::once())->method('set')->with(['additionalOption' => 2]);
  70. $domPdf->expects(self::once())->method('setOptions')->with($domPdfOptions);
  71. $domPdf->expects(self::once())->method('loadHtml')->with('<div>content</div>');
  72. $domPdf->expects(self::once())->method('render');
  73. $domPdf->expects(self::once())->method('output')->willReturn('%%encoded%%');
  74. $this->assertEquals(
  75. '%%encoded%%',
  76. $encoder->encode('<div>content</div>', ['additionalOption' => 2])
  77. );
  78. }
  79. }