discourse/spec/serializers/admin_user_list_serializer_...

113 lines
3.8 KiB
Ruby

# frozen_string_literal: true
RSpec.describe AdminUserListSerializer do
fab!(:user)
fab!(:admin)
let(:guardian) { Guardian.new(admin) }
let(:serializer) { AdminUserListSerializer.new(user, scope: guardian, root: false) }
context "when totp enabled" do
before { Fabricate(:user_second_factor_totp, user: user) }
it "returns the right values" do
json = serializer.as_json
expect(json[:second_factor_enabled]).to eq(true)
end
end
context "when security keys enabled" do
before { Fabricate(:user_security_key, user: user) }
it "returns the right values" do
json = serializer.as_json
expect(json[:second_factor_enabled]).to eq(true)
end
end
describe "emails" do
fab!(:admin) { Fabricate(:user, admin: true, email: "admin@email.com") }
fab!(:moderator) { Fabricate(:user, moderator: true, email: "moderator@email.com") }
fab!(:user) { Fabricate(:user, email: "user@email.com") }
def serialize(user, viewed_by, opts = nil)
AdminUserListSerializer.new(
user,
scope: Guardian.new(viewed_by),
root: false,
emails_desired: opts && opts[:emails_desired],
).as_json
end
def fabricate_secondary_emails_for(u)
Fabricate(:secondary_email, user: u, email: "first@email.com")
Fabricate(:secondary_email, user: u, email: "second@email.com")
end
it "contains an admin's own emails" do
fabricate_secondary_emails_for(admin)
json = serialize(admin, admin)
expect(json[:email]).to eq("admin@email.com")
expect(json[:secondary_emails]).to contain_exactly("first@email.com", "second@email.com")
end
it "doesn't include a regular user's emails" do
fabricate_secondary_emails_for(user)
json = serialize(user, user)
expect(json[:email]).to eq(nil)
expect(json[:secondary_emails]).to eq(nil)
end
it "doesn't return emails for a moderator request when moderators_view_emails is disabled" do
SiteSetting.moderators_view_emails = false
fabricate_secondary_emails_for(user)
json = serialize(user, moderator, emails_desired: true)
expect(json[:email]).to eq(nil)
expect(json[:secondary_emails]).to eq(nil)
end
it "returns emails for a moderator request when moderators_view_emails is enabled" do
SiteSetting.moderators_view_emails = true
fabricate_secondary_emails_for(user)
json = serialize(user, moderator, emails_desired: true)
expect(json[:email]).to eq("user@email.com")
expect(json[:secondary_emails]).to contain_exactly("first@email.com", "second@email.com")
end
it "returns emails for admins when emails_desired is true" do
fabricate_secondary_emails_for(user)
json = serialize(user, admin, emails_desired: true)
expect(json[:email]).to eq("user@email.com")
expect(json[:secondary_emails]).to contain_exactly("first@email.com", "second@email.com")
end
it "returns a staged user's emails" do
user.staged = true
fabricate_secondary_emails_for(user)
json = serialize(user, admin)
expect(json[:email]).to eq("user@email.com")
expect(json[:secondary_emails]).to contain_exactly("first@email.com", "second@email.com")
end
end
describe "#can_be_deleted" do
it "is not included if the include_can_be_deleted option is not present" do
json = AdminUserListSerializer.new(user, scope: guardian, root: false).as_json
expect(json.key?(:can_be_deleted)).to eq(false)
end
it "is included if the include_can_be_deleted option is true" do
json =
AdminUserListSerializer.new(
user,
scope: guardian,
root: false,
include_can_be_deleted: true,
).as_json
expect(json[:can_be_deleted]).to eq(true)
end
end
end