Auditoria de bugs + suíte de testes RSpec

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>
This commit is contained in:
2026-06-15 21:47:41 -03:00
parent 146aa3e762
commit 732c6daae8
28 changed files with 656 additions and 185 deletions

View File

@@ -0,0 +1,49 @@
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