Grande correção do filtro de veiculos na area de consolidação

This commit is contained in:
2026-07-03 09:58:59 -03:00
parent 83310e9e66
commit eca6df39eb
17 changed files with 681 additions and 41 deletions

View File

@@ -232,4 +232,85 @@ RSpec.describe Consolidacao, type: :model do
expect(Consolidacao.arquivadas).to include(arquivada)
end
end
describe '#sincronizar_veiculos! (via recalcular_motorista!)' do
let(:consolidacao) { create(:consolidacao) }
before { create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'A') }
it 'cria uma linha por veículo classificado, somando o valor do veículo' do
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_1', tipo: :entrega_normal, valor_aplicado: 15)
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_1', tipo: :bonus, valor_aplicado: 10)
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_2', tipo: :entrega_normal, valor_aplicado: 20)
consolidacao.recalcular_motorista!('A')
veics = consolidacao.consolidacao_veiculos.where(motorista_nome: 'A').order(:vehicle)
expect(veics.map(&:vehicle)).to eq(%w[GADE_1 GADE_2])
expect(veics.find_by(vehicle: 'GADE_1').valor_total).to eq(25)
expect(veics.find_by(vehicle: 'GADE_2').valor_total).to eq(20)
end
it 'remove o veículo aberto que ficou sem pilares, mas preserva o fechado' do
e1 = create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_1', valor_aplicado: 15)
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_2', valor_aplicado: 20)
consolidacao.recalcular_motorista!('A')
consolidacao.consolidacao_veiculos.find_by(vehicle: 'GADE_2').fechar!(create(:gerente))
e1.destroy
consolidacao.recalcular_motorista!('A')
veics = consolidacao.consolidacao_veiculos.where(motorista_nome: 'A')
expect(veics.pluck(:vehicle)).to contain_exactly('GADE_2') # GADE_1 (aberto e vazio) removido
end
end
describe 'gate: veículo arquivado libera a finalização' do
let(:consolidacao) { create(:consolidacao) }
before { create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'A') }
it 'desconta as elegíveis do veículo arquivado' do
allow(consolidacao).to receive(:entregas_elegiveis_count).with('A').and_return(3)
allow(consolidacao).to receive(:entregas_elegiveis_count_veiculo).with('A', 'GADE_2').and_return(1)
# 2 classificadas (GADE_1). Falta 1 (GADE_2) => incompleto.
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_1', tracking_id: 'T1')
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_1', tracking_id: 'T2', tipo: :bonus)
expect(consolidacao.motorista_completo?('A')).to be false
# Arquiva GADE_2 (o carro sem classificar): total cai p/ 2 => completo.
cv = consolidacao.consolidacao_veiculos.create!(motorista_nome: 'A', vehicle: 'GADE_2')
cv.arquivar!(create(:gerente))
expect(consolidacao.motorista_completo?('A')).to be true
end
end
describe '#finalizar! fecha os veículos ainda abertos' do
let(:consolidacao) { create(:consolidacao) }
let(:gerente) { create(:gerente) }
before { create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'A') }
it 'consolida os veículos abertos ao finalizar' do
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A',
vehicle: 'GADE_1', valor_aplicado: 15)
consolidacao.recalcular_motorista!('A')
cv = consolidacao.consolidacao_veiculos.find_by(vehicle: 'GADE_1')
expect(cv).not_to be_fechado
allow(consolidacao).to receive(:todas_entregas_classificadas?).and_return(true)
consolidacao.finalizar!(gerente)
expect(cv.reload).to be_fechado
expect(cv.fechado_por).to eq(gerente.id)
end
end
end