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