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);
+        }
+    }
+
+}