Olivier Massot 1 год назад
Родитель
Сommit
90f16d568a

+ 17 - 13
src/Service/Export/Encoder/PdfEncoder.php

@@ -14,7 +14,13 @@ use Dompdf\Options;
  */
 class PdfEncoder implements EncoderInterface
 {
-    public function __construct() {}
+    protected Options $domPdfOptions;
+    protected Dompdf $dompdf;
+
+    public function __construct() {
+        $this->domPdfOptions = new Options();
+        $this->dompdf = new Dompdf();
+    }
 
     public function support(string $format): bool
     {
@@ -32,17 +38,15 @@ class PdfEncoder implements EncoderInterface
      */
     public function encode(string $html, array $options = []): string
     {
-        $defaultOptions = new Options();
-        $defaultOptions->setIsRemoteEnabled(true);
-        $defaultOptions->setChroot(Path::getProjectDir() . '/public');
-        $defaultOptions->setIsRemoteEnabled(true);
-        $defaultOptions->setDefaultPaperOrientation('portrait');
-        $defaultOptions->setDefaultPaperSize('A4');
-        $defaultOptions->set($options);
-
-        $dompdf = new Dompdf($defaultOptions);
-        $dompdf->loadHtml($html);
-        $dompdf->render();
-        return $dompdf->output();
+        $this->domPdfOptions->setIsRemoteEnabled(true);
+        $this->domPdfOptions->setChroot(Path::getProjectDir() . '/public');
+        $this->domPdfOptions->setDefaultPaperOrientation('portrait');
+        $this->domPdfOptions->setDefaultPaperSize('A4');
+        $this->domPdfOptions->set($options);
+
+        $this->dompdf->setOptions($this->domPdfOptions);
+        $this->dompdf->loadHtml($html);
+        $this->dompdf->render();
+        return $this->dompdf->output();
     }
 }

+ 30 - 29
tests/Unit/Service/Export/Encoder/PdfEncoderTest.php

@@ -3,26 +3,32 @@
 namespace App\Tests\Unit\Service\Export\Encoder;
 
 use App\Service\Export\Encoder\PdfEncoder;
+use App\Service\Utils\Path;
+use Dompdf\Dompdf;
+use Dompdf\Options;
 use Knp\Snappy\Pdf;
 use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 
-class PdfEncoderTest extends TestCase
-{
-    private MockObject|Pdf $knpSnappy;
+class TestablePdfEncoder extends PdfEncoder {
+    public function setDomPdfOptions(Options $options): void {
+        $this->domPdfOptions = $options;
+    }
 
-    public function setUp(): void
-    {
-        $this->knpSnappy = $this->getMockBuilder(Pdf::class)->getMock();
+    public function setDomPdf(Dompdf $dompdf): void {
+        $this->dompdf = $dompdf;
     }
+}
 
+class PdfEncoderTest extends TestCase
+{
     /**
      * @see PdfEncoder::support()
      */
     public function testSupport(): void
     {
         $encoder = $this->getMockBuilder(PdfEncoder::class)
-            ->setConstructorArgs([$this->knpSnappy])
+            ->disableOriginalConstructor()
             ->setMethodsExcept(['support'])
             ->getMock();
 
@@ -30,36 +36,31 @@ class PdfEncoderTest extends TestCase
         $this->assertFalse($encoder->support('txt'));
     }
 
-    /**
-     * @see PdfEncoder::getDefaultOptions()
-     */
-    public function testGetDefaultOptions(): void
-    {
-        $encoder = $this->getMockBuilder(PdfEncoder::class)
-            ->setConstructorArgs([$this->knpSnappy])
-            ->setMethodsExcept(['getDefaultOptions'])
-            ->getMock();
-
-        $this->assertIsArray($encoder->getDefaultOptions());
-    }
-
     /**
      * @see PdfEncoder::encode()
      */
     public function testEncode(): void
     {
-        $encoder = $this->getMockBuilder(PdfEncoder::class)
-            ->setConstructorArgs([$this->knpSnappy])
-            ->setMethodsExcept(['encode'])
+        $encoder = $this->getMockBuilder(TestablePdfEncoder::class)
+            ->disableOriginalConstructor()
+            ->setMethodsExcept(['encode', 'setDomPdfOptions', 'setDomPdf'])
             ->getMock();
 
-        $encoder->method('getDefaultOptions')->willReturn(['defaultOption' => 1]);
+        $domPdfOptions = $this->getMockBuilder(Options::class)->disableOriginalConstructor()->getMock();
+        $domPdf = $this->getMockBuilder(Dompdf::class)->disableOriginalConstructor()->getMock();
+        $encoder->setDomPdfOptions($domPdfOptions);
+        $encoder->setDomPdf($domPdf);
+
+        $domPdfOptions->expects(self::once())->method('setIsRemoteEnabled')->with(true);
+        $domPdfOptions->expects(self::once())->method('setChroot')->with(Path::getProjectDir() . '/public');
+        $domPdfOptions->expects(self::once())->method('setDefaultPaperOrientation')->with('portrait');
+        $domPdfOptions->expects(self::once())->method('setDefaultPaperSize')->with('A4');
+        $domPdfOptions->expects(self::once())->method('set')->with(['additionalOption' => 2]);
 
-        $this->knpSnappy
-            ->expects(self::once())
-            ->method('getOutputFromHtml')
-            ->with('<div>content</div>', ['defaultOption' => 1, 'additionalOption' => 2])
-            ->willReturn('%%encoded%%');
+        $domPdf->expects(self::once())->method('setOptions')->with($domPdfOptions);
+        $domPdf->expects(self::once())->method('loadHtml')->with('<div>content</div>');
+        $domPdf->expects(self::once())->method('render');
+        $domPdf->expects(self::once())->method('output')->willReturn('%%encoded%%');
 
         $this->assertEquals(
             '%%encoded%%',

+ 1 - 1
tests/Unit/Service/File/Storage/ApiLegacyStorageTest.php

@@ -42,7 +42,7 @@ class ApiLegacyStorageTest extends TestCase
 
         $apiLegacyStorage = $this
             ->getMockBuilder(ApiLegacyStorage::class)
-            ->setConstructorArgs([$apiLegacyRequestService, $dataManager, $urlBuilder, 'url'])
+            ->setConstructorArgs([$apiLegacyRequestService, $dataManager, $urlBuilder, 'url', 'publicUrl'])
             ->setMethodsExcept(['read'])
             ->getMock();