mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-01 03:27:52 +00:00
74 lines
2.6 KiB
Ruby
74 lines
2.6 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe Webhooks::Trigger do
|
|
subject(:trigger) { described_class }
|
|
|
|
let!(:account) { create(:account) }
|
|
let!(:inbox) { create(:inbox, account: account) }
|
|
let!(:conversation) { create(:conversation, inbox: inbox) }
|
|
let!(:message) { create(:message, account: account, inbox: inbox, conversation: conversation) }
|
|
|
|
let!(:webhook_type) { :api_inbox_webhook }
|
|
let!(:url) { 'https://test.com' }
|
|
|
|
describe '#execute' do
|
|
it 'triggers webhook' do
|
|
payload = { hello: :hello }
|
|
|
|
expect(RestClient::Request).to receive(:execute)
|
|
.with(
|
|
method: :post,
|
|
url: url,
|
|
payload: payload.to_json,
|
|
headers: { content_type: :json, accept: :json },
|
|
timeout: 5
|
|
).once
|
|
trigger.execute(url, payload, webhook_type)
|
|
end
|
|
|
|
it 'updates message status if webhook fails for message-created event' do
|
|
payload = { event: 'message_created', conversation: { id: conversation.id }, id: message.id }
|
|
|
|
expect(RestClient::Request).to receive(:execute)
|
|
.with(
|
|
method: :post,
|
|
url: url,
|
|
payload: payload.to_json,
|
|
headers: { content_type: :json, accept: :json },
|
|
timeout: 5
|
|
).and_raise(RestClient::ExceptionWithResponse.new('error', 500)).once
|
|
|
|
expect { trigger.execute(url, payload, webhook_type) }.to change { message.reload.status }.from('sent').to('failed')
|
|
end
|
|
|
|
it 'updates message status if webhook fails for message-updated event' do
|
|
payload = { event: 'message_updated', conversation: { id: conversation.id }, id: message.id }
|
|
|
|
expect(RestClient::Request).to receive(:execute)
|
|
.with(
|
|
method: :post,
|
|
url: url,
|
|
payload: payload.to_json,
|
|
headers: { content_type: :json, accept: :json },
|
|
timeout: 5
|
|
).and_raise(RestClient::ExceptionWithResponse.new('error', 500)).once
|
|
expect { trigger.execute(url, payload, webhook_type) }.to change { message.reload.status }.from('sent').to('failed')
|
|
end
|
|
end
|
|
|
|
it 'does not update message status if webhook fails for other events' do
|
|
payload = { event: 'conversation_created', conversation: { id: conversation.id }, id: message.id }
|
|
|
|
expect(RestClient::Request).to receive(:execute)
|
|
.with(
|
|
method: :post,
|
|
url: url,
|
|
payload: payload.to_json,
|
|
headers: { content_type: :json, accept: :json },
|
|
timeout: 5
|
|
).and_raise(RestClient::ExceptionWithResponse.new('error', 500)).once
|
|
|
|
expect { trigger.execute(url, payload, webhook_type) }.not_to(change { message.reload.status })
|
|
end
|
|
end
|