fix: Greeting messages not sent when pre-chat form is enabled (#1842)

This commit is contained in:
Sojan Jose 2021-03-01 10:58:49 +05:30 committed by GitHub
parent 60b25760fb
commit 03bc4bf224
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 21 deletions

View file

@ -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?

View file

@ -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