mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 11:08:04 +00:00 
			
		
		
		
	Code-climate duplicate code fixes (#382)
* Code-climate duplicate code fixes * Spec for accounts controller
This commit is contained in:
		| @@ -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 | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								app/controllers/concerns/auth_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/controllers/concerns/auth_helper.rb
									
									
									
									
									
										Normal 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 | ||||||
| @@ -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]) | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								spec/controllers/api/v1/accounts_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								spec/controllers/api/v1/accounts_controller_spec.rb
									
									
									
									
									
										Normal 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 | ||||||
		Reference in New Issue
	
	Block a user
	 Sojan Jose
					Sojan Jose