PDF: Added tests for pdf command, fixed old tests for changes

This commit is contained in:
Dan Brown 2024-04-26 15:39:40 +01:00
parent 1c7128c2cb
commit f0dd33c1b4
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 46 additions and 11 deletions

View File

@ -76,7 +76,7 @@ class PdfGenerator
$replacementsByPlaceholder = [ $replacementsByPlaceholder = [
'{input_html_path}' => $inputHtml, '{input_html_path}' => $inputHtml,
'{output_html_path}' => $outputPdf, '{output_pdf_path}' => $outputPdf,
]; ];
foreach ($replacementsByPlaceholder as $placeholder => $replacement) { foreach ($replacementsByPlaceholder as $placeholder => $replacement) {

View File

@ -6,8 +6,8 @@ use BookStack\Entities\Models\Book;
use BookStack\Entities\Models\Chapter; use BookStack\Entities\Models\Chapter;
use BookStack\Entities\Models\Page; use BookStack\Entities\Models\Page;
use BookStack\Entities\Tools\PdfGenerator; use BookStack\Entities\Tools\PdfGenerator;
use BookStack\Exceptions\PdfExportException;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Tests\TestCase; use Tests\TestCase;
class ExportTest extends TestCase class ExportTest extends TestCase
@ -483,7 +483,7 @@ class ExportTest extends TestCase
{ {
$page = $this->entities->page(); $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); config()->set('app.allow_untrusted_server_fetching', false);
$resp = $this->asEditor()->get($page->getUrl('/export/pdf')); $resp = $this->asEditor()->get($page->getUrl('/export/pdf'));
@ -494,6 +494,41 @@ class ExportTest extends TestCase
$resp->assertStatus(500); // Bad response indicates wkhtml usage $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() public function test_html_exports_contain_csp_meta_tag()
{ {
$entities = [ $entities = [

View File

@ -80,22 +80,22 @@ class ConfigTest extends TestCase
public function test_dompdf_remote_fetching_controlled_by_allow_untrusted_server_fetching_false() 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', 'false', 'exports.dompdf.enable_remote', false);
$this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'true', 'dompdf.options.enable_remote', true); $this->checkEnvConfigResult('ALLOW_UNTRUSTED_SERVER_FETCHING', 'true', 'exports.dompdf.enable_remote', true);
} }
public function test_dompdf_paper_size_options_are_limited() 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', 'cat', 'exports.dompdf.default_paper_size', 'a4');
$this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'dompdf.options.default_paper_size', 'letter'); $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'exports.dompdf.default_paper_size', 'letter');
$this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'dompdf.options.default_paper_size', 'a4'); $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'exports.dompdf.default_paper_size', 'a4');
} }
public function test_snappy_paper_size_options_are_limited() 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', 'cat', 'exports.snappy.options.page-size', 'A4');
$this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'snappy.pdf.options.page-size', 'Letter'); $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'letter', 'exports.snappy.options.page-size', 'Letter');
$this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'snappy.pdf.options.page-size', 'A4'); $this->checkEnvConfigResult('EXPORT_PAGE_SIZE', 'a4', 'exports.snappy.options.page-size', 'A4');
} }
public function test_sendmail_command_is_configurable() public function test_sendmail_command_is_configurable()