127 lines
3.8 KiB
Ruby
127 lines
3.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe UsersController do
|
|
before(:all) do # TODO: turn it into cleanup after each test
|
|
User.destroy_all
|
|
end
|
|
let(:user1) do
|
|
User.create(
|
|
email: 'test1@example.com',
|
|
password: 'abcdefgh',
|
|
recovery_password: 'recovery password',
|
|
role: :admin
|
|
)
|
|
end
|
|
describe 'get index' do
|
|
subject { get :index }
|
|
it 'renders the users/index template' do
|
|
expect(subject).to render_template('users/index')
|
|
end
|
|
end
|
|
describe 'get new' do
|
|
subject { get :new }
|
|
it 'renders the users/new template' do
|
|
expect(subject).to render_template('users/new')
|
|
end
|
|
end
|
|
describe 'get create' do
|
|
subject do
|
|
get :create, params: { user: { email: 'test2@example.com', password: 'abcdefgh' } }
|
|
end
|
|
it 'creates a user' do
|
|
subject
|
|
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}/jeravuxl")
|
|
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
|
|
describe 'delete destroy' do
|
|
context 'when admin is logged in' do
|
|
it 'deletes the user' do
|
|
# TODO
|
|
end
|
|
end
|
|
end
|
|
end
|