chore: Webhook event data improvements (#4317)
This commit is contained in:
@@ -105,4 +105,80 @@ describe WebhookListener do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#conversation_resolved' do
|
||||
let!(:conversation_resolved_event) do
|
||||
Events::Base.new(event_name, Time.zone.now, conversation: conversation.reload, changed_attributes: { status: [:open, :resolved] })
|
||||
end
|
||||
let(:event_name) { :'conversation.resolved' }
|
||||
|
||||
context 'when webhook is not configured' do
|
||||
it 'does not trigger webhook' do
|
||||
expect(WebhookJob).to receive(:perform_later).exactly(0).times
|
||||
listener.conversation_resolved(conversation_resolved_event)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when webhook is configured' do
|
||||
it 'triggers webhook' do
|
||||
webhook = create(:webhook, inbox: inbox, account: account)
|
||||
|
||||
conversation.update(status: :resolved)
|
||||
|
||||
expect(WebhookJob).to receive(:perform_later).with(webhook.url,
|
||||
conversation.webhook_data.merge(event: 'conversation_resolved',
|
||||
changed_attributes: [{ status: {
|
||||
current_value: :resolved, previous_value: :open
|
||||
} }])).once
|
||||
|
||||
listener.conversation_resolved(conversation_resolved_event)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#conversation_updated' do
|
||||
let(:custom_attributes) { { test: nil } }
|
||||
let!(:conversation_updated_event) do
|
||||
Events::Base.new(
|
||||
event_name, Time.zone.now,
|
||||
conversation: conversation.reload,
|
||||
changed_attributes: {
|
||||
custom_attributes: [{ test: nil }, { test: 'testing custom attri webhook' }]
|
||||
}
|
||||
)
|
||||
end
|
||||
let(:event_name) { :'conversation.updated' }
|
||||
|
||||
context 'when webhook is not configured' do
|
||||
it 'does not trigger webhook' do
|
||||
expect(WebhookJob).to receive(:perform_later).exactly(0).times
|
||||
listener.conversation_updated(conversation_updated_event)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when webhook is configured' do
|
||||
it 'triggers webhook' do
|
||||
webhook = create(:webhook, inbox: inbox, account: account)
|
||||
|
||||
conversation.update(custom_attributes: { test: 'testing custom attri webhook' })
|
||||
|
||||
expect(WebhookJob).to receive(:perform_later).with(
|
||||
webhook.url,
|
||||
conversation.webhook_data.merge(
|
||||
event: 'conversation_updated',
|
||||
changed_attributes: [
|
||||
{
|
||||
custom_attributes: {
|
||||
previous_value: { test: nil },
|
||||
current_value: { test: 'testing custom attri webhook' }
|
||||
}
|
||||
}
|
||||
]
|
||||
)
|
||||
).once
|
||||
|
||||
listener.conversation_updated(conversation_updated_event)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -54,7 +54,8 @@ RSpec.describe Conversation, type: :model do
|
||||
it 'runs after_create callbacks' do
|
||||
# send_events
|
||||
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
|
||||
.with(described_class::CONVERSATION_CREATED, kind_of(Time), conversation: conversation, notifiable_assignee_change: false)
|
||||
.with(described_class::CONVERSATION_CREATED, kind_of(Time), conversation: conversation, notifiable_assignee_change: false,
|
||||
changed_attributes: nil)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -115,14 +116,21 @@ RSpec.describe Conversation, type: :model do
|
||||
assignee: new_assignee,
|
||||
label_list: [label.title]
|
||||
)
|
||||
status_change = conversation.status_change
|
||||
changed_attributes = conversation.previous_changes
|
||||
|
||||
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
|
||||
.with(described_class::CONVERSATION_RESOLVED, kind_of(Time), conversation: conversation, notifiable_assignee_change: true)
|
||||
.with(described_class::CONVERSATION_RESOLVED, kind_of(Time), conversation: conversation, notifiable_assignee_change: true,
|
||||
changed_attributes: status_change)
|
||||
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
|
||||
.with(described_class::CONVERSATION_READ, kind_of(Time), conversation: conversation, notifiable_assignee_change: true)
|
||||
.with(described_class::CONVERSATION_READ, kind_of(Time), conversation: conversation, notifiable_assignee_change: true,
|
||||
changed_attributes: nil)
|
||||
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
|
||||
.with(described_class::ASSIGNEE_CHANGED, kind_of(Time), conversation: conversation, notifiable_assignee_change: true)
|
||||
.with(described_class::ASSIGNEE_CHANGED, kind_of(Time), conversation: conversation, notifiable_assignee_change: true,
|
||||
changed_attributes: nil)
|
||||
expect(Rails.configuration.dispatcher).to have_received(:dispatch)
|
||||
.with(described_class::CONVERSATION_UPDATED, kind_of(Time), conversation: conversation, notifiable_assignee_change: true)
|
||||
.with(described_class::CONVERSATION_UPDATED, kind_of(Time), conversation: conversation, notifiable_assignee_change: true,
|
||||
changed_attributes: changed_attributes)
|
||||
end
|
||||
|
||||
it 'will not run conversation_updated event for empty updates' do
|
||||
|
||||
Reference in New Issue
Block a user