|
|
|
@ -324,4 +324,218 @@ RSpec.describe User, type: :model do
|
|
|
|
|
expect(admin.role?('moderator')).to be true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#disable!' do
|
|
|
|
|
subject(:user) { Fabricate(:user, disabled: false, current_sign_in_at: current_sign_in_at, last_sign_in_at: nil) }
|
|
|
|
|
let(:current_sign_in_at) { Time.zone.now }
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
user.disable!
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'disables user' do
|
|
|
|
|
expect(user).to have_attributes(disabled: true, current_sign_in_at: nil, last_sign_in_at: current_sign_in_at)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#disable!' do
|
|
|
|
|
subject(:user) { Fabricate(:user, disabled: false, current_sign_in_at: current_sign_in_at, last_sign_in_at: nil) }
|
|
|
|
|
let(:current_sign_in_at) { Time.zone.now }
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
user.disable!
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'disables user' do
|
|
|
|
|
expect(user).to have_attributes(disabled: true, current_sign_in_at: nil, last_sign_in_at: current_sign_in_at)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#enable!' do
|
|
|
|
|
subject(:user) { Fabricate(:user, disabled: true) }
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
user.enable!
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'enables user' do
|
|
|
|
|
expect(user).to have_attributes(disabled: false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#confirm!' do
|
|
|
|
|
subject(:user) { Fabricate(:user, confirmed_at: confirmed_at) }
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
|
user.confirm!
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
after { ActionMailer::Base.deliveries.clear }
|
|
|
|
|
|
|
|
|
|
context 'when user is new' do
|
|
|
|
|
let(:confirmed_at) { nil }
|
|
|
|
|
|
|
|
|
|
it 'confirms user' do
|
|
|
|
|
expect(user.confirmed_at).to be_present
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'delivers mails' do
|
|
|
|
|
expect(ActionMailer::Base.deliveries.count).to eq 2
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not new' do
|
|
|
|
|
let(:confirmed_at) { Time.zone.now }
|
|
|
|
|
|
|
|
|
|
it 'confirms user' do
|
|
|
|
|
expect(user.confirmed_at).to be_present
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'does not deliver mail' do
|
|
|
|
|
expect(ActionMailer::Base.deliveries.count).to eq 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#promote!' do
|
|
|
|
|
subject(:user) { Fabricate(:user, admin: is_admin, moderator: is_moderator) }
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
user.promote!
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is an admin' do
|
|
|
|
|
let(:is_admin) { true }
|
|
|
|
|
|
|
|
|
|
context 'when user is a moderator' do
|
|
|
|
|
let(:is_moderator) { true }
|
|
|
|
|
|
|
|
|
|
it 'changes moderator filed false' do
|
|
|
|
|
expect(user).to be_admin
|
|
|
|
|
expect(user).not_to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not a moderator' do
|
|
|
|
|
let(:is_moderator) { false }
|
|
|
|
|
|
|
|
|
|
it 'does not change status' do
|
|
|
|
|
expect(user).to be_admin
|
|
|
|
|
expect(user).not_to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not admin' do
|
|
|
|
|
let(:is_admin) { false }
|
|
|
|
|
|
|
|
|
|
context 'when user is a moderator' do
|
|
|
|
|
let(:is_moderator) { true }
|
|
|
|
|
|
|
|
|
|
it 'changes user into an admin' do
|
|
|
|
|
expect(user).to be_admin
|
|
|
|
|
expect(user).not_to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not a moderator' do
|
|
|
|
|
let(:is_moderator) { false }
|
|
|
|
|
|
|
|
|
|
it 'changes user into a moderator' do
|
|
|
|
|
expect(user).not_to be_admin
|
|
|
|
|
expect(user).to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#demote!' do
|
|
|
|
|
subject(:user) { Fabricate(:user, admin: admin, moderator: moderator) }
|
|
|
|
|
|
|
|
|
|
before do
|
|
|
|
|
user.demote!
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is an admin' do
|
|
|
|
|
let(:admin) { true }
|
|
|
|
|
|
|
|
|
|
context 'when user is a moderator' do
|
|
|
|
|
let(:moderator) { true }
|
|
|
|
|
|
|
|
|
|
it 'changes user into a moderator' do
|
|
|
|
|
expect(user).not_to be_admin
|
|
|
|
|
expect(user).to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not a moderator' do
|
|
|
|
|
let(:moderator) { false }
|
|
|
|
|
|
|
|
|
|
it 'changes user into a moderator' do
|
|
|
|
|
expect(user).not_to be_admin
|
|
|
|
|
expect(user).to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not an admin' do
|
|
|
|
|
let(:admin) { false }
|
|
|
|
|
|
|
|
|
|
context 'when user is a moderator' do
|
|
|
|
|
let(:moderator) { true }
|
|
|
|
|
|
|
|
|
|
it 'changes user into a plain user' do
|
|
|
|
|
expect(user).not_to be_admin
|
|
|
|
|
expect(user).not_to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not a moderator' do
|
|
|
|
|
let(:moderator) { false }
|
|
|
|
|
|
|
|
|
|
it 'does not change any fields' do
|
|
|
|
|
expect(user).not_to be_admin
|
|
|
|
|
expect(user).not_to be_moderator
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe '#active_for_authentication?' do
|
|
|
|
|
subject { user.active_for_authentication? }
|
|
|
|
|
let(:user) { Fabricate(:user, disabled: disabled, confirmed_at: confirmed_at) }
|
|
|
|
|
|
|
|
|
|
context 'when user is disabled' do
|
|
|
|
|
let(:disabled) { true }
|
|
|
|
|
|
|
|
|
|
context 'when user is confirmed' do
|
|
|
|
|
let(:confirmed_at) { Time.zone.now }
|
|
|
|
|
|
|
|
|
|
it { is_expected.to be false }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not confirmed' do
|
|
|
|
|
let(:confirmed_at) { nil }
|
|
|
|
|
|
|
|
|
|
it { is_expected.to be false }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not disabled' do
|
|
|
|
|
let(:disabled) { false }
|
|
|
|
|
|
|
|
|
|
context 'when user is confirmed' do
|
|
|
|
|
let(:confirmed_at) { Time.zone.now }
|
|
|
|
|
|
|
|
|
|
it { is_expected.to be true }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when user is not confirmed' do
|
|
|
|
|
let(:confirmed_at) { nil }
|
|
|
|
|
|
|
|
|
|
it { is_expected.to be false }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|