Add missing tests for user.rb (#7306)
This commit is contained in:
		
							parent
							
								
									dc786c0cf4
								
							
						
					
					
						commit
						6c40e567aa
					
				
					 2 changed files with 214 additions and 0 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								dump.rdb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dump.rdb
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -324,4 +324,218 @@ RSpec.describe User, type: :model do
 | 
				
			||||||
      expect(admin.role?('moderator')).to be true
 | 
					      expect(admin.role?('moderator')).to be true
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  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
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue