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>
61 lines
1.8 KiB
Ruby
61 lines
1.8 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe User, type: :model do
|
|
describe 'validações de nome' do
|
|
it 'exige nome com ao menos 3 caracteres' do
|
|
user = build(:operador, nome: 'ab')
|
|
expect(user).not_to be_valid
|
|
expect(user.errors[:nome]).to be_present
|
|
end
|
|
end
|
|
|
|
describe 'e-mail e senha por papel' do
|
|
it 'exige e-mail para não-motoristas' do
|
|
expect(build(:operador).email_required?).to be true
|
|
expect(build(:operador, email: nil)).not_to be_valid
|
|
end
|
|
|
|
it 'NÃO exige e-mail nem senha para motoristas (login por PIN)' do
|
|
motorista = build(:motorista, email: nil, password: nil)
|
|
expect(motorista.email_required?).to be false
|
|
expect(motorista.password_required?).to be false
|
|
expect(motorista).to be_valid
|
|
end
|
|
end
|
|
|
|
describe 'validação de PIN (somente motoristas)' do
|
|
it 'aceita PIN de 4 dígitos numéricos' do
|
|
expect(build(:motorista, pin_code: '0420')).to be_valid
|
|
end
|
|
|
|
it 'rejeita PIN com tamanho diferente de 4' do
|
|
expect(build(:motorista, pin_code: '123')).not_to be_valid
|
|
end
|
|
|
|
it 'rejeita PIN não numérico' do
|
|
expect(build(:motorista, pin_code: '12ab')).not_to be_valid
|
|
end
|
|
|
|
it 'ignora a validação de PIN para não-motoristas' do
|
|
expect(build(:operador, pin_code: 'xyz')).to be_valid
|
|
end
|
|
end
|
|
|
|
describe 'PIN único entre motoristas' do
|
|
it 'impede dois motoristas com o mesmo PIN' do
|
|
create(:motorista, pin_code: '4242')
|
|
duplicado = build(:motorista, pin_code: '4242')
|
|
expect(duplicado).not_to be_valid
|
|
expect(duplicado.errors[:pin_code]).to be_present
|
|
end
|
|
end
|
|
|
|
describe '#regenerar_login_token!' do
|
|
it 'gera e persiste um token novo' do
|
|
motorista = create(:motorista)
|
|
expect { motorista.regenerar_login_token! }
|
|
.to change { motorista.reload.login_token }.from(nil)
|
|
end
|
|
end
|
|
end
|