UX: Show message and chat buttons on hidden profiles (#27326)

This commit is contained in:
Jan Cernik 2024-06-10 10:38:22 -03:00 committed by GitHub
parent b6c2430bf6
commit 1a42249bd8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 63 additions and 8 deletions

View File

@ -1,12 +1,16 @@
# frozen_string_literal: true
class HiddenProfileSerializer < BasicUserSerializer
attributes(:profile_hidden?, :title, :primary_group_name)
attributes(:profile_hidden?, :title, :primary_group_name, :can_send_private_message_to_user)
def profile_hidden?
true
end
def can_send_private_message_to_user
scope.can_send_private_message?(object)
end
def primary_group_name
object.primary_group.try(:name)
end

View File

@ -149,6 +149,14 @@ after_initialize do
scope.can_direct_message? && Guardian.new(object).can_chat?
end
add_to_serializer(:hidden_profile, :can_chat_user) do
return false if !SiteSetting.chat_enabled
return false if scope.user.blank? || scope.user.id == object.id
return false if !scope.user.user_option.chat_enabled || !object.user_option.chat_enabled
scope.can_direct_message? && Guardian.new(object).can_chat?
end
add_to_serializer(
:current_user,
:can_chat,

View File

@ -53,4 +53,34 @@ describe UsersController do
expect(notifications.size).to eq(0)
end
end
describe "#show_card" do
fab!(:user) { Fabricate(:user) }
fab!(:another_user) { Fabricate(:user) }
context "when hidden users" do
before do
sign_in(another_user)
SiteSetting.chat_enabled = true
SiteSetting.chat_allowed_groups = Group::AUTO_GROUPS[:everyone]
SiteSetting.direct_message_enabled_groups = Group::AUTO_GROUPS[:everyone]
user.user_option.update!(hide_profile_and_presence: true)
end
it "returns the correct partial response when the user has chat enabled" do
user.user_option.update!(chat_enabled: true)
get "/u/#{user.username}/card.json"
expect(response).to be_successful
expect(response.parsed_body["user"]["profile_hidden"]).to eq(true)
expect(response.parsed_body["user"]["can_chat_user"]).to eq(true)
end
it "returns the correct partial response when the user has chat disabled" do
user.user_option.update!(chat_enabled: false)
get "/u/#{user.username}/card.json"
expect(response).to be_successful
expect(response.parsed_body["user"]["profile_hidden"]).to eq(true)
expect(response.parsed_body["user"]["can_chat_user"]).to eq(false)
end
end
end
end

View File

@ -4792,18 +4792,31 @@ RSpec.describe UsersController do
expect(response.parsed_body["user"]["inactive"]).to eq(true)
end
it "returns partial response when hidden users" do
user.user_option.update!(hide_profile_and_presence: true)
get "/u/#{user.username}/card.json"
expect(response).to be_successful
expect(response.parsed_body["user"]["profile_hidden"]).to eq(true)
end
it "raises an error on invalid access" do
Guardian.any_instance.expects(:can_see?).with(user).returns(false)
get "/u/#{user.username}/card.json"
expect(response).to be_forbidden
end
context "when hidden users" do
before { user.user_option.update!(hide_profile_and_presence: true) }
it "returns the correct partial response when the user has messages enabled" do
user.user_option.update!(allow_private_messages: true)
get "/u/#{user.username}/card.json"
expect(response).to be_successful
expect(response.parsed_body["user"]["profile_hidden"]).to eq(true)
expect(response.parsed_body["user"]["can_send_private_message_to_user"]).to eq(true)
end
it "returns the correct partial response when the user has messages disabled" do
user.user_option.update!(allow_private_messages: false)
get "/u/#{user.username}/card.json"
expect(response).to be_successful
expect(response.parsed_body["user"]["profile_hidden"]).to eq(true)
expect(response.parsed_body["user"]["can_send_private_message_to_user"]).to eq(false)
end
end
end
end