Skip to content

Commit

Permalink
PDF: Added tests for pdf command, fixed old tests for changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ssddanbrown committed Apr 26, 2024
1 parent 1c7128c commit f0dd33c
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 11 deletions.
2 changes: 1 addition & 1 deletion app/Entities/Tools/PdfGenerator.php
Expand Up @@ -76,7 +76,7 @@ protected function renderUsingCommand(string $html): string

$replacementsByPlaceholder = [
'{input_html_path}' => $inputHtml,
'{output_html_path}' => $outputPdf,
'{output_pdf_path}' => $outputPdf,
];

foreach ($replacementsByPlaceholder as $placeholder => $replacement) {
Expand Down
39 changes: 37 additions & 2 deletions tests/Entity/ExportTest.php
Expand Up @@ -6,8 +6,8 @@
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
Expand Down Expand Up @@ -483,7 +483,7 @@ public function test_wkhtmltopdf_only_used_when_allow_untrusted_is_true()
{
$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'));
Expand All @@ -494,6 +494,41 @@ public function test_wkhtmltopdf_only_used_when_allow_untrusted_is_true()
$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 = [
Expand Down
16 changes: 8 additions & 8 deletions tests/Unit/ConfigTest.php
Expand Up @@ -80,22 +80,22 @@ public function test_saml2_idp_authn_context_string_parsed_as_space_separated_ar

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()
Expand Down

0 comments on commit f0dd33c

Please sign in to comment.