* fix: ignore action events * feat(zapi): allow updating instance ID * feat: handle `chatLid` field * test: break down handler specs into separate files * feat: update send_message method to use recipient_id logic for zapi provider * fix: use identifier instead of source_id for zapi * test: fix specs * feat: prioritize senderName over chatName for contact naming in received callback
45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe Whatsapp::ZapiHandlers::DeliveryCallback do
|
|
let!(:whatsapp_channel) do
|
|
create(:channel_whatsapp, provider: 'zapi', validate_provider_config: false)
|
|
end
|
|
let(:inbox) { whatsapp_channel.inbox }
|
|
let(:service) { Whatsapp::IncomingMessageZapiService.new(inbox: inbox, params: params) }
|
|
|
|
describe '#process_delivery_callback' do
|
|
let(:message) { create(:message, inbox: inbox, source_id: 'msg_456') }
|
|
let(:params) do
|
|
{
|
|
type: 'DeliveryCallback',
|
|
messageId: message.source_id,
|
|
momment: Time.current.to_i * 1000
|
|
}
|
|
end
|
|
|
|
it 'updates message status to delivered' do
|
|
service.perform
|
|
|
|
expect(message.reload.status).to eq('delivered')
|
|
expect(message.external_created_at).to eq(params[:momment] / 1000)
|
|
end
|
|
|
|
it 'updates message status to failed when error is present' do
|
|
params[:error] = 'Message delivery failed'
|
|
|
|
service.perform
|
|
|
|
expect(message.reload.status).to eq('failed')
|
|
expect(message.external_error).to eq('Message delivery failed')
|
|
end
|
|
|
|
it 'does nothing when message is not found' do
|
|
params[:messageId] = 'non_existent_message'
|
|
|
|
expect do
|
|
service.perform
|
|
end.not_to change(message, :status)
|
|
end
|
|
end
|
|
end
|