60 lines
2.2 KiB
Ruby
60 lines
2.2 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe DetectarMudancasOperacaoJob do
|
|
let(:tabela) { 'gade_entregas_teste' }
|
|
|
|
before do
|
|
create(:evento_notificacao, gatilho: 'operacao_alterada', chave: 'operacao_alterada')
|
|
allow(Operacao).to receive(:nomes_validos).and_return([tabela])
|
|
allow(Operacao).to receive(:label).with(tabela).and_return('TESTE')
|
|
allow(Notificacao::Gatilhos).to receive(:operacao_alterada)
|
|
end
|
|
|
|
def com_numeros(total:, entregues:, nao_entregues:, pendentes:)
|
|
allow(Analytics::OperacaoMetricas).to receive(:new).and_return(
|
|
instance_double(Analytics::OperacaoMetricas, total: total, sucesso: entregues,
|
|
recusas: nao_entregues, pendentes: pendentes)
|
|
)
|
|
end
|
|
|
|
# Sem retrato anterior toda operação pareceria "nova", e o primeiro deploy
|
|
# dispararia uma mensagem por operação cadastrada.
|
|
it 'primeira execução só grava o retrato, sem avisar' do
|
|
com_numeros(total: 100, entregues: 90, nao_entregues: 8, pendentes: 2)
|
|
|
|
expect { described_class.perform_now }.to change(OperacaoSnapshot, :count).by(1)
|
|
expect(Notificacao::Gatilhos).not_to have_received(:operacao_alterada)
|
|
end
|
|
|
|
it 'não avisa quando nada mudou' do
|
|
com_numeros(total: 100, entregues: 90, nao_entregues: 8, pendentes: 2)
|
|
described_class.perform_now
|
|
|
|
described_class.perform_now
|
|
|
|
expect(Notificacao::Gatilhos).not_to have_received(:operacao_alterada)
|
|
end
|
|
|
|
it 'descreve o que mudou entre os dois retratos' do
|
|
com_numeros(total: 100, entregues: 90, nao_entregues: 8, pendentes: 2)
|
|
described_class.perform_now
|
|
|
|
com_numeros(total: 103, entregues: 92, nao_entregues: 8, pendentes: 3)
|
|
described_class.perform_now
|
|
|
|
expect(Notificacao::Gatilhos).to have_received(:operacao_alterada) do |args|
|
|
expect(args[:operacao]).to eq('TESTE')
|
|
expect(args[:o_que_mudou]).to include('3 notas na operação a mais')
|
|
expect(args[:o_que_mudou]).to include('2 entregues a mais')
|
|
end
|
|
expect(OperacaoSnapshot.find_by(tabela: tabela).total_notas).to eq(103)
|
|
end
|
|
|
|
it 'não varre nada quando nenhum evento usa esse gatilho' do
|
|
EventoNotificacao.where(gatilho: 'operacao_alterada').destroy_all
|
|
expect(Analytics::OperacaoMetricas).not_to receive(:new)
|
|
|
|
described_class.perform_now
|
|
end
|
|
end
|