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
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class HiddenProfileSerializer < BasicUserSerializer
|
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?
|
def profile_hidden?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def can_send_private_message_to_user
|
||||||
|
scope.can_send_private_message?(object)
|
||||||
|
end
|
||||||
|
|
||||||
def primary_group_name
|
def primary_group_name
|
||||||
object.primary_group.try(:name)
|
object.primary_group.try(:name)
|
||||||
end
|
end
|
||||||
|
|
|
@ -149,6 +149,14 @@ after_initialize do
|
||||||
scope.can_direct_message? && Guardian.new(object).can_chat?
|
scope.can_direct_message? && Guardian.new(object).can_chat?
|
||||||
end
|
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(
|
add_to_serializer(
|
||||||
:current_user,
|
:current_user,
|
||||||
:can_chat,
|
:can_chat,
|
||||||
|
|
|
@ -53,4 +53,34 @@ describe UsersController do
|
||||||
expect(notifications.size).to eq(0)
|
expect(notifications.size).to eq(0)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
@ -4792,18 +4792,31 @@ RSpec.describe UsersController do
|
||||||
expect(response.parsed_body["user"]["inactive"]).to eq(true)
|
expect(response.parsed_body["user"]["inactive"]).to eq(true)
|
||||||
end
|
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
|
it "raises an error on invalid access" do
|
||||||
Guardian.any_instance.expects(:can_see?).with(user).returns(false)
|
Guardian.any_instance.expects(:can_see?).with(user).returns(false)
|
||||||
get "/u/#{user.username}/card.json"
|
get "/u/#{user.username}/card.json"
|
||||||
expect(response).to be_forbidden
|
expect(response).to be_forbidden
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue