From bdeb2f98122483f3c401677a475260d00d8001e5 Mon Sep 17 00:00:00 2001 From: Liam <43280985+LiamAshdown@users.noreply.github.com> Date: Thu, 21 Sep 2023 08:53:12 +0100 Subject: [PATCH] feat: Searching contacts by company name (#7867) Implement the functionality of being able to search the contacts page by company name. Fixes: #7818 Co-authored-by: Sojan Jose --- .../api/v1/accounts/contacts_controller.rb | 3 ++- .../api/v1/accounts/contacts_controller_spec.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index d75dc71b5..bec00be96 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -25,7 +25,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController render json: { error: 'Specify search string with parameter q' }, status: :unprocessable_entity if params[:q].blank? && return contacts = resolved_contacts.where( - 'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search', + 'name ILIKE :search OR email ILIKE :search OR phone_number ILIKE :search OR contacts.identifier LIKE :search + OR contacts.additional_attributes->>\'company_name\' ILIKE :search', search: "%#{params[:q].strip}%" ) @contacts_count = contacts.count diff --git a/spec/controllers/api/v1/accounts/contacts_controller_spec.rb b/spec/controllers/api/v1/accounts/contacts_controller_spec.rb index fe5c6c170..7352b842f 100644 --- a/spec/controllers/api/v1/accounts/contacts_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/contacts_controller_spec.rb @@ -295,6 +295,18 @@ RSpec.describe 'Contacts API', type: :request do expect(response.body).not_to include(contact1.email) end + it 'searches contacts using company name' do + contact2.update(additional_attributes: { company_name: 'acme.inc' }) + get "/api/v1/accounts/#{account.id}/contacts/search", + params: { q: 'acme.inc' }, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(contact2.email) + expect(response.body).not_to include(contact1.email) + end + it 'matches the resolved contact respecting the identifier character casing' do contact_normal = create(:contact, name: 'testcontact', account: account, identifier: 'testidentifer') contact_special = create(:contact, name: 'testcontact', account: account, identifier: 'TestIdentifier')