Code-climate duplicate code fixes (#382)

* Code-climate duplicate code fixes

* Spec for accounts controller
This commit is contained in:
Sojan Jose 2019-12-24 17:32:27 +05:30 committed by Pranav Raj S
parent 97ab82892d
commit f98cd83a29
5 changed files with 48 additions and 24 deletions

View file

@ -2,11 +2,7 @@
class AccountBuilder class AccountBuilder
include CustomExceptions::Account include CustomExceptions::Account
pattr_initialize [:account_name!, :email!]
def initialize(params)
@account_name = params[:account_name]
@email = params[:email]
end
def perform def perform
validate_email validate_email

View file

@ -1,4 +1,6 @@
class Api::V1::AccountsController < Api::BaseController class Api::V1::AccountsController < Api::BaseController
include AuthHelper
skip_before_action :verify_authenticity_token, only: [:create] skip_before_action :verify_authenticity_token, only: [:create]
skip_before_action :authenticate_user!, :set_current_user, :check_subscription, :handle_with_exception, skip_before_action :authenticate_user!, :set_current_user, :check_subscription, :handle_with_exception,
only: [:create], raise: false only: [:create], raise: false
@ -9,9 +11,9 @@ class Api::V1::AccountsController < Api::BaseController
with: :render_error_response with: :render_error_response
def create def create
@user = AccountBuilder.new(params).perform @user = AccountBuilder.new(account_params).perform
if @user if @user
set_headers(@user) send_auth_headers(@user)
render json: { render json: {
data: @user.token_validation_response data: @user.token_validation_response
} }
@ -22,12 +24,7 @@ class Api::V1::AccountsController < Api::BaseController
private private
def set_headers(user) def account_params
data = user.create_new_auth_token params.permit(:account_name, :email).to_h
response.headers[DeviseTokenAuth.headers_names[:"access-token"]] = data['access-token']
response.headers[DeviseTokenAuth.headers_names[:"token-type"]] = 'Bearer'
response.headers[DeviseTokenAuth.headers_names[:client]] = data['client']
response.headers[DeviseTokenAuth.headers_names[:expiry]] = data['expiry']
response.headers[DeviseTokenAuth.headers_names[:uid]] = data['uid']
end end
end end

View file

@ -0,0 +1,10 @@
module AuthHelper
def send_auth_headers(user)
data = user.create_new_auth_token
response.headers[DeviseTokenAuth.headers_names[:"access-token"]] = data['access-token']
response.headers[DeviseTokenAuth.headers_names[:"token-type"]] = 'Bearer'
response.headers[DeviseTokenAuth.headers_names[:client]] = data['client']
response.headers[DeviseTokenAuth.headers_names[:expiry]] = data['expiry']
response.headers[DeviseTokenAuth.headers_names[:uid]] = data['uid']
end
end

View file

@ -1,4 +1,6 @@
class PasswordsController < Devise::PasswordsController class PasswordsController < Devise::PasswordsController
include AuthHelper
skip_before_action :require_no_authentication, raise: false skip_before_action :require_no_authentication, raise: false
skip_before_action :authenticate_user!, raise: false skip_before_action :authenticate_user!, raise: false
@ -8,7 +10,7 @@ class PasswordsController < Devise::PasswordsController
reset_password_token = Devise.token_generator.digest(self, :reset_password_token, original_token) reset_password_token = Devise.token_generator.digest(self, :reset_password_token, original_token)
@recoverable = User.find_by(reset_password_token: reset_password_token) @recoverable = User.find_by(reset_password_token: reset_password_token)
if @recoverable && reset_password_and_confirmation(@recoverable) if @recoverable && reset_password_and_confirmation(@recoverable)
set_headers(@recoverable) send_auth_headers(@recoverable)
render json: { render json: {
data: @recoverable.token_validation_response data: @recoverable.token_validation_response
} }
@ -29,15 +31,6 @@ class PasswordsController < Devise::PasswordsController
protected protected
def set_headers(user)
data = user.create_new_auth_token
response.headers[DeviseTokenAuth.headers_names[:"access-token"]] = data['access-token']
response.headers[DeviseTokenAuth.headers_names[:"token-type"]] = 'Bearer'
response.headers[DeviseTokenAuth.headers_names[:client]] = data['client']
response.headers[DeviseTokenAuth.headers_names[:expiry]] = data['expiry']
response.headers[DeviseTokenAuth.headers_names[:uid]] = data['uid']
end
def reset_password_and_confirmation(recoverable) def reset_password_and_confirmation(recoverable)
recoverable.confirm unless recoverable.confirmed? # confirm if user resets password without confirming anytime before recoverable.confirm unless recoverable.confirmed? # confirm if user resets password without confirming anytime before
recoverable.reset_password(params[:password], params[:password_confirmation]) recoverable.reset_password(params[:password], params[:password_confirmation])

View file

@ -0,0 +1,28 @@
require 'rails_helper'
RSpec.describe 'Accounts API', type: :request do
describe 'POST /api/v1/accounts' do
context 'when posting to accounts with correct parameters' do
let(:account_builder) { double }
let(:email) { Faker::Internet.email }
let(:user) { create(:user, email: email) }
before do
allow(AccountBuilder).to receive(:new).and_return(account_builder)
allow(account_builder).to receive(:perform).and_return(user)
end
it 'calls account builder' do
params = { account_name: 'test', email: email }
post api_v1_accounts_url,
params: params,
as: :json
expect(AccountBuilder).to have_received(:new).with(params)
expect(account_builder).to have_received(:perform)
expect(response.headers.keys).to include('access-token', 'token-type', 'client', 'expiry', 'uid')
end
end
end
end