BookStack/tests/Exports/MarkdownExportTest.php
Dan Brown 18ab38a87b
Some checks failed
analyse-php / build (push) Has been cancelled
lint-php / build (push) Has been cancelled
test-migrations / build (8.1) (push) Has been cancelled
test-migrations / build (8.2) (push) Has been cancelled
test-migrations / build (8.3) (push) Has been cancelled
test-php / build (8.1) (push) Has been cancelled
test-php / build (8.2) (push) Has been cancelled
test-php / build (8.3) (push) Has been cancelled
Merge branch 'fix/markdown-export' into development
2024-12-02 11:50:15 +00:00

98 lines
3.3 KiB
PHP

<?php
namespace Tests\Exports;
use BookStack\Entities\Models\Book;
use Tests\TestCase;
class MarkdownExportTest extends TestCase
{
public function test_page_markdown_export()
{
$page = $this->entities->page();
$resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
$resp->assertStatus(200);
$resp->assertSee($page->name);
$resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.md"');
}
public function test_page_markdown_export_uses_existing_markdown_if_apparent()
{
$page = $this->entities->page()->forceFill([
'markdown' => '# A header',
'html' => '<h1>Dogcat</h1>',
]);
$page->save();
$resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
$resp->assertSee('A header');
$resp->assertDontSee('Dogcat');
}
public function test_page_markdown_export_converts_html_where_no_markdown()
{
$page = $this->entities->page()->forceFill([
'markdown' => '',
'html' => '<h1>Dogcat</h1><p>Some <strong>bold</strong> text</p>',
]);
$page->save();
$resp = $this->asEditor()->get($page->getUrl('/export/markdown'));
$resp->assertSee("# Dogcat\n\nSome **bold** text");
}
public function test_chapter_markdown_export()
{
$chapter = $this->entities->chapter();
$chapter->description_html = '<p>My <strong>chapter</strong> description</p>';
$chapter->save();
$page = $chapter->pages()->first();
$resp = $this->asEditor()->get($chapter->getUrl('/export/markdown'));
$resp->assertSee('# ' . $chapter->name);
$resp->assertSee('# ' . $page->name);
$resp->assertSee('My **chapter** description');
}
public function test_book_markdown_export()
{
$book = Book::query()->whereHas('pages')->whereHas('chapters')->first();
$book->description_html = '<p>My <strong>book</strong> description</p>';
$book->save();
$chapter = $book->chapters()->first();
$chapter->description_html = '<p>My <strong>chapter</strong> description</p>';
$chapter->save();
$page = $chapter->pages()->first();
$resp = $this->asEditor()->get($book->getUrl('/export/markdown'));
$resp->assertSee('# ' . $book->name);
$resp->assertSee('# ' . $chapter->name);
$resp->assertSee('# ' . $page->name);
$resp->assertSee('My **book** description');
$resp->assertSee('My **chapter** description');
}
public function test_book_markdown_export_concats_immediate_pages_with_newlines()
{
/** @var Book $book */
$book = Book::query()->whereHas('pages')->first();
$this->asEditor()->get($book->getUrl('/create-page'));
$this->get($book->getUrl('/create-page'));
[$pageA, $pageB] = $book->pages()->where('chapter_id', '=', 0)->get();
$pageA->html = '<p>hello tester</p>';
$pageA->save();
$pageB->name = 'The second page in this test';
$pageB->save();
$resp = $this->get($book->getUrl('/export/markdown'));
$resp->assertDontSee('hello tester# The second page in this test');
$resp->assertSee("hello tester\n\n# The second page in this test");
}
}