Files
Reem-Notas/spec/services/notificacao/whatsapp_spec.rb

59 lines
2.4 KiB
Ruby

require 'rails_helper'
RSpec.describe Notificacao::Whatsapp do
let(:config) { ConfiguracaoNotificacao.new(whatsapp_ativo: true) }
it 'recusa número que não dá para normalizar, sem chamar provedor nenhum' do
expect(described_class).not_to receive(:via_baileys)
resposta = described_class.enviar(para: '123', texto: 'oi', config: config)
expect(resposta).not_to be_ok
expect(resposta.erro).to include('inválido')
end
it 'usa a ponte Baileys quando o provedor é baileys' do
config.whatsapp_provedor = 'baileys'
ponte = instance_double(Notificacao::ClienteWhatsapp,
enviar: Notificacao::ClienteWhatsapp::Resposta.new(ok: true))
allow(Notificacao::ClienteWhatsapp).to receive(:padrao).and_return(ponte)
expect(described_class.enviar(para: '(11) 92005-1157', texto: 'oi', config: config)).to be_ok
expect(ponte).to have_received(:enviar).with(para: '+5511920051157', texto: 'oi')
end
it 'devolve erro em vez de levantar quando o Twilio falha' do
config.whatsapp_provedor = 'twilio'
allow(config).to receive(:credenciais_whatsapp)
.and_return({ sid: 'AC1', token: 'x', from: 'whatsapp:+5511000000000' })
allow(Notificacao::ClienteTwilio).to receive(:montar).and_raise(StandardError, 'rede fora')
resposta = described_class.enviar(para: '(11) 92005-1157', texto: 'oi', config: config)
expect(resposta).not_to be_ok
expect(resposta.erro).to include('rede fora')
end
end
RSpec.describe Notificacao::Whatsapp, 'grupo do WhatsApp' do
let(:jid) { '120363012345678901@g.us' }
it 'manda o JID cru para a ponte, sem tentar normalizar como telefone' do
config = ConfiguracaoNotificacao.new(whatsapp_ativo: true, whatsapp_provedor: 'baileys')
ponte = instance_double(Notificacao::ClienteWhatsapp,
enviar: Notificacao::ClienteWhatsapp::Resposta.new(ok: true))
allow(Notificacao::ClienteWhatsapp).to receive(:padrao).and_return(ponte)
expect(described_class.enviar(para: jid, texto: 'oi', config: config)).to be_ok
expect(ponte).to have_received(:enviar).with(para: jid, texto: 'oi')
end
it 'recusa com mensagem clara quando o provedor é Twilio' do
config = ConfiguracaoNotificacao.new(whatsapp_ativo: true, whatsapp_provedor: 'twilio')
resposta = described_class.enviar(para: jid, texto: 'oi', config: config)
expect(resposta).not_to be_ok
expect(resposta.erro).to include('grupo')
end
end