mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 15:06:26 +08:00
b3a1199493
Users can hide their public profile and presence information by checking
“Hide my public profile and presence features” on the
`u/{username}/preferences/interface` page. In that case, we also don't
want to return user status from the server.
This work has been started in https://github.com/discourse/discourse/pull/23946.
The current PR fixes all the remaining places in Core.
Note that the actual fix is quite simple – a5802f484d
.
But we had a fair amount of duplication in the code responsible for
the user status serialization, so I had to dry that up first. The refactoring
as well as adding some additional tests is the main part of this PR.
87 lines
2.6 KiB
Ruby
87 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe BasicUserSerializer do
|
|
fab!(:user) { Fabricate(:user) }
|
|
let(:serializer) { BasicUserSerializer.new(user, scope: Guardian.new(user), root: false) }
|
|
|
|
describe "#as_json" do
|
|
let(:json) { serializer.as_json }
|
|
|
|
it "returns the username" do
|
|
expect(json[:username]).to eq(user.username)
|
|
expect(json[:name]).to eq(user.name)
|
|
expect(json[:avatar_template]).to eq(user.avatar_template)
|
|
end
|
|
|
|
describe "extended serializers" do
|
|
let(:post_action) { Fabricate(:post_action, user: user) }
|
|
let(:serializer) do
|
|
PostActionUserSerializer.new(post_action, scope: Guardian.new(user), root: false)
|
|
end
|
|
it "returns the user correctly" do
|
|
expect(serializer.user.username).to eq(user.username)
|
|
end
|
|
end
|
|
|
|
it "doesn't return the name it when `enable_names` is false" do
|
|
SiteSetting.enable_names = false
|
|
expect(json[:name]).to eq(nil)
|
|
end
|
|
end
|
|
|
|
describe "#status" do
|
|
fab!(:user_status) { Fabricate(:user_status) }
|
|
|
|
before { user.user_status = user_status }
|
|
|
|
describe "when status is enabled in settings" do
|
|
before { SiteSetting.enable_user_status = true }
|
|
|
|
it "doesn't add status by default" do
|
|
serializer = BasicUserSerializer.new(user, root: false)
|
|
json = serializer.as_json
|
|
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
|
|
context "when including user status" do
|
|
let(:serializer) { BasicUserSerializer.new(user, root: false, include_status: true) }
|
|
|
|
it "adds status if `include_status: true` has been passed" do
|
|
json = serializer.as_json
|
|
expect(json[:status]).to_not be_nil do |status|
|
|
expect(status.description).to eq(user_status.description)
|
|
expect(status.emoji).to eq(user_status.emoji)
|
|
end
|
|
end
|
|
|
|
it "doesn't add expired user status" do
|
|
user.user_status.ends_at = 1.minutes.ago
|
|
json = serializer.as_json
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
|
|
it "doesn't return status if user doesn't have it set" do
|
|
user.clear_status!
|
|
user.reload
|
|
|
|
json = serializer.as_json
|
|
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "when status is disabled in settings" do
|
|
before { SiteSetting.enable_user_status = false }
|
|
|
|
it "doesn't add user status" do
|
|
serializer = BasicUserSerializer.new(user, root: false, include_status: true)
|
|
json = serializer.as_json
|
|
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
end
|
|
end
|
|
end
|