diff --git a/tests/Entity/ExportTest.php b/tests/Entity/ExportTest.php index 141f072f8..08d092111 100644 --- a/tests/Entity/ExportTest.php +++ b/tests/Entity/ExportTest.php @@ -362,42 +362,6 @@ class ExportTest extends TestCase $resp->assertSee("# Dogcat\n\nSome **bold** text"); } - public function test_page_markdown_export_does_not_convert_callouts() - { - $page = Page::query()->first()->forceFill([ - 'markdown' => '', - 'html' => '<h1>Dogcat</h1><p class="callout info">Some callout text</p><p>Another line</p>', - ]); - $page->save(); - - $resp = $this->asEditor()->get($page->getUrl('/export/markdown')); - $resp->assertSee("# Dogcat\n\n<p class=\"callout info\">Some callout text</p>\n\nAnother line", false); - } - - public function test_page_markdown_export_handles_bookstacks_wysiwyg_codeblock_format() - { - $page = Page::query()->first()->forceFill([ - 'markdown' => '', - 'html' => '<h1>Dogcat</h1>' . "\r\n" . '<pre id="bkmrk-var-a-%3D-%27cat%27%3B"><code class="language-JavaScript">var a = \'cat\';</code></pre><p>Another line</p>', - ]); - $page->save(); - - $resp = $this->asEditor()->get($page->getUrl('/export/markdown')); - $resp->assertSee("# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line", false); - } - - public function test_page_markdown_export_handles_tasklist_checkboxes() - { - $page = Page::query()->first()->forceFill([ - 'markdown' => '', - 'html' => '<ul><li><input type="checkbox" checked="checked">Item A</li><li><input type="checkbox">Item B</li></ul>', - ]); - $page->save(); - - $resp = $this->asEditor()->get($page->getUrl('/export/markdown')); - $resp->assertSee("- [x] Item A\n- [ ] Item B", false); - } - public function test_chapter_markdown_export() { $chapter = Chapter::query()->first(); diff --git a/tests/Entity/MarkdownToHtmlTest.php b/tests/Entity/MarkdownToHtmlTest.php new file mode 100644 index 000000000..1a439636e --- /dev/null +++ b/tests/Entity/MarkdownToHtmlTest.php @@ -0,0 +1,53 @@ +<?php + +namespace Tests\Entity; + +use BookStack\Entities\Tools\Markdown\HtmlToMarkdown; +use Tests\TestCase; + +class MarkdownToHtmlTest extends TestCase +{ + public function test_basic_formatting_conversion() + { + $this->assertConversion( + '<h1>Dogcat</h1><p>Some <strong>bold</strong> text</p>', + "# Dogcat\n\nSome **bold** text" + ); + } + + public function test_callouts_remain_html() + { + $this->assertConversion( + '<h1>Dogcat</h1><p class="callout info">Some callout text</p><p>Another line</p>', + "# Dogcat\n\n<p class=\"callout info\">Some callout text</p>\n\nAnother line" + ); + } + + public function test_wysiwyg_code_format_handled_cleanly() + { + $this->assertConversion( + '<h1>Dogcat</h1>' . "\r\n" . '<pre id="bkmrk-var-a-%3D-%27cat%27%3B"><code class="language-JavaScript">var a = \'cat\';</code></pre><p>Another line</p>', + "# Dogcat\n\n```JavaScript\nvar a = 'cat';\n```\n\nAnother line" + ); + } + + public function test_tasklist_checkboxes_are_handled() + { + $this->assertConversion( + '<ul><li><input type="checkbox" checked="checked">Item A</li><li><input type="checkbox">Item B</li></ul>', + "- [x] Item A\n- [ ] Item B" + ); + } + + protected function assertConversion(string $html, string $expectedMarkdown, bool $partialMdMatch = false) + { + $markdown = (new HtmlToMarkdown($html))->convert(); + + if ($partialMdMatch) { + static::assertStringContainsString($expectedMarkdown, $markdown); + } else { + static::assertEquals($expectedMarkdown, $markdown); + } + } + +}