discourse/spec/serializers/admin_user_list_serializer_spec.rb
Martin Brennan dd3a7f4825
FIX: Admin user list not showing 2FA icon for only security keys enabled (#8839)
If someone only had security keys enabled, the icon to say they had 2FA enabled would not show in the admin staff user list. It would only show if they had TOTP enabled.
2020-02-03 14:37:46 +10:00

101 lines
3.3 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe AdminUserListSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
let(:guardian) { Guardian.new(admin) }
let(:serializer) do
AdminUserListSerializer.new(user, scope: guardian, root: false)
end
context "when totp enabled" do
before do
Fabricate(:user_second_factor_totp, user: user)
end
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 do
Fabricate(:user_security_key, user: user)
end
it "returns the right values" do
json = serializer.as_json
expect(json[:second_factor_enabled]).to eq(true)
end
end
context "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
end