mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 08:43:43 +08:00
cbbaeb55b5
After this change, in order to join a chat channel, a user needs to be in a group with at least “Reply” permission for the category. If the user only has “See” permission, they are able to preview the channel, but not join it or send messages. The auto-join function also follows this new restriction. --------- Co-authored-by: Martin Brennan <martin@discourse.org>
124 lines
3.5 KiB
Ruby
124 lines
3.5 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
RSpec.describe "JIT messages", type: :system, js: true do
|
||
fab!(:channel_1) { Fabricate(:chat_channel) }
|
||
fab!(:current_user) { Fabricate(:user) }
|
||
fab!(:other_user) { Fabricate(:user) }
|
||
|
||
let(:chat) { PageObjects::Pages::Chat.new }
|
||
let(:channel) { PageObjects::Pages::ChatChannel.new }
|
||
|
||
before do
|
||
channel_1.add(current_user)
|
||
chat_system_bootstrap
|
||
sign_in(current_user)
|
||
end
|
||
|
||
context "when mentioning a user" do
|
||
context "when user is not on the channel" do
|
||
it "displays a mention warning" do
|
||
Jobs.run_immediately!
|
||
|
||
chat.visit_channel(channel_1)
|
||
channel.send_message("hi @#{other_user.username}")
|
||
|
||
expect(page).to have_content(
|
||
I18n.t("js.chat.mention_warning.without_membership", username: other_user.username),
|
||
wait: 5,
|
||
)
|
||
end
|
||
end
|
||
|
||
context "when user can’t access the channel" do
|
||
fab!(:group_1) { Fabricate(:group) }
|
||
fab!(:private_channel_1) { Fabricate(:private_category_channel, group: group_1) }
|
||
|
||
before do
|
||
group_1.add(current_user)
|
||
private_channel_1.add(current_user)
|
||
end
|
||
|
||
it "displays a mention warning" do
|
||
Jobs.run_immediately!
|
||
|
||
chat.visit_channel(private_channel_1)
|
||
channel.send_message("hi @#{other_user.username}")
|
||
|
||
expect(page).to have_content(
|
||
I18n.t("js.chat.mention_warning.cannot_see", username: other_user.username),
|
||
wait: 5,
|
||
)
|
||
end
|
||
end
|
||
|
||
context "when user can’t access a non read_restrictd channel" do
|
||
let!(:everyone) { Group.find(Group::AUTO_GROUPS[:everyone]) }
|
||
fab!(:category) { Fabricate(:category) }
|
||
fab!(:readonly_channel) { Fabricate(:category_channel, chatable: category) }
|
||
|
||
before do
|
||
Fabricate(
|
||
:category_group,
|
||
category: category,
|
||
group: everyone,
|
||
permission_type: CategoryGroup.permission_types[:readonly],
|
||
)
|
||
everyone.add(other_user)
|
||
readonly_channel.add(current_user)
|
||
end
|
||
|
||
it "displays a mention warning" do
|
||
Jobs.run_immediately!
|
||
|
||
chat.visit_channel(readonly_channel)
|
||
channel.send_message("hi @#{other_user.username}")
|
||
|
||
expect(page).to have_content(
|
||
I18n.t("js.chat.mention_warning.cannot_see", username: other_user.username),
|
||
wait: 5,
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
context "when category channel permission is readonly for everyone" do
|
||
fab!(:group_1) { Fabricate(:group) }
|
||
fab!(:private_channel_1) { Fabricate(:private_category_channel, group: group_1) }
|
||
|
||
before do
|
||
group_1.add(current_user)
|
||
private_channel_1.add(current_user)
|
||
end
|
||
|
||
it "displays a mention warning" do
|
||
Jobs.run_immediately!
|
||
|
||
chat.visit_channel(private_channel_1)
|
||
channel.send_message("hi @#{other_user.username}")
|
||
|
||
expect(page).to have_content(
|
||
I18n.t("js.chat.mention_warning.cannot_see", username: other_user.username),
|
||
wait: 5,
|
||
)
|
||
end
|
||
end
|
||
|
||
context "when mention a group" do
|
||
context "when group can't be mentioned" do
|
||
fab!(:group_1) { Fabricate(:group, mentionable_level: Group::ALIAS_LEVELS[:nobody]) }
|
||
|
||
it "displays a mention warning" do
|
||
Jobs.run_immediately!
|
||
|
||
chat.visit_channel(channel_1)
|
||
channel.send_message("hi @#{group_1.name}")
|
||
|
||
expect(page).to have_content(
|
||
I18n.t("js.chat.mention_warning.group_mentions_disabled", group_name: group_1.name),
|
||
wait: 5,
|
||
)
|
||
end
|
||
end
|
||
end
|
||
end
|