diff --git a/plugins/chat/app/controllers/chat/chat_controller.rb b/plugins/chat/app/controllers/chat/chat_controller.rb index 4e1e82f081b..f49bbbe95e8 100644 --- a/plugins/chat/app/controllers/chat/chat_controller.rb +++ b/plugins/chat/app/controllers/chat/chat_controller.rb @@ -125,13 +125,14 @@ module Chat user_ids_allowing_communication = UserCommScreener.new( acting_user: current_user, - target_user_ids: @chat_channel.user_chat_channel_memberships.pluck(:user_id), + target_user_ids: + @chat_channel.user_chat_channel_memberships.where(following: false).pluck(:user_id), ).allowing_actor_communication if user_ids_allowing_communication.any? Chat::Publisher.publish_new_channel( @chat_channel, - @chat_channel.chatable.users.where(id: user_ids_allowing_communication), + User.where(id: user_ids_allowing_communication), ) @chat_channel diff --git a/plugins/chat/spec/requests/chat_controller_spec.rb b/plugins/chat/spec/requests/chat_controller_spec.rb index 5489b13d8f8..31c95de2c30 100644 --- a/plugins/chat/spec/requests/chat_controller_spec.rb +++ b/plugins/chat/spec/requests/chat_controller_spec.rb @@ -514,6 +514,14 @@ RSpec.describe Chat::ChatController do expect(Chat::UserChatChannelMembership.find_by(user_id: user2.id).following).to be true end + it "doesn’t call publish new channel when already following" do + Chat::Publisher.expects(:publish_new_channel).never + + sign_in(user1) + + post "/chat/#{direct_message_channel.id}.json", params: { message: message } + end + it "errors when the user is not part of the direct message channel" do Chat::DirectMessageUser.find_by(user: user1, direct_message: chatable).destroy! sign_in(user1) diff --git a/plugins/chat/spec/system/unfollow_dm_channel_spec.rb b/plugins/chat/spec/system/unfollow_dm_channel_spec.rb index f2227465382..0f73d7af52e 100644 --- a/plugins/chat/spec/system/unfollow_dm_channel_spec.rb +++ b/plugins/chat/spec/system/unfollow_dm_channel_spec.rb @@ -6,7 +6,7 @@ RSpec.describe "Unfollow dm channel", type: :system, js: true do fab!(:dm_channel_1) { Fabricate(:direct_message_channel, users: [current_user, other_user]) } let!(:chat_page) { PageObjects::Pages::Chat.new } - let!(:chat_channel_page) { PageObjects::Pages::ChatChannel.new } + let!(:channel_page) { PageObjects::Pages::ChatChannel.new } before do SiteSetting.navigation_menu = "sidebar" @@ -26,8 +26,8 @@ RSpec.describe "Unfollow dm channel", type: :system, js: true do text = "this is fine" sign_in(other_user) chat_page.visit_channel(dm_channel_1) - chat_channel_page.send_message(text) - expect(chat_channel_page).to have_message(text: text) + channel_page.send_message(text) + expect(channel_page).to have_message(text: text) session.quit end