Compare commits

...
11 changed files with 46 additions and 18 deletions
+1 -1
View File
@@ -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
@@ -51,6 +51,8 @@ class ContactInboxWithContactBuilder
def create_contact
account.contacts.create!(
name: contact_attributes[:name] || ::Haikunator.haikunate(1000),
last_name: contact_attributes[:last_name] || '',
middle_name: contact_attributes[:middle_name] || '',
phone_number: contact_attributes[:phone_number],
email: contact_attributes[:email],
identifier: contact_attributes[:identifier],
@@ -104,7 +104,8 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
def process_contact_params_result(result)
{
name: "#{result['first_name'] || 'John'} #{result['last_name'] || 'Doe'}",
name: result['first_name'] || 'John',
last_name: result['last_name'] || 'Doe',
account_id: @inbox.account_id,
avatar_url: result['profile_pic']
}
@@ -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
@@ -71,7 +71,8 @@ class Telegram::IncomingMessageService
def contact_attributes
{
name: "#{telegram_params_first_name} #{telegram_params_last_name}",
name: telegram_params_first_name,
last_name: telegram_params_last_name,
additional_attributes: additional_attributes
}
end
@@ -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
@@ -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
@@ -13,6 +13,7 @@ describe ContactInboxWithContactBuilder do
inbox: inbox,
contact_attributes: {
name: 'Contact',
last_name: '1',
phone_number: '+1234567890',
email: 'testemail@example.com'
}
@@ -35,6 +36,7 @@ describe ContactInboxWithContactBuilder do
expect(contact_inbox.contact.id).not_to eq(contact.id)
expect(contact_inbox.contact.name).to eq('Contact')
expect(contact_inbox.contact.last_name).to eq('1')
expect(contact_inbox.contact.custom_attributes).to eq({ 'test' => 'test' })
expect(contact_inbox.inbox_id).to eq(inbox.id)
end
@@ -28,7 +28,8 @@ describe Messages::Facebook::MessageBuilder do
contact = facebook_channel.inbox.contacts.first
message = facebook_channel.inbox.messages.first
expect(contact.name).to eq('Jane Dae')
expect(contact.name).to eq('Jane')
expect(contact.last_name).to eq('Dae')
expect(message.content).to eq('facebook message')
end
@@ -53,10 +54,11 @@ describe Messages::Facebook::MessageBuilder do
contact = facebook_channel.inbox.contacts.first
# Refer: https://github.com/chatwoot/chatwoot/pull/3016 for this check
default_name = 'John Doe'
default_name = 'John'
expect(facebook_channel.inbox.reload.contacts.count).to eq(1)
expect(contact.name).to eq(default_name)
expect(contact.last_name).to eq(default_name)
end
end
end
@@ -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
@@ -51,7 +51,8 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(Contact.all.first.last_name).to eq('Jose')
expect(telegram_channel.inbox.messages.first.content).to eq('test')
end
end
@@ -64,7 +65,8 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(Contact.all.first.last_name).to eq('Jose')
expect(Contact.all.first.additional_attributes['social_telegram_user_id']).to eq(23)
expect(Contact.all.first.additional_attributes['social_telegram_user_name']).to eq('sojan')
expect(telegram_channel.inbox.messages.first.content).to eq('test')
@@ -106,7 +108,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(Contact.all.first.additional_attributes['social_telegram_user_id']).to eq(23)
expect(Contact.all.first.additional_attributes['social_telegram_user_name']).to eq('sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('audio')
@@ -127,7 +129,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('image')
end
end
@@ -152,7 +154,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('image')
end
end
@@ -174,7 +176,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('video')
end
end
@@ -193,7 +195,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('audio')
end
end
@@ -214,7 +216,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('file')
end
end
@@ -252,7 +254,7 @@ describe Telegram::IncomingMessageService do
}.with_indifferent_access
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(telegram_channel.inbox.messages.first.attachments.first.file_type).to eq('location')
end
end
@@ -280,7 +282,8 @@ describe Telegram::IncomingMessageService do
described_class.new(inbox: telegram_channel.inbox, params: params).perform
expect(telegram_channel.inbox.conversations.count).not_to eq(0)
expect(Contact.all.first.name).to eq('Sojan Jose')
expect(Contact.all.first.name).to eq('Sojan')
expect(Contact.all.first.last_name).to eq('Jose')
expect(Contact.all.first.additional_attributes['social_telegram_user_id']).to eq(5_171_248)
expect(telegram_channel.inbox.messages.first.content).to eq('Option 1')
end