mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 11:18:33 +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.
85 lines
2.4 KiB
Ruby
85 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe FoundUserSerializer do
|
|
fab!(:user)
|
|
let(:serializer) { described_class.new(user, root: false) }
|
|
|
|
describe "#id" do
|
|
it "returns user id" do
|
|
json = serializer.as_json
|
|
expect(json.keys).to include :id
|
|
expect(json[:id]).to eq(user.id)
|
|
end
|
|
end
|
|
|
|
describe "#name" do
|
|
it "returns name if enabled in site settings" do
|
|
SiteSetting.enable_names = true
|
|
json = serializer.as_json
|
|
expect(json.keys).to include :name
|
|
expect(json[:name]).to eq(user.name)
|
|
end
|
|
|
|
it "doesn't return name if disabled in site settings" do
|
|
SiteSetting.enable_names = false
|
|
json = serializer.as_json
|
|
expect(json.keys).not_to include :name
|
|
end
|
|
end
|
|
|
|
describe "#status" do
|
|
fab!(:user_status) { Fabricate(:user_status) }
|
|
|
|
before { user.user_status = user_status }
|
|
|
|
context "when status is enabled in site settings" do
|
|
before { SiteSetting.enable_user_status = true }
|
|
|
|
it "doesn't add user status by default" do
|
|
serializer = FoundUserSerializer.new(user, root: false)
|
|
json = serializer.as_json
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
|
|
context "when including user status" do
|
|
let(:serializer) { FoundUserSerializer.new(user, root: false, include_status: true) }
|
|
|
|
it "adds user status when enabled" 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
|
|
serializer = described_class.new(user, scope: Guardian.new(user), root: false)
|
|
json = serializer.as_json
|
|
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
|
|
it "doesn't return status if user doesn't have it" do
|
|
user.clear_status!
|
|
user.reload
|
|
json = serializer.as_json
|
|
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when status is disabled in site settings" do
|
|
before { SiteSetting.enable_user_status = false }
|
|
let(:serializer) { FoundUserSerializer.new(user, root: false, include_status: true) }
|
|
|
|
it "doesn't add user status" do
|
|
json = serializer.as_json
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
end
|
|
end
|
|
end
|