mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 05:23:43 +08:00
493d437e79
* Remove outdated option
04078317ba
* Use the non-globally exposed RSpec syntax
https://github.com/rspec/rspec-core/pull/2803
* Use the non-globally exposed RSpec syntax, cont
https://github.com/rspec/rspec-core/pull/2803
* Comply to strict predicate matchers
See:
- https://github.com/rspec/rspec-expectations/pull/1195
- https://github.com/rspec/rspec-expectations/pull/1196
- https://github.com/rspec/rspec-expectations/pull/1277
117 lines
3.7 KiB
Ruby
117 lines
3.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe UserCardSerializer do
|
|
context "with a TL0 user seen as anonymous" do
|
|
let(:user) { Fabricate.build(:user, trust_level: 0, user_profile: Fabricate.build(:user_profile)) }
|
|
let(:serializer) { described_class.new(user, scope: Guardian.new, root: false) }
|
|
let(:json) { serializer.as_json }
|
|
|
|
it "does not serialize emails" do
|
|
expect(json[:secondary_emails]).to be_nil
|
|
expect(json[:unconfirmed_emails]).to be_nil
|
|
end
|
|
end
|
|
|
|
context "as current user" do
|
|
it "serializes emails correctly" do
|
|
user = Fabricate.build(:user,
|
|
id: 1,
|
|
user_profile: Fabricate.build(:user_profile),
|
|
user_option: UserOption.new(dynamic_favicon: true),
|
|
user_stat: UserStat.new
|
|
)
|
|
json = described_class.new(user, scope: Guardian.new(user), root: false).as_json
|
|
expect(json[:secondary_emails]).to eq([])
|
|
expect(json[:unconfirmed_emails]).to eq([])
|
|
end
|
|
end
|
|
|
|
context "as different user" do
|
|
let(:user) { Fabricate(:user, trust_level: 0) }
|
|
let(:user2) { Fabricate(:user, trust_level: 1) }
|
|
it "does not serialize emails" do
|
|
json = described_class.new(user, scope: Guardian.new(user2), root: false).as_json
|
|
expect(json[:secondary_emails]).to be_nil
|
|
expect(json[:unconfirmed_emails]).to be_nil
|
|
end
|
|
end
|
|
|
|
describe "#pending_posts_count" do
|
|
let(:user) { Fabricate(:user) }
|
|
let(:serializer) { described_class.new(user, scope: guardian, root: false) }
|
|
let(:json) { serializer.as_json }
|
|
|
|
context "when guardian is another user" do
|
|
let(:guardian) { Guardian.new(other_user) }
|
|
|
|
context "when other user is not a staff member" do
|
|
let(:other_user) { Fabricate(:user) }
|
|
|
|
it "does not serialize pending_posts_count" do
|
|
expect(json.keys).not_to include :pending_posts_count
|
|
end
|
|
end
|
|
|
|
context "when other user is a staff member" do
|
|
let(:other_user) { Fabricate(:user, moderator: true) }
|
|
|
|
it "serializes pending_posts_count" do
|
|
expect(json[:pending_posts_count]).to eq 0
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when guardian is the current user" do
|
|
let(:guardian) { Guardian.new(user) }
|
|
|
|
it "serializes pending_posts_count" do
|
|
expect(json[:pending_posts_count]).to eq 0
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
describe "#status" do
|
|
fab!(:user_status) { Fabricate(:user_status) }
|
|
fab!(:user) { Fabricate(:user, user_status: user_status) }
|
|
let(:serializer) { described_class.new(user, scope: Guardian.new(user), root: false) }
|
|
|
|
it "adds user status when enabled" do
|
|
SiteSetting.enable_user_status = true
|
|
|
|
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 user status when disabled" do
|
|
SiteSetting.enable_user_status = false
|
|
json = serializer.as_json
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
|
|
it "doesn't add expired user status" do
|
|
SiteSetting.enable_user_status = true
|
|
|
|
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 set" do
|
|
SiteSetting.enable_user_status = true
|
|
|
|
user.clear_status!
|
|
user.reload
|
|
json = serializer.as_json
|
|
|
|
expect(json.keys).not_to include :status
|
|
end
|
|
end
|
|
end
|