Fixes location messages not appearing in conversations when sent via Twilio. Location messages were being filtered out due to empty body content and missing parameter handling. 
104 lines
2.7 KiB
Ruby
104 lines
2.7 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Webhooks::TwilioEventsJob do
|
|
subject(:job) { described_class.perform_later(params) }
|
|
|
|
let(:params) do
|
|
{
|
|
From: '+1234567890',
|
|
To: '+0987654321',
|
|
Body: 'Test message',
|
|
AccountSid: 'AC123',
|
|
SmsSid: 'SM123'
|
|
}
|
|
end
|
|
|
|
it 'queues the job' do
|
|
expect { job }.to have_enqueued_job(described_class)
|
|
.with(params)
|
|
.on_queue('low')
|
|
end
|
|
|
|
it 'calls the Twilio::IncomingMessageService' do
|
|
service = double
|
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params).and_return(service)
|
|
expect(service).to receive(:perform)
|
|
described_class.perform_now(params)
|
|
end
|
|
|
|
context 'when Body parameter or MediaUrl0 is not present' do
|
|
let(:params_without_body) do
|
|
{
|
|
From: '+1234567890',
|
|
To: '+0987654321',
|
|
AccountSid: 'AC123',
|
|
SmsSid: 'SM123'
|
|
}
|
|
end
|
|
|
|
it 'does not process the event' do
|
|
expect(Twilio::IncomingMessageService).not_to receive(:new)
|
|
described_class.perform_now(params_without_body)
|
|
end
|
|
end
|
|
|
|
context 'when Body parameter is present' do
|
|
let(:params_with_body) do
|
|
{
|
|
From: '+1234567890',
|
|
To: '+0987654321',
|
|
Body: 'Test message',
|
|
AccountSid: 'AC123',
|
|
SmsSid: 'SM123'
|
|
}
|
|
end
|
|
|
|
it 'processes the event' do
|
|
service = double
|
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_body).and_return(service)
|
|
expect(service).to receive(:perform)
|
|
described_class.perform_now(params_with_body)
|
|
end
|
|
end
|
|
|
|
context 'when MediaUrl0 parameter is present' do
|
|
let(:params_with_media) do
|
|
{
|
|
From: '+1234567890',
|
|
To: '+0987654321',
|
|
MediaUrl0: 'https://example.com/media.jpg',
|
|
AccountSid: 'AC123',
|
|
SmsSid: 'SM123'
|
|
}
|
|
end
|
|
|
|
it 'processes the event' do
|
|
service = double
|
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_media).and_return(service)
|
|
expect(service).to receive(:perform)
|
|
described_class.perform_now(params_with_media)
|
|
end
|
|
end
|
|
|
|
context 'when location message is present' do
|
|
let(:params_with_location) do
|
|
{
|
|
From: 'whatsapp:+1234567890',
|
|
To: 'whatsapp:+0987654321',
|
|
MessageType: 'location',
|
|
Latitude: '12.160894393921',
|
|
Longitude: '75.265205383301',
|
|
AccountSid: 'AC123',
|
|
SmsSid: 'SM123'
|
|
}
|
|
end
|
|
|
|
it 'processes the location message' do
|
|
service = double
|
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_location).and_return(service)
|
|
expect(service).to receive(:perform)
|
|
described_class.perform_now(params_with_location)
|
|
end
|
|
end
|
|
end
|