feat: Add conversation_created event in webhooks (#3949)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user