]> BookStack Code Mirror - bookstack/commitdiff
PDF: Added tests for pdf command, fixed old tests for changes 4969/head
authorDan Brown <redacted>
Fri, 26 Apr 2024 14:39:40 +0000 (15:39 +0100)
committerDan Brown <redacted>
Fri, 26 Apr 2024 14:39:40 +0000 (15:39 +0100)
app/Entities/Tools/PdfGenerator.php
tests/Entity/ExportTest.php
tests/Unit/ConfigTest.php

index 4f23ad334ec58513e4a1779d0fe45247403e08d5..7c6dfaa6e8b2e563ea18742b42924726127e7eff 100644 (file)
@@ -76,7 +76,7 @@ class PdfGenerator
 
         $replacementsByPlaceholder = [
             '{input_html_path}' => $inputHtml,
-            '{output_html_path}' => $outputPdf,
+            '{output_pdf_path}' => $outputPdf,
         ];
 
         foreach ($replacementsByPlaceholder as $placeholder => $replacement) {
index eedcb672c998da7b53a26f76e7e59ae7fe6885e0..040f69013a5f1bee44b48759f10a13f644410c36 100644 (file)
@@ -6,8 +6,8 @@ use BookStack\Entities\Models\Book;
 use BookStack\Entities\Models\Chapter;
 use BookStack\Entities\Models\Page;
 use BookStack\Entities\Tools\PdfGenerator;
+use BookStack\Exceptions\PdfExportException;
 use Illuminate\Support\Facades\Storage;
-use Illuminate\Support\Str;
 use Tests\TestCase;
 
 class ExportTest extends TestCase
@@ -483,7 +483,7 @@ class ExportTest extends TestCase
     {
         $page = $this->entities->page();
 
-        config()->set('snappy.pdf.binary', '/abc123');
+        config()->set('exports.snappy.pdf_binary', '/abc123');
         config()->set('app.allow_untrusted_server_fetching', false);
 
         $resp = $this->asEditor()->get($page->getUrl('/export/pdf'));
@@ -494,6 +494,41 @@ class ExportTest extends TestCase
         $resp->assertStatus(500); // Bad response indicates wkhtml usage
     }
 
+    public function test_pdf_command_option_used_if_set()
+    {
+        $page = $this->entities->page();
+        $command = 'cp {input_html_path} {output_pdf_path}';
+        config()->set('exports.pdf_command', $command);
+
+        $resp = $this->asEditor()->get($page->getUrl('/export/pdf'));
+        $download = $resp->getContent();
+
+        $this->assertStringContainsString(e($page->name), $download);
+        $this->assertStringContainsString('<html lang=', $download);
+    }
+
+    public function test_pdf_command_option_errors_if_output_path_not_written_to()
+    {
+        $page = $this->entities->page();
+        $command = 'echo "hi"';
+        config()->set('exports.pdf_command', $command);
+
+        $this->assertThrows(function () use ($page) {
+            $this->withoutExceptionHandling()->asEditor()->get($page->getUrl('/export/pdf'));
+        }, PdfExportException::class);
+    }
+
+    public function test_pdf_command_option_errors_if_command_returns_error_status()
+    {
+        $page = $this->entities->page();
+        $command = 'exit 1';
+        config()->set('exports.pdf_command', $command);
+
+        $this->assertThrows(function () use ($page) {
+            $this->withoutExceptionHandling()->asEditor()->get($page->getUrl('/export/pdf'));
+        }, PdfExportException::class);
+    }
+
     public function test_html_exports_contain_csp_meta_tag()
     {
         $entities = [
index aedcb75aa19488ad83a59c82b85420199c0460ae..d5c74392ffcdd42eae0b95520facf521590c61f3 100644 (file)
@@ -80,22 +80,22 @@ class ConfigTest extends TestCase
 
     public function test_dompdf_remote_fetching_controlled_by_allow_untrusted_server_fetching_false()
     {
-        $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'false', 'dompdf.options.enable_remote', false);
-        $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'true', 'dompdf.options.enable_remote', true);
+        $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'false', 'exports.dompdf.enable_remote', false);
+        $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'true', 'exports.dompdf.enable_remote', true);
     }
 
     public function test_dompdf_paper_size_options_are_limited()
     {
-        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'dompdf.options.default_paper_size', 'a4');
-        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'dompdf.options.default_paper_size', 'letter');
-        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'dompdf.options.default_paper_size', 'a4');
+        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'exports.dompdf.default_paper_size', 'a4');
+        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'exports.dompdf.default_paper_size', 'letter');
+        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'exports.dompdf.default_paper_size', 'a4');
     }
 
     public function test_snappy_paper_size_options_are_limited()
     {
-        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'snappy.pdf.options.page-size', 'A4');
-        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'snappy.pdf.options.page-size', 'Letter');
-        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'snappy.pdf.options.page-size', 'A4');
+        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'cat', 'exports.snappy.options.page-size', 'A4');
+        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'exports.snappy.options.page-size', 'Letter');
+        $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'exports.snappy.options.page-size', 'A4');
     }
 
     public function test_sendmail_command_is_configurable()