FIX: allow direct message when max dm users set to 1 (#26392)

Why this change?
When the site setting for chat_max_direct_message_users is set to 1, it is expected that users can have a 1:1 chat with other users. However, since the current user is counting as 1 user it makes starting a new chat impossible.

This change hands this validation off to DirectMessageChannel::MaxUsersExcessPolicy which handles the count correctly by filtering out the current user.
This commit is contained in:
David Battersby 2024-03-27 15:59:12 +08:00 committed by GitHub
parent f9eae75972
commit 23fc0fb078
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 9 deletions

View File

@ -33,7 +33,6 @@ module Chat
class_name: Chat::DirectMessageChannel::CanCommunicateAllPartiesPolicy class_name: Chat::DirectMessageChannel::CanCommunicateAllPartiesPolicy
model :direct_message, :fetch_or_create_direct_message model :direct_message, :fetch_or_create_direct_message
model :channel, :fetch_or_create_channel model :channel, :fetch_or_create_channel
step :validate_user_count
step :set_optional_name step :set_optional_name
step :update_memberships step :update_memberships
step :recompute_users_count step :recompute_users_count
@ -73,12 +72,6 @@ module Chat
UserCommScreener.new(acting_user: guardian.user, target_user_ids: target_users.map(&:id)) UserCommScreener.new(acting_user: guardian.user, target_user_ids: target_users.map(&:id))
end end
def validate_user_count(target_users:)
if target_users.length > SiteSetting.chat_max_direct_message_users
fail!("should have less than #{SiteSetting.chat_max_direct_message_users} elements")
end
end
def actor_allows_dms(user_comm_screener:) def actor_allows_dms(user_comm_screener:)
!user_comm_screener.actor_disallowing_all_pms? !user_comm_screener.actor_disallowing_all_pms?
end end

View File

@ -104,6 +104,13 @@ RSpec.describe Chat::CreateDirectMessageChannel do
expect { result }.to change { Chat::UserChatChannelMembership.count }.by(4) expect { result }.to change { Chat::UserChatChannelMembership.count }.by(4)
expect(result).to be_a_success expect(result).to be_a_success
end end
it "succeeds when target_usernames is equal to max direct users" do
SiteSetting.chat_max_direct_message_users = 2
expect { result }.to change { Chat::UserChatChannelMembership.count }.by(3) # current user + user_1 + user_2
expect(result).to be_a_success
end
end end
context "when there is an existing direct message channel for the target users" do context "when there is an existing direct message channel for the target users" do
@ -165,9 +172,9 @@ RSpec.describe Chat::CreateDirectMessageChannel do
end end
context "when target_usernames exceeds chat_max_direct_message_users" do context "when target_usernames exceeds chat_max_direct_message_users" do
before { SiteSetting.chat_max_direct_message_users = 2 } before { SiteSetting.chat_max_direct_message_users = 1 }
it { is_expected.to fail_a_step(:validate_user_count) } it { is_expected.to fail_a_policy(:satisfies_dms_max_users_limit) }
end end
context "when the current user cannot make direct messages" do context "when the current user cannot make direct messages" do