PdfEncoderTest.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Tests\Unit\Service\Export\Encoder;
  3. use App\Service\Export\Encoder\PdfEncoder;
  4. use App\Service\Utils\Path;
  5. use Dompdf\Dompdf;
  6. use Dompdf\Options;
  7. use Knp\Snappy\Pdf;
  8. use PHPUnit\Framework\MockObject\MockObject;
  9. use PHPUnit\Framework\TestCase;
  10. class TestablePdfEncoder extends PdfEncoder {
  11. public function setDomPdfOptions(Options $options): void {
  12. $this->domPdfOptions = $options;
  13. }
  14. public function setDomPdf(Dompdf $dompdf): void {
  15. $this->dompdf = $dompdf;
  16. }
  17. }
  18. class PdfEncoderTest extends TestCase
  19. {
  20. /**
  21. * @see PdfEncoder::support()
  22. */
  23. public function testSupport(): void
  24. {
  25. $encoder = $this->getMockBuilder(PdfEncoder::class)
  26. ->disableOriginalConstructor()
  27. ->setMethodsExcept(['support'])
  28. ->getMock();
  29. $this->assertTrue($encoder->support('pdf'));
  30. $this->assertFalse($encoder->support('txt'));
  31. }
  32. /**
  33. * @see PdfEncoder::encode()
  34. */
  35. public function testEncode(): void
  36. {
  37. $encoder = $this->getMockBuilder(TestablePdfEncoder::class)
  38. ->disableOriginalConstructor()
  39. ->setMethodsExcept(['encode', 'setDomPdfOptions', 'setDomPdf'])
  40. ->getMock();
  41. $domPdfOptions = $this->getMockBuilder(Options::class)->disableOriginalConstructor()->getMock();
  42. $domPdf = $this->getMockBuilder(Dompdf::class)->disableOriginalConstructor()->getMock();
  43. $encoder->setDomPdfOptions($domPdfOptions);
  44. $encoder->setDomPdf($domPdf);
  45. $domPdfOptions->expects(self::once())->method('setIsRemoteEnabled')->with(true);
  46. $domPdfOptions->expects(self::once())->method('setChroot')->with(Path::getProjectDir() . '/public');
  47. $domPdfOptions->expects(self::once())->method('setDefaultPaperOrientation')->with('portrait');
  48. $domPdfOptions->expects(self::once())->method('setDefaultPaperSize')->with('A4');
  49. $domPdfOptions->expects(self::once())->method('set')->with(['additionalOption' => 2]);
  50. $domPdf->expects(self::once())->method('setOptions')->with($domPdfOptions);
  51. $domPdf->expects(self::once())->method('loadHtml')->with('<div>content</div>');
  52. $domPdf->expects(self::once())->method('render');
  53. $domPdf->expects(self::once())->method('output')->willReturn('%%encoded%%');
  54. $this->assertEquals(
  55. '%%encoded%%',
  56. $encoder->encode('<div>content</div>', ['additionalOption' => 2])
  57. );
  58. }
  59. }