Implantação da geração de mensagem de forma livre e mudança na engine de mensagem
This commit is contained in:
43
spec/models/contato_spec.rb
Normal file
43
spec/models/contato_spec.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Contato do
|
||||
it 'normaliza o telefone digitado para E.164 na gravação' do
|
||||
# O ADM digita com máscara; mandar esse texto cru para o provedor devolve
|
||||
# erro de destino inválido que o rescue do envio esconderia.
|
||||
%w[(11)92005-1157 11920051157 011\ 92005\ 1157 +5511920051157].each do |digitado|
|
||||
contato = build(:contato, telefone: digitado)
|
||||
expect(contato).to be_valid
|
||||
expect(contato.telefone).to eq('+5511920051157')
|
||||
end
|
||||
end
|
||||
|
||||
it 'exige ao menos um canal' do
|
||||
contato = build(:contato, telefone: nil, email: nil)
|
||||
expect(contato).not_to be_valid
|
||||
expect(contato.errors.full_messages.join).to include('WhatsApp ou um e-mail')
|
||||
end
|
||||
|
||||
it 'aceita contato só de e-mail' do
|
||||
expect(build(:contato, telefone: nil, email: 'diretoria@reem.com')).to be_valid
|
||||
end
|
||||
|
||||
it 'rejeita telefone que não dá para normalizar, devolvendo o valor digitado' do
|
||||
contato = build(:contato, telefone: '123')
|
||||
expect(contato).not_to be_valid
|
||||
expect(contato.errors[:telefone].join).to include('número brasileiro')
|
||||
# O ADM precisa ver o que digitou para corrigir.
|
||||
expect(contato.telefone).to eq('123')
|
||||
end
|
||||
|
||||
describe '.com_canal' do
|
||||
let!(:so_zap) { create(:contato, telefone: '11 92005-1157', email: nil) }
|
||||
let!(:so_email) { create(:contato, telefone: nil, email: 'a@b.com') }
|
||||
let!(:ambos) { create(:contato, telefone: '11 93005-1157', email: 'c@d.com') }
|
||||
|
||||
it 'filtra por quem tem o canal' do
|
||||
expect(Contato.com_canal('whatsapp')).to contain_exactly(so_zap, ambos)
|
||||
expect(Contato.com_canal('email')).to contain_exactly(so_email, ambos)
|
||||
expect(Contato.com_canal('ambos')).to contain_exactly(so_zap, so_email, ambos)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user