Correções: - Erro de sintaxe em Admin::Usuarios#toggle_ativo (entidade: \'User\') que derrubava /admin/usuarios - Migration fase2 readicionava coluna `ativo` sem guard (db:migrate do zero quebrava); db:seed colidia no índice único de email para motoristas - Dashboard e HistoricoEstimado agora aplicam .da_conta_gade - ConsolidacaoMotorista#recalcular_valor usa valor_aplicado (fonte única) - Gate de finalização por motorista (antes soma agregada com >=) e validação de elegibilidade em classificar/classificar_em_massa - Remove coluna órfã pin_acesso; registra autor do arquivamento (arquivado_por/arquivado_em + belongs_to :arquivador) - Dashboard redireciona motorista; Date.parse tolerante - Remove MotoristaController + view órfãos (não roteados e quebrados) Testes: infra RSpec + factories + specs de models, policy e request. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
2.1 KiB
Ruby
50 lines
2.1 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe ConsolidacaoMotorista, type: :model do
|
|
describe 'validações' do
|
|
it 'exige motorista_nome' do
|
|
expect(build(:consolidacao_motorista, motorista_nome: nil)).not_to be_valid
|
|
end
|
|
|
|
it 'não permite o mesmo motorista duas vezes na consolidação' do
|
|
consolidacao = create(:consolidacao)
|
|
create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'Joao')
|
|
dup = build(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'Joao')
|
|
expect(dup).not_to be_valid
|
|
end
|
|
end
|
|
|
|
describe '#recalcular_valor (fonte única: valor_aplicado)' do
|
|
let(:consolidacao) { create(:consolidacao) }
|
|
|
|
before do
|
|
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao',
|
|
tipo: :entrega_normal, valor_aplicado: 15)
|
|
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao',
|
|
tipo: :bonus, valor_aplicado: 10)
|
|
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao',
|
|
tipo: :desconto, valor_aplicado: 5)
|
|
end
|
|
|
|
it 'soma usando valor_aplicado e trata desconto como negativo' do
|
|
cm = create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'Joao')
|
|
# 15 + 10 - 5 = 20
|
|
expect(cm.valor_total).to eq(20)
|
|
end
|
|
|
|
it 'NÃO recalcula pelos preços atuais de Configuracao' do
|
|
# Mesmo que os preços de Configuracao mudem, o total usa o valor_aplicado capturado.
|
|
allow(Configuracao).to receive(:preco_entrega).and_return(999)
|
|
cm = create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'Joao')
|
|
expect(cm.valor_total).to eq(20)
|
|
end
|
|
|
|
it 'considera apenas as entregas do próprio motorista' do
|
|
create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Maria',
|
|
tipo: :entrega_normal, valor_aplicado: 100)
|
|
cm = create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'Joao')
|
|
expect(cm.valor_total).to eq(20)
|
|
end
|
|
end
|
|
end
|