password recovery refactoring and tests
This commit is contained in:
parent
a69df8e658
commit
39a89ad564
5 changed files with 98 additions and 16 deletions
|
@ -3,12 +3,12 @@ require 'rails_helper'
|
|||
RSpec.describe ApplicationController do
|
||||
describe 'current_user' do
|
||||
before(:all) do
|
||||
User.create(email: 'karol.selak@gmail.com', password: 'abcde')
|
||||
User.create(email: 'test2@example.com', password: 'abcde')
|
||||
end
|
||||
context 'when a user is logged in' do
|
||||
it 'returns the user' do
|
||||
# TODO
|
||||
# expect(current_user.email).to eql('karol.selak@gmail.com')
|
||||
# expect(current_user.email).to eql('test2@example.com')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,26 +1,107 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe UsersController do
|
||||
before(:all) do # TODO change it to cleanup after each test
|
||||
User.destroy_all
|
||||
end
|
||||
let(:user1) do
|
||||
User.create(email: 'test1@example.com', password: 'abcde', recovery_password: 'recovery password')
|
||||
end
|
||||
describe 'get new' do
|
||||
subject { get 'new' }
|
||||
subject { get :new }
|
||||
it 'renders the users/new template' do
|
||||
expect(subject).to render_template('users/new')
|
||||
end
|
||||
end
|
||||
describe 'get create' do
|
||||
before(:all) do # TODO change it to cleanup after each test
|
||||
User.destroy_all
|
||||
subject do
|
||||
get :create, params: {user: {email: 'test2@example.com', password: 'abcde'}}
|
||||
end
|
||||
subject {
|
||||
get :create, params: {user: {email: 'karol.selak@gmail.com', password: 'abcde'}}
|
||||
}
|
||||
it 'creates a user' do
|
||||
subject
|
||||
expect(User.where(email: 'karol.selak@gmail.com').size).to eql(1)
|
||||
expect(User.where(email: 'test2@example.com').size).to eql(1)
|
||||
end
|
||||
it 'redirects to /welcome' do
|
||||
subject
|
||||
expect(subject).to redirect_to('/welcome')
|
||||
end
|
||||
end
|
||||
describe 'get password_recovery_request_form' do
|
||||
subject { get :password_recovery_request_form }
|
||||
it 'renders the users/password_recovery_request_form template' do
|
||||
expect(subject).to render_template('users/password_recovery_request_form')
|
||||
end
|
||||
end
|
||||
describe 'post password_recovery_request' do
|
||||
subject do
|
||||
get :password_recovery_request, params: {email: user1.email}
|
||||
end
|
||||
it 'sends the proper recovery email' do
|
||||
srand(10)
|
||||
subject
|
||||
email_text = ActionMailer::Base.deliveries.last.body.raw_source
|
||||
expect(email_text).to match("recover_password/#{user1.id}/tfohbclx")
|
||||
end
|
||||
it 'sends a recovery email to the proper email' do
|
||||
subject
|
||||
expect(ActionMailer::Base.deliveries.last.to).to eql([user1.email])
|
||||
end
|
||||
it 'flashes a notice' do
|
||||
subject
|
||||
expect(subject.request.flash[:notice]).to match("Recovery email sent to #{user1.email}")
|
||||
end
|
||||
end
|
||||
describe 'get recover_password_form' do
|
||||
subject do
|
||||
get :recover_password_form, params: {id: user1.id, recovery_password: 'recovery password'}
|
||||
end
|
||||
it 'renders proper form' do
|
||||
subject
|
||||
expect(subject).to render_template('users/recover_password_form')
|
||||
end
|
||||
end
|
||||
describe 'post recover_password' do
|
||||
context 'when passwords match and recovery password is proper' do
|
||||
subject do
|
||||
post :recover_password, params: {
|
||||
user_id: user1.id,
|
||||
recovery_password: 'recovery password',
|
||||
password: 'new password',
|
||||
password_confirmation: 'new password'
|
||||
}
|
||||
end
|
||||
it 'flashes a notice about success' do
|
||||
subject
|
||||
expect(subject.request.flash[:notice]).to match('Password changed')
|
||||
end
|
||||
end
|
||||
context 'when recovery password is inproper' do
|
||||
subject do
|
||||
post :recover_password, params: {
|
||||
user_id: user1.id,
|
||||
recovery_password: 'improper recovery password',
|
||||
password: 'new password',
|
||||
password_confirmation: 'new password'
|
||||
}
|
||||
end
|
||||
it 'flashes a notice about failure' do
|
||||
subject
|
||||
expect(subject.request.flash[:notice]).to match('Recovery link expired or invalid')
|
||||
end
|
||||
end
|
||||
context 'when passwords match and recovery password is improper' do
|
||||
subject do
|
||||
post :recover_password, params: {
|
||||
user_id: user1.id,
|
||||
recovery_password: 'recovery password',
|
||||
password: 'new password',
|
||||
password_confirmation: 'bad password'
|
||||
}
|
||||
end
|
||||
it 'flashes a notice about failure' do
|
||||
subject
|
||||
expect(subject.request.flash[:notice]).to match('Passwords don\'t match')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue