From 66a7c2e84f5c2c8cba5283ef53732e07f8fc84db Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Mon, 29 Jan 2024 21:17:39 +0530 Subject: [PATCH] feat: Add last_name and first name in widget end point --- app/actions/contact_identify_action.rb | 2 +- .../api/v1/widget/contacts_controller.rb | 4 ++-- .../api/v1/widget/contacts/show.json.jbuilder | 2 ++ .../api/v1/widget/contacts/update.json.jbuilder | 2 ++ .../api/v1/widget/contacts_controller_spec.rb | 15 ++++++++++++++- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/actions/contact_identify_action.rb b/app/actions/contact_identify_action.rb index 6b2f37433..0c32e77ba 100644 --- a/app/actions/contact_identify_action.rb +++ b/app/actions/contact_identify_action.rb @@ -9,7 +9,7 @@ class ContactIdentifyAction pattr_initialize [:contact!, :params!, { retain_original_contact_name: false, discard_invalid_attrs: false }] def perform - @attributes_to_update = [:identifier, :name, :email, :phone_number] + @attributes_to_update = [:identifier, :name, :email, :phone_number, :middle_name, :last_name] ActiveRecord::Base.transaction do merge_if_existing_identified_contact diff --git a/app/controllers/api/v1/widget/contacts_controller.rb b/app/controllers/api/v1/widget/contacts_controller.rb index 5138fe675..9e6e64489 100644 --- a/app/controllers/api/v1/widget/contacts_controller.rb +++ b/app/controllers/api/v1/widget/contacts_controller.rb @@ -70,7 +70,7 @@ class Api::V1::Widget::ContactsController < Api::V1::Widget::BaseController end def permitted_params - params.permit(:website_token, :identifier, :identifier_hash, :email, :name, :avatar_url, :phone_number, custom_attributes: {}, - additional_attributes: {}) + params.permit(:website_token, :identifier, :identifier_hash, :email, :name, :middle_name, :last_name, :avatar_url, :phone_number, custom_attributes: {}, + additional_attributes: {}) end end diff --git a/app/views/api/v1/widget/contacts/show.json.jbuilder b/app/views/api/v1/widget/contacts/show.json.jbuilder index 2e7a38277..0ec24872a 100644 --- a/app/views/api/v1/widget/contacts/show.json.jbuilder +++ b/app/views/api/v1/widget/contacts/show.json.jbuilder @@ -3,3 +3,5 @@ json.name @contact.name json.email @contact.email json.phone_number @contact.phone_number json.identifier @contact.identifier +json.middle_name @contact.middle_name +json.last_name @contact.last_name diff --git a/app/views/api/v1/widget/contacts/update.json.jbuilder b/app/views/api/v1/widget/contacts/update.json.jbuilder index d6228cbfe..6d17686e4 100644 --- a/app/views/api/v1/widget/contacts/update.json.jbuilder +++ b/app/views/api/v1/widget/contacts/update.json.jbuilder @@ -2,3 +2,5 @@ json.id @contact.id json.name @contact.name json.email @contact.email json.phone_number @contact.phone_number +json.middle_name @contact.middle_name +json.last_name @contact.last_name diff --git a/spec/controllers/api/v1/widget/contacts_controller_spec.rb b/spec/controllers/api/v1/widget/contacts_controller_spec.rb index 336d9d9ca..f62c19084 100644 --- a/spec/controllers/api/v1/widget/contacts_controller_spec.rb +++ b/spec/controllers/api/v1/widget/contacts_controller_spec.rb @@ -3,7 +3,10 @@ require 'rails_helper' RSpec.describe '/api/v1/widget/contacts', type: :request do let(:account) { create(:account) } let(:web_widget) { create(:channel_widget, account: account) } - let(:contact) { create(:contact, account: account, email: 'test@test.com', phone_number: '+745623239') } + let(:contact) do + create(:contact, account: account, email: 'test@test.com', phone_number: '+745623239', name: 'emiley', middle_name: 'grace', + last_name: 'thompson') + end let(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: web_widget.inbox) } let(:payload) { { source_id: contact_inbox.source_id, inbox_id: web_widget.inbox.id } } let(:token) { Widget::TokenService.new(payload: payload).generate_token } @@ -81,6 +84,16 @@ RSpec.describe '/api/v1/widget/contacts', type: :request do expect(body['email']).to eq('test-1@test.com') expect(response).to have_http_status(:success) end + + it 'update last name if valid last name passed' do + patch '/api/v1/widget/contact', + params: params.merge({ last_name: 'thompson-1' }), + headers: { 'X-Auth-Token' => token }, + as: :json + body = response.parsed_body + expect(body['last_name']).to eq('thompson-1') + expect(response).to have_http_status(:success) + end end end