145 lines
4.4 KiB
Ruby
145 lines
4.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
RSpec.describe "React to message", type: :system, js: true do
|
||
|
fab!(:current_user) { Fabricate(:user) }
|
||
|
fab!(:category_channel_1) { Fabricate(:category_channel) }
|
||
|
fab!(:message_1) { Fabricate(:chat_message, chat_channel: category_channel_1) }
|
||
|
|
||
|
let(:chat) { PageObjects::Pages::Chat.new }
|
||
|
let(:channel) { PageObjects::Pages::ChatChannel.new }
|
||
|
|
||
|
before do
|
||
|
chat_system_bootstrap
|
||
|
category_channel_1.add(current_user)
|
||
|
sign_in(current_user)
|
||
|
end
|
||
|
|
||
|
context "when other user has reacted" do
|
||
|
fab!(:reaction_1) do
|
||
|
Chat::ChatMessageReactor.new(Fabricate(:user), category_channel_1).react!(
|
||
|
message_id: message_1.id,
|
||
|
react_action: :add,
|
||
|
emoji: "female_detective",
|
||
|
)
|
||
|
end
|
||
|
|
||
|
shared_examples "inline reactions" do
|
||
|
it "shows existing reactions under the message" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
expect(channel).to have_reaction(message_1, reaction_1)
|
||
|
end
|
||
|
|
||
|
it "increments when clicking it" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.click_reaction(message_1, reaction_1)
|
||
|
expect(channel).to have_reaction(message_1, reaction_1, 2)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when desktop" do
|
||
|
include_examples "inline reactions"
|
||
|
end
|
||
|
|
||
|
context "when mobile", mobile: true do
|
||
|
include_examples "inline reactions"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when current user reacts" do
|
||
|
fab!(:reaction_1) do
|
||
|
Chat::ChatMessageReactor.new(Fabricate(:user), category_channel_1).react!(
|
||
|
message_id: message_1.id,
|
||
|
react_action: :add,
|
||
|
emoji: "female_detective",
|
||
|
)
|
||
|
end
|
||
|
|
||
|
context "when desktop" do
|
||
|
context "when using inline reaction button" do
|
||
|
it "adds a reaction" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.hover_message(message_1)
|
||
|
find(".chat-message-react-btn").click
|
||
|
find(".chat-emoji-picker [data-emoji=\"nerd_face\"]").click
|
||
|
|
||
|
expect(channel).to have_reaction(message_1, reaction_1)
|
||
|
end
|
||
|
|
||
|
xit "adds the reaction to the frequently used list" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.hover_message(message_1)
|
||
|
find(".chat-message-react-btn").click
|
||
|
find(".chat-emoji-picker [data-emoji=\"nerd_face\"]").click
|
||
|
|
||
|
channel.hover_message(message_1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when using message actions menu" do
|
||
|
context "when using the emoji picker" do
|
||
|
it "adds a reaction" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.hover_message(message_1)
|
||
|
find(".chat-message-actions .react-btn").click
|
||
|
find(".chat-emoji-picker [data-emoji=\"nerd_face\"]").click
|
||
|
|
||
|
expect(channel).to have_reaction(message_1, reaction_1)
|
||
|
end
|
||
|
|
||
|
xit "adds the reaction to the frequently used list" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.hover_message(message_1)
|
||
|
find(".chat-message-actions .react-btn").click
|
||
|
find(".chat-emoji-picker [data-emoji=\"nerd_face\"]").click
|
||
|
|
||
|
channel.hover_message(message_1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when using frequent reactions" do
|
||
|
it "adds a reaction" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.hover_message(message_1)
|
||
|
find(".chat-message-actions [data-emoji-name=\"+1\"").click
|
||
|
|
||
|
expect(channel.message_reactions_list(message_1)).to have_css(
|
||
|
"[data-emoji-name=\"+1\"]",
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when current user has reacted" do
|
||
|
fab!(:reaction_1) do
|
||
|
Chat::ChatMessageReactor.new(current_user, category_channel_1).react!(
|
||
|
message_id: message_1.id,
|
||
|
react_action: :add,
|
||
|
emoji: "female_detective",
|
||
|
)
|
||
|
end
|
||
|
|
||
|
shared_examples "inline reactions" do
|
||
|
it "shows existing reactions under the message" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
expect(channel).to have_reaction(message_1, reaction_1)
|
||
|
end
|
||
|
|
||
|
it "removes it when clicking it" do
|
||
|
chat.visit_channel(category_channel_1)
|
||
|
channel.click_reaction(message_1, reaction_1)
|
||
|
expect(channel).to have_no_reactions(message_1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when desktop" do
|
||
|
include_examples "inline reactions"
|
||
|
end
|
||
|
|
||
|
context "when mobile", mobile: true do
|
||
|
include_examples "inline reactions"
|
||
|
end
|
||
|
end
|
||
|
end
|