chore: Sync pre-chat fields after custom attribute update (#4692)

This commit is contained in:
Muhsin Keloth 2022-06-20 14:16:49 +05:30 committed by GitHub
parent 6c6df8661b
commit a8c6cd729b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 1 deletions

View file

@ -0,0 +1,21 @@
class Inboxes::UpdateWidgetPreChatCustomFieldsJob < ApplicationJob
queue_as :default
def perform(account, custom_attribute)
attribute_key = custom_attribute['attribute_key']
account.web_widgets.all.find_each do |web_widget|
pre_chat_fields = web_widget.pre_chat_form_options['pre_chat_fields']
pre_chat_fields.each_with_index do |pre_chat_field, index|
next unless pre_chat_field['name'] == attribute_key
web_widget.pre_chat_form_options['pre_chat_fields'][index] =
pre_chat_field.deep_merge({
'label' => custom_attribute['attribute_display_name'],
'placeholder' => custom_attribute['attribute_display_name'],
'values' => custom_attribute['attribute_values']
})
end
web_widget.save!
end
end
end

View file

@ -34,6 +34,7 @@ class CustomAttributeDefinition < ApplicationRecord
enum attribute_display_type: { text: 0, number: 1, currency: 2, percent: 3, link: 4, date: 5, list: 6, checkbox: 7 } enum attribute_display_type: { text: 0, number: 1, currency: 2, percent: 3, link: 4, date: 5, list: 6, checkbox: 7 }
belongs_to :account belongs_to :account
after_update :update_widget_pre_chat_custom_fields
after_destroy :sync_widget_pre_chat_custom_fields after_destroy :sync_widget_pre_chat_custom_fields
private private
@ -41,4 +42,8 @@ class CustomAttributeDefinition < ApplicationRecord
def sync_widget_pre_chat_custom_fields def sync_widget_pre_chat_custom_fields
::Inboxes::SyncWidgetPreChatCustomFieldsJob.perform_now(account, attribute_key) ::Inboxes::SyncWidgetPreChatCustomFieldsJob.perform_now(account, attribute_key)
end end
def update_widget_pre_chat_custom_fields
::Inboxes::UpdateWidgetPreChatCustomFieldsJob.perform_now(account, self)
end
end end

View file

@ -15,7 +15,7 @@ RSpec.describe Inboxes::SyncWidgetPreChatCustomFieldsJob, type: :job do
end end
context 'when called' do context 'when called' do
it 'reopens snoozed conversations whose snooze until has passed' do it 'sync pre chat fields if custom attribute deleted' do
described_class.perform_now(account, 'developer_id') described_class.perform_now(account, 'developer_id')
expect(web_widget.reload.pre_chat_form_options['pre_chat_fields']).to eq [{ expect(web_widget.reload.pre_chat_form_options['pre_chat_fields']).to eq [{
'label' => 'Full Name', 'label' => 'Full Name',

View file

@ -0,0 +1,30 @@
require 'rails_helper'
RSpec.describe Inboxes::UpdateWidgetPreChatCustomFieldsJob, type: :job do
pre_chat_fields = [{
'label' => 'Developer Id',
'name' => 'developer_id'
}, {
'label' => 'Full Name',
'name' => 'full_name'
}]
pre_chat_message = 'Share your queries here.'
custom_attribute = {
'attribute_key' => 'developer_id',
'attribute_display_name' => 'Developer Number'
}
let!(:account) { create(:account) }
let!(:web_widget) do
create(:channel_widget, account: account, pre_chat_form_options: { pre_chat_message: pre_chat_message, pre_chat_fields: pre_chat_fields })
end
context 'when called' do
it 'sync pre chat fields if custom attribute updated' do
described_class.perform_now(account, custom_attribute)
expect(web_widget.reload.pre_chat_form_options['pre_chat_fields']).to eq [
{ 'label' => 'Developer Number', 'name' => 'developer_id', 'placeholder' => 'Developer Number',
'values' => nil }, { 'label' => 'Full Name', 'name' => 'full_name' }
]
end
end
end