From d672aa357b1778f6d4407a64e691b0ba8b676cad Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Mon, 6 Feb 2023 12:42:06 -0800 Subject: [PATCH] chore: Add subject to the slack message (#6404) --- .../slack/send_on_slack_service.rb | 15 +++++++++- .../slack/send_on_slack_service_spec.rb | 29 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/integrations/slack/send_on_slack_service.rb b/lib/integrations/slack/send_on_slack_service.rb index 87440cb6e..6a8751e47 100644 --- a/lib/integrations/slack/send_on_slack_service.rb +++ b/lib/integrations/slack/send_on_slack_service.rb @@ -36,10 +36,23 @@ class Integrations::Slack::SendOnSlackService < Base::SendOnChannelService if conversation.identifier.present? "#{private_indicator}#{message.content}" else - "\n*Inbox:* #{message.inbox.name} (#{message.inbox.inbox_type})\n\n#{message.content}" + "#{formatted_inbox_name}#{email_subject_line}\n#{message.content}" end end + def formatted_inbox_name + "\n*Inbox:* #{message.inbox.name} (#{message.inbox.inbox_type})\n" + end + + def email_subject_line + return '' unless message.inbox.email? + + email_payload = message.content_attributes['email'] + return "*Subject:* #{email_payload['subject']}\n\n" if email_payload.present? && email_payload['subject'].present? + + '' + end + def avatar_url(sender) sender_type = sender.instance_of?(Contact) ? 'contact' : 'user' "#{ENV.fetch('FRONTEND_URL', nil)}/integrations/slack/#{sender_type}.png" diff --git a/spec/lib/integrations/slack/send_on_slack_service_spec.rb b/spec/lib/integrations/slack/send_on_slack_service_spec.rb index e9806d174..5945fd0d5 100644 --- a/spec/lib/integrations/slack/send_on_slack_service_spec.rb +++ b/spec/lib/integrations/slack/send_on_slack_service_spec.rb @@ -2,7 +2,8 @@ require 'rails_helper' describe Integrations::Slack::SendOnSlackService do let!(:contact) { create(:contact) } - let!(:conversation) { create(:conversation, contact: contact, identifier: nil) } + let(:channel_email) { create(:channel_email) } + let!(:conversation) { create(:conversation, inbox: channel_email.inbox, contact: contact, identifier: nil) } let(:account) { conversation.account } let!(:hook) { create(:integrations_hook, account: account) } let!(:message) do @@ -38,6 +39,32 @@ describe Integrations::Slack::SendOnSlackService do expect(conversation.reload.identifier).to eq '12345.6789' end + + context 'with subject line in email' do + let(:message) do + create(:message, + content_attributes: { 'email': { 'subject': 'Sample subject line' } }, + content: 'Sample Body', + account: conversation.account, + inbox: conversation.inbox, conversation: conversation) + end + + it 'creates slack message with subject line' do + inbox = conversation.inbox + + expect(slack_client).to receive(:chat_postMessage).with( + channel: hook.reference_id, + text: "\n*Inbox:* #{inbox.name} (#{inbox.inbox_type})\n*Subject:* Sample subject line\n\n\n#{message.content}", + username: "#{message.sender.name} (Contact)", + thread_ts: nil, + icon_url: anything + ).and_return(slack_message) + + builder.perform + + expect(conversation.reload.identifier).to eq '12345.6789' + end + end end context 'with identifier' do