# frozen_string_literal: true describe "Composer - discard draft modal", type: :system do fab!(:topic) fab!(:admin) let(:topic_page) { PageObjects::Pages::Topic.new } let(:composer) { PageObjects::Components::Composer.new } let(:discard_draft_modal) { PageObjects::Modals::DiscardDraft.new } before { sign_in(admin) } context "when editing different post" do fab!(:post_1) { Fabricate(:post, topic:, user: admin) } fab!(:post_2) { Fabricate(:post, topic:, user: admin) } it "shows the discard modal when there are changes in the composer" do topic_page.visit_topic(post_1.topic) topic_page.click_post_action_button(post_1, :edit) composer.fill_content("a b c d e f g") composer.minimize topic_page.click_post_action_button(post_2, :edit) expect(discard_draft_modal).to be_open end it "doesn't show the discard modal when there are no changes in the composer" do topic_page.visit_topic(post_1.topic) topic_page.click_post_action_button(post_1, :edit) composer.minimize topic_page.click_post_action_button(post_2, :edit) expect(discard_draft_modal).to be_closed expect(composer).to be_opened end end context "when editing the same post" do fab!(:post_1) { Fabricate(:post, topic:, user: admin) } it "doesn’t show the discard modal even if there are changes in the composer" do topic_page.visit_topic(post_1.topic) topic_page.click_post_action_button(post_1, :edit) composer.fill_content("a b c d e f g") composer.minimize topic_page.click_post_action_button(post_1, :edit) expect(discard_draft_modal).to be_closed expect(composer).to be_opened expect(composer).to have_content("a b c d e f g") composer.minimize expect(composer).to be_minimized topic_page.click_post_action_button(post_1, :edit) expect(discard_draft_modal).to be_closed expect(composer).to be_opened end it "doesn’t show the discard modal when there are no changes in the composer" do topic_page.visit_topic(post_1.topic) topic_page.click_post_action_button(post_1, :edit) composer.minimize topic_page.click_post_action_button(post_1, :edit) expect(discard_draft_modal).to be_closed 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 it "resumes draft when using /new-message" do visit "/new-message" composer.fill_content("a b c d e f g") composer.close expect(discard_draft_modal).to be_open discard_draft_modal.click_save visit "/new-message" expect(dialog).to be_open expect(page).to have_content(I18n.t("js.drafts.abandon.confirm")) dialog.click_button I18n.t("js.drafts.abandon.no_value") expect(composer).to be_opened expect(composer).to have_content("a b c d e f g") end end end