discourse/plugins/chat/spec/system/move_message_to_channel_spec.rb
Joffrey JAFFEUX 8d2ae1e4a6
DEV: waits for transition in move message spec (#21763)
This flakey has been very visible by the new headless chrome. The problem was that after moving a message we automatically redirect to the channel where the message has been moved to. However, we were not explicitly waiting for this transition and a result it could happen that we attempt to check the presence of the message on the channel page before the redirect actually happened.

The various naming changes are due to an early mistake we made in chat specs to use `chat` as the variable name for the page object which prevents to use the automatic path `chat.channel_path(...)`.

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
2023-05-26 10:04:37 +02:00

96 lines
3.1 KiB
Ruby

# frozen_string_literal: true
RSpec.describe "Move message to channel", type: :system, js: true do
let(:chat_page) { PageObjects::Pages::Chat.new }
let(:channel_page) { PageObjects::Pages::ChatChannel.new }
before { chat_system_bootstrap }
context "when user" do
fab!(:current_user) { Fabricate(:user) }
fab!(:channel_1) { Fabricate(:chat_channel) }
fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel_1, user: current_user) }
before do
sign_in(current_user)
channel_1.add(current_user)
end
it "is not available" do
chat_page.visit_channel(channel_1)
channel_page.select_message(message_1)
expect(page).to have_no_content(I18n.t("js.chat.selection.move_selection_to_channel"))
end
context "when can moderate channel" do
fab!(:group_1) { Fabricate(:group) }
fab!(:channel_1) { Fabricate(:private_category_channel, group: group_1) }
fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel_1, user: current_user) }
before do
SiteSetting.enable_category_group_moderation = true
group_1.add(current_user)
channel_1.add(current_user)
channel_1.chatable.update!(reviewable_by_group_id: group_1.id)
end
it "is available" do
chat_page.visit_channel(channel_1)
channel_page.select_message(message_1)
expect(page).to have_content(I18n.t("js.chat.selection.move_selection_to_channel"))
end
end
end
context "when admin" do
fab!(:current_admin_user) { Fabricate(:admin) }
before { sign_in(current_admin_user) }
context "when dm channel" do
fab!(:dm_channel_1) { Fabricate(:direct_message_channel, users: [current_admin_user]) }
fab!(:message_1) do
Fabricate(:chat_message, chat_channel: dm_channel_1, user: current_admin_user)
end
it "is not available" do
chat_page.visit_channel(dm_channel_1)
channel_page.select_message(message_1)
expect(page).to have_no_content(I18n.t("js.chat.selection.move_selection_to_channel"))
end
end
context "when category channel" do
fab!(:channel_1) { Fabricate(:chat_channel) }
fab!(:channel_2) { Fabricate(:chat_channel) }
fab!(:message_1) do
Fabricate(:chat_message, chat_channel: channel_1, user: current_admin_user)
end
before do
channel_1.add(current_admin_user)
channel_2.add(current_admin_user)
end
it "moves the message" do
chat_page.visit_channel(channel_1)
channel_page.select_message(message_1)
click_button(I18n.t("js.chat.selection.move_selection_to_channel"))
find(".chat-move-message-channel-chooser").click
find("[data-value='#{channel_2.id}']").click
click_button(I18n.t("js.chat.move_to_channel.confirm_move"))
expect(page).to have_current_path(chat.channel_path(channel_2.slug, channel_2.id))
expect(channel_page).to have_message(text: message_1.message)
chat_page.visit_channel(channel_1)
expect(channel_page).to have_deleted_message(message_1)
end
end
end
end