From b0f6d074be2be452092c3062dde703d969c97110 Mon Sep 17 00:00:00 2001 From: Jan Cernik <66427541+jancernik@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:49:26 -0500 Subject: [PATCH] FIX: Destroy draft when clicking the Discard button (#28552) --- .../discourse/app/services/composer.js | 6 ++--- spec/system/composer/discard_draft_spec.rb | 27 +++++++++++++++++++ .../page_objects/modals/discard_draft.rb | 4 +++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/app/services/composer.js b/app/assets/javascripts/discourse/app/services/composer.js index d602cfb8855..e1164d68aa2 100644 --- a/app/assets/javascripts/discourse/app/services/composer.js +++ b/app/assets/javascripts/discourse/app/services/composer.js @@ -1405,6 +1405,8 @@ export default class ComposerService extends Service { composerModel.setProperties({ unlistTopic: false, whisper: false }); } + await this._setModel(composerModel, opts); + // we need a draft sequence for the composer to work if (opts.draftSequence === undefined) { let data = await Draft.get(opts.draftKey); @@ -1417,8 +1419,6 @@ export default class ComposerService extends Service { opts.draft ||= data.draft; opts.draftSequence = data.draft_sequence; - - await this._setModel(composerModel, opts); return; } @@ -1433,8 +1433,6 @@ export default class ComposerService extends Service { await this.open(opts); } } - - await this._setModel(composerModel, opts); } finally { this.skipAutoSave = false; this.appEvents.trigger("composer:open", { model: this.model }); diff --git a/spec/system/composer/discard_draft_spec.rb b/spec/system/composer/discard_draft_spec.rb index b9a2915420a..ee70bce0971 100644 --- a/spec/system/composer/discard_draft_spec.rb +++ b/spec/system/composer/discard_draft_spec.rb @@ -68,4 +68,31 @@ describe "Composer - discard draft modal", type: :system do expect(composer).to be_opened end end + + context "when clicking abandon draft" do + let(:dialog) { PageObjects::Components::Dialog.new } + + before { Jobs.run_immediately! } + + it "destroys draft" do + visit "/new-topic" + + composer.fill_content("a b c d e f g") + composer.close + + expect(discard_draft_modal).to be_open + discard_draft_modal.click_save + + wait_for(timeout: 5) { Draft.last != nil } + draft_key = Draft.last.draft_key + + visit "/new-topic" + + expect(dialog).to be_open + expect(page).to have_content(I18n.t("js.drafts.abandon.confirm")) + dialog.click_danger + + wait_for(timeout: 5) { Draft.find_by(draft_key: draft_key) == nil } + end + end end diff --git a/spec/system/page_objects/modals/discard_draft.rb b/spec/system/page_objects/modals/discard_draft.rb index b147e3a87ba..abdcf88bfa9 100644 --- a/spec/system/page_objects/modals/discard_draft.rb +++ b/spec/system/page_objects/modals/discard_draft.rb @@ -11,6 +11,10 @@ module PageObjects def closed? has_no_css?(".modal.d-modal#{MODAL_SELECTOR}") end + + def click_save + footer.find("button.save-draft").click + end end end end