feat: Add conversation_created event in webhooks (#3949)

This commit is contained in:
Muhsin Keloth
2022-02-14 09:44:25 +05:30
committed by GitHub
parent ba7f387dde
commit 2da618bd5e
2 changed files with 51 additions and 3 deletions

View File

@@ -22,6 +22,13 @@ class WebhookListener < BaseListener
deliver_webhook_payloads(payload, inbox) deliver_webhook_payloads(payload, inbox)
end end
def conversation_created(event)
conversation = extract_conversation_and_account(event)[0]
inbox = conversation.inbox
payload = conversation.webhook_data.merge(event: __method__.to_s)
deliver_webhook_payloads(payload, inbox)
end
def message_created(event) def message_created(event)
message = extract_message_and_account(event)[0] message = extract_message_and_account(event)[0]
inbox = message.inbox inbox = message.inbox

View File

@@ -10,7 +10,8 @@ describe WebhookListener do
create(:message, message_type: 'outgoing', create(:message, message_type: 'outgoing',
account: account, inbox: inbox, conversation: conversation) account: account, inbox: inbox, conversation: conversation)
end end
let!(:event) { Events::Base.new(event_name, Time.zone.now, message: message) } let!(:message_created_event) { Events::Base.new(event_name, Time.zone.now, message: message) }
let!(:conversation_created_event) { Events::Base.new(event_name, Time.zone.now, conversation: conversation) }
describe '#message_created' do describe '#message_created' do
let(:event_name) { :'message.created' } let(:event_name) { :'message.created' }
@@ -18,7 +19,7 @@ describe WebhookListener do
context 'when webhook is not configured' do context 'when webhook is not configured' do
it 'does not trigger webhook' do it 'does not trigger webhook' do
expect(WebhookJob).to receive(:perform_later).exactly(0).times expect(WebhookJob).to receive(:perform_later).exactly(0).times
listener.message_created(event) listener.message_created(message_created_event)
end end
end end
@@ -26,7 +27,7 @@ describe WebhookListener do
it 'triggers webhook' do it 'triggers webhook' do
webhook = create(:webhook, inbox: inbox, account: account) webhook = create(:webhook, inbox: inbox, account: account)
expect(WebhookJob).to receive(:perform_later).with(webhook.url, message.webhook_data.merge(event: 'message_created')).once expect(WebhookJob).to receive(:perform_later).with(webhook.url, message.webhook_data.merge(event: 'message_created')).once
listener.message_created(event) listener.message_created(message_created_event)
end end
end end
@@ -64,4 +65,44 @@ describe WebhookListener do
end end
end end
end end
describe '#conversation_created' do
let(:event_name) { :'conversation.created' }
context 'when webhook is not configured' do
it 'does not trigger webhook' do
expect(WebhookJob).to receive(:perform_later).exactly(0).times
listener.conversation_created(conversation_created_event)
end
end
context 'when webhook is configured' do
it 'triggers webhook' do
webhook = create(:webhook, inbox: inbox, account: account)
expect(WebhookJob).to receive(:perform_later).with(webhook.url, conversation.webhook_data.merge(event: 'conversation_created')).once
listener.conversation_created(conversation_created_event)
end
end
context 'when inbox is an API Channel' do
it 'triggers webhook if webhook_url is present' do
channel_api = create(:channel_api, account: account)
api_inbox = channel_api.inbox
api_conversation = create(:conversation, account: account, inbox: api_inbox, assignee: user)
api_event = Events::Base.new(event_name, Time.zone.now, conversation: api_conversation)
expect(WebhookJob).to receive(:perform_later).with(channel_api.webhook_url,
api_conversation.webhook_data.merge(event: 'conversation_created')).once
listener.conversation_created(api_event)
end
it 'does not trigger webhook if webhook_url is not present' do
channel_api = create(:channel_api, webhook_url: nil, account: account)
api_inbox = channel_api.inbox
api_conversation = create(:conversation, account: account, inbox: api_inbox, assignee: user)
api_event = Events::Base.new(event_name, Time.zone.now, conversation: api_conversation)
expect(WebhookJob).not_to receive(:perform_later)
listener.conversation_created(api_event)
end
end
end
end end