fix: Greeting messages not sent when pre-chat form is enabled (#1842)
This commit is contained in:
parent
60b25760fb
commit
03bc4bf224
2 changed files with 36 additions and 21 deletions
|
@ -4,9 +4,9 @@ class MessageTemplates::HookExecutionService
|
||||||
def perform
|
def perform
|
||||||
return if inbox.agent_bot_inbox&.active?
|
return if inbox.agent_bot_inbox&.active?
|
||||||
|
|
||||||
::MessageTemplates::Template::OutOfOffice.new(conversation: conversation).perform if should_send_out_of_office_message?
|
|
||||||
# TODO: let's see whether this is needed and remove this and related logic if not
|
# TODO: let's see whether this is needed and remove this and related logic if not
|
||||||
#::MessageTemplates::Template::Greeting.new(conversation: conversation).perform if should_send_greeting?
|
# ::MessageTemplates::Template::OutOfOffice.new(conversation: conversation).perform if should_send_out_of_office_message?
|
||||||
|
::MessageTemplates::Template::Greeting.new(conversation: conversation).perform if should_send_greeting?
|
||||||
::MessageTemplates::Template::EmailCollect.new(conversation: conversation).perform if should_send_email_collect?
|
::MessageTemplates::Template::EmailCollect.new(conversation: conversation).perform if should_send_email_collect?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,8 +31,9 @@ class MessageTemplates::HookExecutionService
|
||||||
conversation.messages.where(content_type: 'input_email').present?
|
conversation.messages.where(content_type: 'input_email').present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: we should be able to reduce this logic once we have a toggle for email collect messages
|
||||||
def should_send_email_collect?
|
def should_send_email_collect?
|
||||||
!contact_has_email? && inbox.web_widget? && !email_collect_was_sent?
|
!contact_has_email? && inbox.web_widget? && !inbox.channel.pre_chat_form_enabled? && !email_collect_was_sent?
|
||||||
end
|
end
|
||||||
|
|
||||||
def contact_has_email?
|
def contact_has_email?
|
||||||
|
|
|
@ -19,13 +19,26 @@ describe ::MessageTemplates::HookExecutionService do
|
||||||
# described class gets called in message after commit
|
# described class gets called in message after commit
|
||||||
message = create(:message, conversation: conversation)
|
message = create(:message, conversation: conversation)
|
||||||
|
|
||||||
# TODO: remove this if this hook is removed
|
expect(::MessageTemplates::Template::Greeting).to have_received(:new).with(conversation: message.conversation)
|
||||||
# expect(::MessageTemplates::Template::Greeting).to have_received(:new).with(conversation: message.conversation)
|
expect(greeting_service).to have_received(:perform)
|
||||||
# expect(greeting_service).to have_received(:perform)
|
|
||||||
expect(::MessageTemplates::Template::EmailCollect).to have_received(:new).with(conversation: message.conversation)
|
expect(::MessageTemplates::Template::EmailCollect).to have_received(:new).with(conversation: message.conversation)
|
||||||
expect(email_collect_service).to have_received(:perform)
|
expect(email_collect_service).to have_received(:perform)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'doesnot calls ::MessageTemplates::Template::EmailCollect when prechat form is enabled' do
|
||||||
|
contact = create(:contact, email: nil)
|
||||||
|
conversation = create(:conversation, contact: contact)
|
||||||
|
|
||||||
|
# ensure prechat form is enabled
|
||||||
|
conversation.inbox.channel.update(pre_chat_form_enabled: true)
|
||||||
|
allow(::MessageTemplates::Template::EmailCollect).to receive(:new).and_return(true)
|
||||||
|
|
||||||
|
# described class gets called in message after commit
|
||||||
|
message = create(:message, conversation: conversation)
|
||||||
|
|
||||||
|
expect(::MessageTemplates::Template::EmailCollect).not_to have_received(:new).with(conversation: message.conversation)
|
||||||
|
end
|
||||||
|
|
||||||
it 'doesnot calls ::MessageTemplates::Template::Greeting if greeting_message is empty' do
|
it 'doesnot calls ::MessageTemplates::Template::Greeting if greeting_message is empty' do
|
||||||
contact = create(:contact, email: nil)
|
contact = create(:contact, email: nil)
|
||||||
conversation = create(:conversation, contact: contact)
|
conversation = create(:conversation, contact: contact)
|
||||||
|
@ -47,24 +60,25 @@ describe ::MessageTemplates::HookExecutionService do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when it is after working hours' do
|
# TODO: remove this if this hook is removed
|
||||||
it 'calls ::MessageTemplates::Template::OutOfOffice' do
|
# context 'when it is after working hours' do
|
||||||
contact = create :contact
|
# it 'calls ::MessageTemplates::Template::OutOfOffice' do
|
||||||
conversation = create :conversation, contact: contact
|
# contact = create :contact
|
||||||
|
# conversation = create :conversation, contact: contact
|
||||||
|
|
||||||
conversation.inbox.update(working_hours_enabled: true, out_of_office_message: 'We are out of office')
|
# conversation.inbox.update(working_hours_enabled: true, out_of_office_message: 'We are out of office')
|
||||||
conversation.inbox.working_hours.today.update!(closed_all_day: true)
|
# conversation.inbox.working_hours.today.update!(closed_all_day: true)
|
||||||
|
|
||||||
out_of_office_service = double
|
# out_of_office_service = double
|
||||||
|
|
||||||
allow(::MessageTemplates::Template::OutOfOffice).to receive(:new).and_return(out_of_office_service)
|
# allow(::MessageTemplates::Template::OutOfOffice).to receive(:new).and_return(out_of_office_service)
|
||||||
allow(out_of_office_service).to receive(:perform).and_return(true)
|
# allow(out_of_office_service).to receive(:perform).and_return(true)
|
||||||
|
|
||||||
# described class gets called in message after commit
|
# # described class gets called in message after commit
|
||||||
message = create(:message, conversation: conversation)
|
# message = create(:message, conversation: conversation)
|
||||||
|
|
||||||
expect(::MessageTemplates::Template::OutOfOffice).to have_received(:new).with(conversation: message.conversation)
|
# expect(::MessageTemplates::Template::OutOfOffice).to have_received(:new).with(conversation: message.conversation)
|
||||||
expect(out_of_office_service).to have_received(:perform)
|
# expect(out_of_office_service).to have_received(:perform)
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue