This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/spec/lib/second_factor/actions/grant_admin_spec.rb
David Taylor c9dab6fd08
DEV: Automatically require 'rails_helper' in all specs (#16077)
It's very easy to forget to add `require 'rails_helper'` at the top of every core/plugin spec file, and omissions can cause some very confusing/sporadic errors.

By setting this flag in `.rspec`, we can remove the need for `require 'rails_helper'` entirely.
2022-03-01 17:50:50 +00:00

79 lines
2.5 KiB
Ruby

# frozen_string_literal: true
describe SecondFactor::Actions::GrantAdmin do
fab!(:admin) { Fabricate(:admin) }
fab!(:user) { Fabricate(:user) }
def cleanup_admin_confirmation_redis_keys
keys = Discourse.redis.keys("admin-confirmation:*")
keys += Discourse.redis.keys("admin-confirmation-token:*")
Discourse.redis.del(keys)
end
after do
cleanup_admin_confirmation_redis_keys
end
def params(hash)
ActionController::Parameters.new(hash)
end
def create_instance(user)
SecondFactor::Actions::GrantAdmin.new(Guardian.new(user))
end
describe "#no_second_factors_enabled!" do
it "sends new admin confirmation email" do
instance = create_instance(admin)
expect {
instance.no_second_factors_enabled!(params({ user_id: user.id }))
}.to change { AdminConfirmation.exists_for?(user.id) }.from(false).to(true)
end
it "ensures the acting user is admin" do
instance = create_instance(user)
expect {
instance.no_second_factors_enabled!(params({ user_id: user.id }))
}.to raise_error(Discourse::InvalidAccess)
expect(AdminConfirmation.exists_for?(user.id)).to eq(false)
end
end
describe "#second_factor_auth_required!" do
it "returns a hash with callback_params and redirect_path" do
instance = create_instance(admin)
hash = instance.second_factor_auth_required!(params({ user_id: user.id }))
expect(hash[:callback_params]).to eq({ user_id: user.id })
expect(hash[:redirect_path]).to eq("/admin/users/#{user.id}/#{user.username}")
end
it "ensures the acting user is admin" do
instance = create_instance(user)
expect {
instance.second_factor_auth_required!(params({ user_id: user.id }))
}.to raise_error(Discourse::InvalidAccess)
end
end
describe "#second_factor_auth_completed!" do
it "grants the target user admin access and logs to staff action logs" do
instance = create_instance(admin)
expect {
instance.second_factor_auth_completed!(user_id: user.id)
}.to change { user.reload.admin }.from(false).to(true)
expect(UserHistory.exists?(
acting_user_id: admin.id,
target_user_id: user.id,
action: UserHistory.actions[:grant_admin]
)).to eq(true)
end
it "ensures the acting user is admin" do
instance = create_instance(user)
expect {
instance.second_factor_auth_completed!(user_id: user.id)
}.to raise_error(Discourse::InvalidAccess)
end
end
end