From 8e71cd9bacfc12c50d1f9ed9ca379b85beece940 Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Sun, 14 Nov 2021 12:17:22 +0000 Subject: [PATCH] Fixed issue where markdown drafts showed as HTML Markdown content was not being stored, only the sent HTML representation, causing the draft to show as HTML upon next edit. Added test to cover. Fixes #3054 --- app/Entities/Repos/PageRepo.php | 4 +--- tests/Entity/PageDraftTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/Entities/Repos/PageRepo.php b/app/Entities/Repos/PageRepo.php index 98fe4ef55..f66f2beb8 100644 --- a/app/Entities/Repos/PageRepo.php +++ b/app/Entities/Repos/PageRepo.php @@ -252,9 +252,7 @@ class PageRepo { // If the page itself is a draft simply update that if ($page->draft) { - if (isset($input['html'])) { - (new PageContent($page))->setNewHTML($input['html']); - } + $this->updateTemplateStatusAndContentFromInput($page, $input); $page->fill($input); $page->save(); diff --git a/tests/Entity/PageDraftTest.php b/tests/Entity/PageDraftTest.php index 9e2ceff51..ec6707bc5 100644 --- a/tests/Entity/PageDraftTest.php +++ b/tests/Entity/PageDraftTest.php @@ -178,4 +178,30 @@ class PageDraftTest extends TestCase 'html' => $page->html, ]); } + + public function test_updating_page_draft_with_markdown_retains_markdown_content() + { + /** @var Book $book */ + $book = Book::query()->first(); + $this->asEditor()->get($book->getUrl('/create-page')); + /** @var Page $draft */ + $draft = Page::query()->where('draft', '=', true)->where('book_id', '=', $book->id)->firstOrFail(); + + $resp = $this->put('/ajax/page/' . $draft->id . '/save-draft', [ + 'name' => 'My updated draft', + 'markdown' => "# My markdown page\n\n[A link](https://example.com)", + 'html' => '<p>checking markdown takes priority over this</p>' + ]); + $resp->assertOk(); + + $this->assertDatabaseHas('pages', [ + 'id' => $draft->id, + 'draft' => true, + 'name' => 'My updated draft', + 'markdown' => "# My markdown page\n\n[A link](https://example.com)", + ]); + + $draft->refresh(); + $this->assertStringContainsString('href="https://example.com"', $draft->html); + } }