iachat/spec/services/whatsapp/zapi_handlers/delivery_callback_spec.rb
Gabriel Jablonski 8ff5834ee8
fix(zapi): support for LID-only conversations (#123)
* 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
2025-10-23 10:12:38 -03:00

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