Implantação da geração de mensagem de forma livre e mudança na engine de mensagem
This commit is contained in:
69
spec/services/notificacao/gatilhos_spec.rb
Normal file
69
spec/services/notificacao/gatilhos_spec.rb
Normal file
@@ -0,0 +1,69 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Notificacao::Gatilhos do
|
||||
before { allow(Notificacao::Despachante).to receive(:disparar) }
|
||||
|
||||
describe '.valor_alterado' do
|
||||
let(:consolidacao) { create(:consolidacao, status: :finalizada) }
|
||||
let(:cm) { create(:consolidacao_motorista, consolidacao: consolidacao, valor_total: 5060.0) }
|
||||
|
||||
# Em rascunho o valor muda a cada clique do wizard — avisar ali seria spam.
|
||||
it 'não dispara enquanto a consolidação é rascunho' do
|
||||
rascunho = create(:consolidacao, status: :rascunho)
|
||||
cm_rasc = create(:consolidacao_motorista, consolidacao: rascunho, valor_total: 100.0)
|
||||
|
||||
described_class.valor_alterado(rascunho, cm_rasc, anterior: 50.0)
|
||||
|
||||
expect(Notificacao::Despachante).not_to have_received(:disparar)
|
||||
end
|
||||
|
||||
it 'não dispara quando o valor não mudou' do
|
||||
described_class.valor_alterado(consolidacao, cm, anterior: 5060.0)
|
||||
expect(Notificacao::Despachante).not_to have_received(:disparar)
|
||||
end
|
||||
|
||||
it 'descreve a mudança em {{o_que_mudou}}' do
|
||||
described_class.valor_alterado(consolidacao, cm, anterior: 4900.0)
|
||||
|
||||
expect(Notificacao::Despachante).to have_received(:disparar) do |args|
|
||||
expect(args[:chave]).to eq('valor_alterado')
|
||||
expect(args[:dados]['o_que_mudou']).to eq('Valor passou de R$ 4.900,00 para R$ 5.060,00')
|
||||
expect(args[:dados]['valor']).to eq('R$ 5.060,00')
|
||||
end
|
||||
end
|
||||
|
||||
it 'não levanta quando algo dá errado — não pode travar um fechamento' do
|
||||
allow(Notificacao::Despachante).to receive(:disparar).and_raise(StandardError, 'boom')
|
||||
expect { described_class.valor_alterado(consolidacao, cm, anterior: 1.0) }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
describe '.operacao_alterada' do
|
||||
it 'monta as variáveis do gatilho' do
|
||||
described_class.operacao_alterada(operacao: 'UBS NORTE AGO 2026',
|
||||
o_que_mudou: '3 notas na operação a mais', nf: '85382')
|
||||
|
||||
expect(Notificacao::Despachante).to have_received(:disparar) do |args|
|
||||
expect(args[:chave]).to eq('operacao_alterada')
|
||||
expect(args[:dados]['operacao']).to eq('UBS NORTE AGO 2026')
|
||||
expect(args[:dados]['nf']).to eq('85382')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Toda variável que o editor anuncia precisa de par aqui: anunciada e não
|
||||
# preenchida sai vazia na mensagem, o que é pior do que não existir.
|
||||
describe 'cobertura das variáveis anunciadas no editor' do
|
||||
it 'valor_alterado preenche tudo que Variaveis oferece' do
|
||||
consolidacao = create(:consolidacao, status: :finalizada)
|
||||
cm = create(:consolidacao_motorista, consolidacao: consolidacao, valor_total: 10.0)
|
||||
|
||||
described_class.valor_alterado(consolidacao, cm, anterior: 1.0)
|
||||
|
||||
expect(Notificacao::Despachante).to have_received(:disparar) do |args|
|
||||
esperadas = Notificacao::Variaveis.nomes('valor_alterado') - ['contato'] # vem por destinatário
|
||||
expect(args[:dados].keys).to include(*esperadas)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user