Files
Reem-Notas/docs/BATERIA-DE-TESTES.md

232 lines
8.6 KiB
Markdown

# Bateria de testes — Reem Notas (ambiente de teste)
Roteiro de regressão para ser executado por um agente (inclusive modelos menores)
com a skill `agent-browser`. Não é preciso conhecer o projeto: siga os casos na
ordem e preencha o relatório do final.
## Regras de segurança (leia antes de tudo)
1. **Somente leitura + interações seguras.** É PROIBIDO:
- clicar em qualquer botão que abra confirmação (`Tem certeza?`, `Rebuscar o
plano?` etc.) — se a confirmação abrir por engano, cancele;
- finalizar, arquivar, excluir ou registrar pagamento de consolidação;
- criar, editar ou excluir usuários, perfis, contatos, grupos ou eventos;
- qualquer envio de WhatsApp/notificação.
- Formulários só podem ser preenchidos nos casos em que o roteiro mandar
explicitamente (login e campos de busca).
2. **Ambiente**: `https://teste.reemtransportes.com.br` (nunca o domínio de
produção).
3. **Avisos do ambiente de teste** (não são falhas):
- Não há pagamentos registrados (`pago_em` vazio) — gráficos e tabelas de
pagamento vazios são o esperado;
- O deploy é manual: o site pode estar atrás do código do repositório. Se um
caso falhar por algo que parece "código novo que não chegou lá", registre
como `DEPLOY?` em vez de `FALHOU`.
4. Screenshots de evidência vão para o diretório de scratchpad da sessão.
## Credenciais
- **Admin (web)**: e-mail `admin@reem.com`, senha `Reem@2026!` — em
`https://teste.reemtransportes.com.br/auth/login`, aba "E-mail".
- **Motorista**: aba "PIN Motorista" da mesma tela (PIN de 4 dígitos; se nenhum
PIN de teste for fornecido na tarefa, marque o caso 8 como `PULADO`).
## Teste 0 — transversal (rodar em TODA página visitada)
Depois de abrir cada página do roteiro, sempre rode:
```bash
agent-browser errors # deve vir vazio
agent-browser network requests | grep -E " (4[0-9]{2}|5[0-9]{2})$" # deve vir vazio
```
- Qualquer erro de console JS ⇒ FALHOU (anote a mensagem).
- Qualquer request com status ≥ 400 ⇒ FALHOU (anote a URL — um asset
`*_controller-*.js` com 404 significa Stimulus quebrado na página inteira; foi
exatamente assim que o bug do preview do romaneio passou despercebido).
- Exceção: chamadas para domínios de terceiros (cloudflareinsights etc.) com
falha não reprovam o caso; registre como observação.
## Roteiro
### Caso 1 — Login por e-mail
```bash
agent-browser open https://teste.reemtransportes.com.br/auth/login
agent-browser snapshot -i # localizar refs de E-mail, Senha e Entrar
agent-browser fill @eX "admin@reem.com"
agent-browser fill @eY "Reem@2026!"
agent-browser press Enter
agent-browser wait --load networkidle
agent-browser get url
```
**PASSOU se**: a URL final é `/dashboard` (ou a home do perfil) e o Teste 0 passa.
Obs.: use `press Enter` — o clique no botão às vezes não navega no primeiro clique.
### Caso 2 — Dashboards
```bash
agent-browser open https://teste.reemtransportes.com.br/dashboard
agent-browser eval "document.querySelectorAll('canvas').length" # gráficos Chart.js
agent-browser eval "document.documentElement.scrollWidth <= window.innerWidth" # sem overflow horizontal
agent-browser screenshot dashboard.png
agent-browser open https://teste.reemtransportes.com.br/dashboard/operacoes
# repetir os três comandos acima (operacoes.png)
```
**PASSOU se**: as duas páginas carregam, há pelo menos 1 `canvas` em cada, sem
overflow horizontal, Teste 0 limpo.
**Versão mobile** (obrigatória no dashboard):
```bash
agent-browser set device "iPhone 16"
agent-browser open https://teste.reemtransportes.com.br/dashboard
agent-browser eval "document.documentElement.scrollWidth <= window.innerWidth"
agent-browser screenshot dashboard-mobile.png
agent-browser set viewport 1280 800 # voltar ao desktop
```
**PASSOU se**: sem scroll horizontal no mobile (regra do projeto: nada de tabela
que exija zoom).
### Caso 3 — Consolidações (abas e filtros)
```bash
agent-browser open "https://teste.reemtransportes.com.br/consolidacoes?visao=lista"
agent-browser snapshot -i | head -40
agent-browser open "https://teste.reemtransportes.com.br/consolidacoes?visao=motoristas"
agent-browser get url
```
**PASSOU se**: as duas visões abrem sem erro; ao trocar de visão os filtros da URL
se mantêm (as visões são abas da MESMA tela, não telas separadas); Teste 0 limpo.
### Caso 4 — Romaneios (inclui o preview)
```bash
agent-browser open https://teste.reemtransportes.com.br/admin/romaneios
agent-browser snapshot -i | head -30 # lista de romaneios
# abrir o primeiro romaneio da lista (link do item):
agent-browser click @eX
agent-browser wait --load networkidle
```
Na tela do romaneio:
```bash
# 4a. O modal de prévia NÃO pode estar visível no carregamento:
agent-browser eval "const o=document.querySelector('[data-romaneio-target=overlay]'); o?getComputedStyle(o).display:'sem overlay'"
# esperado: "none"
# 4b. Abrir a prévia:
agent-browser snapshot -i | grep -i "prévia" # achar o botão "Ver prévia do PDF"
agent-browser click @eY
agent-browser eval "const o=document.querySelector('[data-romaneio-target=overlay]'); getComputedStyle(o).display + ' src:' + (document.querySelector('iframe[data-romaneio-target=preview]')?.src||'')"
# esperado: "flex src:https://.../pdf?veiculo=..."
# 4c. Fechar com Esc:
agent-browser press Escape
agent-browser eval "getComputedStyle(document.querySelector('[data-romaneio-target=overlay]')).display"
# esperado: "none"
# 4d. PDF responde:
agent-browser eval "fetch(document.querySelector('a[href*=pdf]').href).then(r=>r.status)"
# esperado: 200
```
**PASSOU se**: 4a="none", 4b="flex" com src preenchido, 4c="none", 4d=200,
Teste 0 limpo. **NÃO** clicar em "Reimportar plano" (tem confirmação).
### Caso 4e — Vínculo manual da operação (só leitura)
O bloco "Operação do mês" tem que aparecer em todo romaneio, e o formulário
precisa funcionar **sem JavaScript** (é `<details>` nativo + form comum):
```bash
agent-browser eval "(()=>{const d=[...document.querySelectorAll('details')].find(x=>x.querySelector('select[name=operacao_tabela]')); return d ? 'existe | aberto:'+d.open+' | opcoes:'+d.querySelectorAll('option').length : 'AUSENTE';})()"
```
⚠️ Procure pelo `select[name=operacao_tabela]`, **não** pelo texto "Operação do
mês": esse rótulo fica FORA do `<details>` e é renderizado em maiúsculas pelo
CSS, então busca por texto dá falso negativo (já aconteceu num diagnóstico).
**PASSOU se**: o bloco existe; num romaneio **sem** operação ele vem `aberto:true`
(a pendência fica à vista) e num **com** operação vem `aberto:false`; a lista tem
mais de uma `option`.
⚠️ **NÃO enviar o formulário** — vincular altera dados do romaneio. Só conferir
que o controle está lá e abre.
### Caso 5 — Planilha SimpliRoute
```bash
agent-browser open https://teste.reemtransportes.com.br/admin/planilha_simpli_route
agent-browser snapshot -i | head -20
```
**PASSOU se**: a tela abre com a lista de operações disponíveis, Teste 0 limpo.
(Não é preciso baixar o arquivo.)
### Caso 6 — Telas de admin
Abrir cada URL e rodar o Teste 0:
```
/admin/usuarios
/admin/perfis
/admin/configuracoes
/admin/auditoria_logs
/admin/edicao_lancamento
```
**PASSOU se**: todas abrem com conteúdo (título + tabela/cards), sem erro.
**NÃO** editar nada nessas telas.
### Caso 7 — Notificações
Abrir cada URL e rodar o Teste 0:
```
/admin/contatos
/admin/grupos
/admin/eventos
/admin/envios
```
**PASSOU se**: todas abrem, sem erro. **NÃO** disparar envio nem mexer no
WhatsApp/sessão.
### Caso 8 — Login PIN do motorista (mobile)
Somente se um PIN de teste foi fornecido na tarefa; senão marcar `PULADO`.
```bash
agent-browser set device "iPhone 16"
agent-browser open https://teste.reemtransportes.com.br/auth/login
# clicar na aba "PIN Motorista", digitar o PIN, entrar
```
**PASSOU se**: cai no dashboard do motorista, valores legíveis sem zoom,
Teste 0 limpo. Ao final: `agent-browser set viewport 1280 800`.
## Relatório final (obrigatório)
Terminar a execução com uma tabela e a lista de falhas:
| Caso | Resultado | Evidência |
|------|-----------|-----------|
| 0 (por página) | PASSOU/FALHOU | página + erro |
| 1 Login | PASSOU/FALHOU/DEPLOY?/PULADO | screenshot |
| 2 Dashboards | … | … |
| 3 Consolidações | … | … |
| 4 Romaneios/preview | … | … |
| 5 Planilha | … | … |
| 6 Admin | … | … |
| 7 Notificações | … | … |
| 8 PIN motorista | … | … |
Depois da tabela, listar **somente as falhas**, cada uma com: URL, o que era
esperado, o que aconteceu (mensagem de erro/console) e o caminho do screenshot.
Se tudo passou, dizer isso em uma linha. Encerrar com `agent-browser close`.