|
|
|
@ -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 |
|
|
|
|