PERF: sends publish_new_channel only when not followed (#21755)

This commit is contained in:
Joffrey JAFFEUX 2023-05-26 17:13:05 +02:00 committed by GitHub
parent a6a5c1b69b
commit acb4c19eea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 5 deletions

View File

@ -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

View File

@ -514,6 +514,14 @@ RSpec.describe Chat::ChatController do
expect(Chat::UserChatChannelMembership.find_by(user_id: user2.id).following).to be true
end
it "doesnt 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)

View File

@ -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