diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 294c008..e1e1047 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -6,7 +6,8 @@ def new def create user = User.where("email = ?", params[:email].downcase).first - if AuthenticateUser.call(user, params) + authentication = AuthenticateUser.new(user, params).call + if authentication.success? set_cookie(user, params) redirect_to(sign_in_destination) else diff --git a/app/services/authenticate_user.rb b/app/services/authenticate_user.rb index 049c7bd..c13e0e6 100644 --- a/app/services/authenticate_user.rb +++ b/app/services/authenticate_user.rb @@ -1,11 +1,22 @@ class AuthenticateUser - def self.call(user, params) - if user && user.authenticate(params[:password]) - true + def initialize(user, params) + @user = user + @params = params + @result = false + end + + def call + if @user && @user.authenticate(@params[:password]) + @result = true else - false + @result = false end + self + end + + def success? + @result end end diff --git a/spec/services/authenticate_user_spec.rb b/spec/services/authenticate_user_spec.rb new file mode 100644 index 0000000..faf3071 --- /dev/null +++ b/spec/services/authenticate_user_spec.rb @@ -0,0 +1,32 @@ +require 'rails_helper' + +RSpec.describe AuthenticateUser do + + subject { AuthenticateUser.new(user, params).call } + + describe 'for unknown user' do + let(:user) { nil } + let(:params) { {} } + it 'is unsuccessful' do + expect(subject.success?).to be false + end + end + + describe 'for known user' do + let(:user) { Fabricate.build(:user) } + + context 'with correct password' do + let(:params) { { password: user.password } } + it 'is successful' do + expect(subject.success?).to be true + end + end + + context 'with incorrect password' do + let(:params) { { password: 'wrongpassword' } } + it 'is unsuccessful' do + expect(subject.success?).to be false + end + end + end +end