discourse/plugins/chat/spec/system/chat_message_creator_spec.rb
Jan Cernik f4e51e0789
FEATURE: Allow users to DM groups in chat (#25189)
Allows users to create DMs by selecting groups as a target. It also allows adding user groups to an existing chat

- When creating the channel, it expands the user group and adds all its members with chat enabled to the channel.
- After creation, there's no difference between adding a group or adding its members individually.
- Users can add multiple groups and users simultaneously.
- There are UI validations; the member count preview updates according to the member count of added groups, and it does not allow users to add more members than SiteSetting.chat_max_direct_message_users."
2024-01-19 11:09:47 -03:00

130 lines
4.2 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
RSpec.describe "Flag message", type: :system do
let(:chat_page) { PageObjects::Pages::Chat.new }
fab!(:current_user) { Fabricate(:user) }
before do
SiteSetting.chat_max_direct_message_users = 3
chat_system_bootstrap
sign_in(current_user)
end
it "lists preloaded channels by default" do
channel_1 = Fabricate(:chat_channel)
channel_1.add(current_user)
visit("/")
chat_page.open_new_message
expect(chat_page.message_creator).to be_listing(channel_1)
end
it "doesnt show create group option when filtered" do
visit("/")
chat_page.open_new_message
chat_page.message_creator.filter("x")
expect(chat_page).to have_no_css("#new-group-chat")
end
it "can filter channels" do
channel_1 = Fabricate(:chat_channel)
channel_2 = Fabricate(:chat_channel)
channel_1.add(current_user)
channel_2.add(current_user)
visit("/")
chat_page.open_new_message
chat_page.message_creator.filter(channel_2.title)
expect(chat_page.message_creator).to be_listing(channel_2)
expect(chat_page.message_creator).to be_not_listing(channel_1)
end
it "can filter users" do
user_1 = Fabricate(:user)
user_2 = Fabricate(:user)
visit("/")
chat_page.open_new_message
chat_page.message_creator.filter(user_2.username)
expect(chat_page.message_creator).to be_listing(user_2)
expect(chat_page.message_creator).to be_not_listing(user_1)
end
it "can filter direct message channels" do
channel_1 = Fabricate(:direct_message_channel, users: [current_user])
channel_2 =
Fabricate(
:direct_message_channel,
users: [current_user, Fabricate(:user), Fabricate(:user, username: "user_1")],
)
visit("/")
chat_page.open_new_message
chat_page.message_creator.filter("user_1")
expect(chat_page.message_creator).to be_listing(channel_2)
expect(chat_page.message_creator).to be_not_listing(channel_1)
end
it "can create a new group message" do
user_1 = Fabricate(:user)
user_2 = Fabricate(:user)
visit("/")
chat_page.prefers_full_page
chat_page.open_new_message
chat_page.find("#new-group-chat").click
chat_page.find(".chat-message-creator__new-group-header__input").fill_in(with: "cats")
chat_page.find(".chat-message-creator__members-input").fill_in(with: user_1.username)
chat_page.message_creator.click_row(user_1)
chat_page.find(".chat-message-creator__members-input").fill_in(with: user_2.username)
chat_page.message_creator.click_row(user_2)
page.find(".create-chat-group").click
expect(page).to have_current_path(%r{/chat/c/cats/\d+})
end
it "can create a new group by clicking on an user group" do
user_1 = Fabricate(:user)
user_2 = Fabricate(:user)
group = Fabricate(:public_group, users: [user_1, user_2])
visit("/")
chat_page.prefers_full_page
chat_page.open_new_message
chat_page.find(".chat-message-creator__search-input__input").fill_in(with: group.name)
chat_page.message_creator.click_row(group)
chat_page.find(".chat-message-creator__new-group-header__input").fill_in(with: "dogs")
chat_page.find(".create-chat-group").click
expect(page).to have_current_path(%r{/chat/c/dogs/\d+})
end
it "doesnt allow adding a user group if it will exceed the member limit" do
user_1 = Fabricate(:user)
user_2 = Fabricate(:user)
user_3 = Fabricate(:user)
group = Fabricate(:public_group, users: [user_1, user_2])
visit("/")
chat_page.prefers_full_page
chat_page.open_new_message
chat_page.find("#new-group-chat").click
chat_page.find(".chat-message-creator__new-group-header__input").fill_in(with: "hamsters")
chat_page.find(".chat-message-creator__members-input").fill_in(with: user_3.username)
chat_page.message_creator.click_row(user_3)
chat_page.find(".chat-message-creator__members-input").fill_in(with: group.name)
chat_page.message_creator.click_row(group)
expect(chat_page.message_creator).to have_css("div[data-disabled]")
expect(chat_page.message_creator).to be_listing(group)
chat_page.message_creator.click_row(group)
expect(chat_page.message_creator).to be_listing(group)
end
end