Files
Reem-Notas/spec/models/user_spec.rb
victor 732c6daae8 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>
2026-06-15 21:47:41 -03:00

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