about summary refs log tree commit diff
path: root/spec
diff options
context:
space:
mode:
authorShuhei Kitagawa <shuheiktgw@users.noreply.github.com>2018-05-02 21:13:52 +0900
committerEugen Rochko <eugen@zeonfederated.com>2018-05-02 14:13:52 +0200
commit6c40e567aaa166eb618c316d1de2eb81b8eced9a (patch)
treeb0361331ff7c6c215076d1e5dd082fa78c6fd48f /spec
parentdc786c0cf4467ade8db7d8b17e09f16923bfc1e8 (diff)
Add missing tests for user.rb (#7306)
Diffstat (limited to 'spec')
-rw-r--r--spec/models/user_spec.rb214
1 files changed, 214 insertions, 0 deletions
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 8171c939a..760214ded 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -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