mirror of
https://github.com/discourse/discourse.git
synced 2025-02-24 15:55:25 +08:00

This change includes the following updates: - Rename view all to view all drafts - Remove view all link from drop-down when all drafts are displayed in the menu - Different icon for draft topics and PMs (adds envelope for PMs) - Disable drop-down when New Topic button is disabled (private categories etc) - Improve drafts drop-down loading (no longer disables the trigger btn on click)
121 lines
3.2 KiB
Ruby
121 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe "Drafts dropdown", type: :system do
|
|
fab!(:user) { Fabricate(:user, refresh_auto_groups: true) }
|
|
let(:composer) { PageObjects::Components::Composer.new }
|
|
let(:drafts_dropdown) { PageObjects::Components::DraftsMenu.new }
|
|
let(:discard_draft_modal) { PageObjects::Modals::DiscardDraft.new }
|
|
|
|
before { sign_in(user) }
|
|
|
|
describe "with no drafts" do
|
|
it "does not display drafts dropdown" do
|
|
page.visit "/"
|
|
expect(drafts_dropdown).to be_hidden
|
|
end
|
|
|
|
it "adds a draft dropdown menu when a draft is available" do
|
|
page.visit "/new-topic"
|
|
composer.fill_content("This is a draft")
|
|
|
|
expect(drafts_dropdown).to be_visible
|
|
end
|
|
end
|
|
|
|
describe "with multiple drafts" do
|
|
before do
|
|
Draft.set(
|
|
user,
|
|
Draft::NEW_TOPIC,
|
|
0,
|
|
{
|
|
title: "This is a test topic",
|
|
reply: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
}.to_json,
|
|
)
|
|
|
|
5.times do |i|
|
|
topic = Fabricate(:topic, user: user)
|
|
Draft.set(user, topic.draft_key, 0, { reply: "test reply #{i}" }.to_json)
|
|
end
|
|
end
|
|
|
|
it "displays the correct draft count" do
|
|
page.visit "/"
|
|
drafts_dropdown.open
|
|
|
|
expect(drafts_dropdown).to be_open
|
|
|
|
expect(drafts_dropdown.draft_item_count).to eq(4)
|
|
expect(drafts_dropdown.other_drafts_count).to eq(2)
|
|
|
|
drafts_dropdown.find(".topic-drafts-item:first-child").click
|
|
|
|
expect(drafts_dropdown).to be_closed
|
|
|
|
expect(composer).to be_opened
|
|
composer.create
|
|
|
|
wait_for { Draft.count == 5 }
|
|
|
|
page.visit "/"
|
|
drafts_dropdown.open
|
|
|
|
expect(drafts_dropdown.draft_item_count).to eq(4)
|
|
expect(drafts_dropdown.other_drafts_count).to eq(1)
|
|
end
|
|
|
|
it "shows the view all drafts when there are other drafts to display" do
|
|
page.visit "/"
|
|
drafts_dropdown.open
|
|
|
|
expect(drafts_dropdown).to be_open
|
|
expect(drafts_dropdown).to have_view_all_link
|
|
end
|
|
|
|
it "does not show the view all drafts link when all drafts are displayed" do
|
|
Draft.where(user_id: user.id).order("created_at DESC").limit(2).destroy_all
|
|
|
|
page.visit "/"
|
|
drafts_dropdown.open
|
|
|
|
expect(drafts_dropdown).to be_open
|
|
expect(drafts_dropdown).to have_no_view_all_link
|
|
end
|
|
end
|
|
|
|
describe "with private category" do
|
|
fab!(:group)
|
|
fab!(:group_user) { Fabricate(:group_user, user: user, group: group) }
|
|
fab!(:category) { Fabricate(:private_category, group: group, permission_type: 3) }
|
|
fab!(:subcategory) do
|
|
Fabricate(
|
|
:private_category,
|
|
parent_category_id: category.id,
|
|
group: group,
|
|
permission_type: 1,
|
|
)
|
|
end
|
|
|
|
let(:category_page) { PageObjects::Pages::Category.new }
|
|
|
|
before do
|
|
SiteSetting.default_subcategory_on_read_only_category = false
|
|
|
|
Draft.set(
|
|
user,
|
|
Draft::NEW_TOPIC,
|
|
0,
|
|
{ title: "This is a test topic", reply: "Lorem ipsum dolor sit amet" }.to_json,
|
|
)
|
|
end
|
|
|
|
it "disables the drafts dropdown menu when new topic button is disabled" do
|
|
category_page.visit(category)
|
|
|
|
expect(category_page).to have_button("New Topic", disabled: true)
|
|
expect(drafts_dropdown).to be_disabled
|
|
end
|
|
end
|
|
end
|