cc275c0b53
Fixes #883 Also handling more scenarios.
185 lines
No EOL
6.8 KiB
PHP
185 lines
No EOL
6.8 KiB
PHP
<?php namespace Tests;
|
|
|
|
|
|
use BookStack\Entities\Chapter;
|
|
use BookStack\Entities\Page;
|
|
|
|
class ExportTest extends TestCase
|
|
{
|
|
|
|
public function test_page_text_export()
|
|
{
|
|
$page = Page::first();
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($page->getUrl('/export/plaintext'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertSee($page->name);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.txt"');
|
|
}
|
|
|
|
public function test_page_pdf_export()
|
|
{
|
|
$page = Page::first();
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($page->getUrl('/export/pdf'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.pdf"');
|
|
}
|
|
|
|
public function test_page_html_export()
|
|
{
|
|
$page = Page::first();
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($page->getUrl('/export/html'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertSee($page->name);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.html"');
|
|
}
|
|
|
|
public function test_book_text_export()
|
|
{
|
|
$page = Page::first();
|
|
$book = $page->book;
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($book->getUrl('/export/plaintext'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertSee($book->name);
|
|
$resp->assertSee($page->name);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.txt"');
|
|
}
|
|
|
|
public function test_book_pdf_export()
|
|
{
|
|
$page = Page::first();
|
|
$book = $page->book;
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($book->getUrl('/export/pdf'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.pdf"');
|
|
}
|
|
|
|
public function test_book_html_export()
|
|
{
|
|
$page = Page::first();
|
|
$book = $page->book;
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($book->getUrl('/export/html'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertSee($book->name);
|
|
$resp->assertSee($page->name);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.html"');
|
|
}
|
|
|
|
public function test_chapter_text_export()
|
|
{
|
|
$chapter = Chapter::first();
|
|
$page = $chapter->pages[0];
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($chapter->getUrl('/export/plaintext'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertSee($chapter->name);
|
|
$resp->assertSee($page->name);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.txt"');
|
|
}
|
|
|
|
public function test_chapter_pdf_export()
|
|
{
|
|
$chapter = Chapter::first();
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($chapter->getUrl('/export/pdf'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.pdf"');
|
|
}
|
|
|
|
public function test_chapter_html_export()
|
|
{
|
|
$chapter = Chapter::first();
|
|
$page = $chapter->pages[0];
|
|
$this->asEditor();
|
|
|
|
$resp = $this->get($chapter->getUrl('/export/html'));
|
|
$resp->assertStatus(200);
|
|
$resp->assertSee($chapter->name);
|
|
$resp->assertSee($page->name);
|
|
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.html"');
|
|
}
|
|
|
|
public function test_page_html_export_contains_custom_head_if_set()
|
|
{
|
|
$page = Page::first();
|
|
|
|
$customHeadContent = "<style>p{color: red;}</style>";
|
|
$this->setSettings(['app-custom-head' => $customHeadContent]);
|
|
|
|
$resp = $this->asEditor()->get($page->getUrl('/export/html'));
|
|
$resp->assertSee($customHeadContent);
|
|
}
|
|
|
|
public function test_page_html_export_use_absolute_dates()
|
|
{
|
|
$page = Page::first();
|
|
|
|
$resp = $this->asEditor()->get($page->getUrl('/export/html'));
|
|
$resp->assertSee($page->created_at->toDayDateTimeString());
|
|
$resp->assertDontSee($page->created_at->diffForHumans());
|
|
$resp->assertSee($page->updated_at->toDayDateTimeString());
|
|
$resp->assertDontSee($page->updated_at->diffForHumans());
|
|
}
|
|
|
|
public function test_html_export_media_protocol_updated()
|
|
{
|
|
$page = Page::first();
|
|
$page->html = '<p id="bkmrk-%C2%A0-0"> </p><p id="bkmrk-%C2%A0-1"><iframe src="//www.youtube.com/embed/LkFt_fp7FmE" width="560" height="314" allowfullscreen="allowfullscreen"></iframe></p><p id="bkmrk-"><iframe src="//player.vimeo.com/video/276396369?title=0&amp;byline=0" width="425" height="350" allowfullscreen="allowfullscreen"></iframe></p><p id="bkmrk--0"><iframe style="border: 0;" src="//maps.google.com/embed?testquery=true" width="600" height="450" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p><p id="bkmrk--1"><iframe src="//www.dailymotion.com/embed/video/x2rqgfm" width="480" height="432" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p><p id="bkmrk-%C2%A0-2"> </p>';
|
|
$page->save();
|
|
|
|
$this->asEditor();
|
|
$resp = $this->get($page->getUrl('/export/html'));
|
|
$resp->assertStatus(200);
|
|
|
|
$checks = [
|
|
'https://www.youtube.com/embed/LkFt_fp7FmE',
|
|
'https://player.vimeo.com/video/276396369?title=0&amp;byline=0',
|
|
'https://maps.google.com/embed?testquery=true',
|
|
'https://www.dailymotion.com/embed/video/x2rqgfm',
|
|
];
|
|
|
|
foreach ($checks as $check) {
|
|
$resp->assertSee($check);
|
|
}
|
|
|
|
}
|
|
|
|
public function test_pdf_export_no_video_iframe() {
|
|
$page = Page::first();
|
|
$page->html = '<p id="bkmrk-%C2%A0-0"> </p>' .
|
|
'<p id="bkmrk-%C2%A0-1"><iframe src="//www.youtube.com/embed/LkFt_fp7FmE" width="560" height="314" allowfullscreen="allowfullscreen"></iframe></p>' .
|
|
'<p id="bkmrk-"><video src="//player.vimeo.com/video/276396369?title=0&amp;byline=0" width="425" height="350" allowfullscreen="allowfullscreen"></video></p>' .
|
|
'<p id="bkmrk--0"><iframe style="border: 0;" src="//maps.google.com/embed?testquery=true" width="600" height="450" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>' .
|
|
'<p id="bkmrk--1"><iframe src="//www.dailymotion.com/embed/video/x2rqgfm" width="480" height="432" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>' .
|
|
'<p id="bkmrk-%C2%A0-2"> </p>';
|
|
|
|
$page->save();
|
|
|
|
$this->asEditor();
|
|
$resp = $this->get($page->getUrl('/export/pdf?isTesting=true'));
|
|
$resp->assertStatus(200);
|
|
|
|
$checks = [
|
|
'</video>',
|
|
'</iframe>'
|
|
];
|
|
|
|
foreach ($checks as $check) {
|
|
$resp->assertDontSee($check);
|
|
}
|
|
}
|
|
|
|
} |