UX: Show message and chat buttons on hidden profiles (#27326)
This commit is contained in:
parent
b6c2430bf6
commit
1a42249bd8
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue