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:
53
README.md
53
README.md
@@ -304,6 +304,59 @@ docker-compose exec app bundle exec whenever --update-crontab
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Auditoria + Suíte de testes (15/06/2026)
|
||||
|
||||
Revisão de código + criação da suíte RSpec (o projeto tinha `rspec-rails`/`factory_bot`/`capybara` no Gemfile, mas **nenhum teste** e **nenhum `spec/`**).
|
||||
|
||||
### 🔴 Bugs corrigidos
|
||||
|
||||
**1. Erro de sintaxe em `Admin::UsuariosController`** — `toggle_ativo` tinha `entidade: \'User\'` (aspas escapadas com barra). O arquivo não carregava → qualquer acesso a `/admin/usuarios` dava 500. ✅ corrigido.
|
||||
|
||||
**2. Migration quebrava o setup do zero** — `20260610_add_fase2_fields_to_users.rb` readicionava a coluna `ativo` (já criada em `create_users`) sem guard → `PG::DuplicateColumn` num `db:migrate` limpo. ✅ guard `unless column_exists?` em `ativo` e `pin_acesso`.
|
||||
|
||||
**3. `db:seed` falhava no 2º motorista** — motoristas sem e-mail colidiam no índice único de `email` (`default ""`). ✅ seeds agora geram placeholder único (`nome.parameterize@motorista.local`).
|
||||
|
||||
**4. Dashboard ignorava o filtro de conta Gade** — `DashboardController` e `HistoricoEstimado.{atualizar!,calcular_ao_vivo}` contavam entregas de **todas** as contas. ✅ aplicado `.da_conta_gade`.
|
||||
|
||||
**5. `valor_total` com duas fontes de verdade** — o controller somava `valor_aplicado` (capturado na classificação) e o callback do model recalculava pelos **preços atuais** de `Configuracao` → divergência quando os preços mudavam. ✅ `ConsolidacaoMotorista#recalcular_valor` agora usa `valor_aplicado` (fonte única).
|
||||
|
||||
**6. Gate de finalização + classificação sem validação**
|
||||
- `todas_entregas_classificadas?` usava soma agregada com `>=`, mascarando motoristas pendentes quando outro tinha entregas de sobra. ✅ agora exige cada motorista completo (`all?`) e respeita o filtro de rotas.
|
||||
- `classificar`/`classificar_em_massa` aceitavam `tracking_id`/`motorista` arbitrários. ✅ validam que o motorista pertence à consolidação e que a entrega é elegível no período/rota.
|
||||
|
||||
**7. Coluna órfã `pin_acesso`** — nunca usada (o sistema usa `pin_code`). ✅ removida via migration.
|
||||
|
||||
**Minors:** motorista logado conseguia abrir `/dashboard` (✅ redireciona ao painel do motorista); `Date.parse(params[:data])` sem rescue dava 500 (✅ cai em `Date.current`); `arquivar!` não registrava autor (✅ novas colunas `arquivado_por`/`arquivado_em` + `belongs_to :arquivador`); `MotoristaController` + `app/views/motorista/index.html.erb` órfãos e quebrados (`current_user.name`, `where(user:)`, status inexistentes) — ✅ removidos.
|
||||
|
||||
### 🆕 Migrations adicionadas (rodar `db:migrate`)
|
||||
```
|
||||
db/migrate/20260615000001_remove_pin_acesso_from_users.rb
|
||||
db/migrate/20260615000002_add_arquivamento_to_consolidacoes.rb # arquivado_por / arquivado_em
|
||||
```
|
||||
|
||||
### ✅ Suíte de testes
|
||||
```
|
||||
.rspec
|
||||
config/database.yml # ENV-driven, com banco de teste separado (<DB_NAME>_test)
|
||||
spec/spec_helper.rb · spec/rails_helper.rb
|
||||
spec/support/{pundit,devise}.rb
|
||||
spec/factories.rb
|
||||
spec/models/{user,configuracao,consolidacao,consolidacao_motorista,consolidacao_entrega,auditoria_log}_spec.rb
|
||||
spec/policies/consolidacao_policy_spec.rb
|
||||
spec/requests/dashboard_spec.rb
|
||||
```
|
||||
|
||||
Como rodar:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
docker-compose exec app env RAILS_ENV=test bundle exec rails db:create db:migrate
|
||||
docker-compose exec app bundle exec rspec
|
||||
```
|
||||
|
||||
> Os specs que dependem da tabela read-only `db_reem_simplerout_2026` stubam `Entrega` — o banco de teste não contém essa tabela externa.
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Banco existente — referência rápida
|
||||
|
||||
| Campo | Uso |
|
||||
|
||||
Reference in New Issue
Block a user