, correção para gerara prévia do romaneio

This commit is contained in:
2026-08-28 12:00:53 -03:00
parent 94b2e5a0a5
commit b690dfb54c
6 changed files with 149 additions and 112 deletions

View File

@@ -115,29 +115,33 @@ agent-browser wait --load networkidle
Na tela do romaneio:
A prévia é um `<details>` nativo — abre e fecha **sem JavaScript**, de propósito
(quando os assets caem, ela precisa continuar funcionando):
```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"
# 4a. Fechada ao carregar, e o PDF ainda NÃO foi buscado (iframe é loading=lazy):
agent-browser eval "(()=>{const d=document.querySelector('details[data-romaneio-target=overlay]'); return d ? 'aberto:'+d.open : 'PREVIA AUSENTE';})()"
# esperado: "aberto:false"
# 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=..."
# 4b. Abrir e conferir que o iframe aponta para o PDF:
agent-browser eval "document.querySelector('details[data-romaneio-target=overlay] summary').click()"
agent-browser eval "(()=>{const d=document.querySelector('details[data-romaneio-target=overlay]'); const f=d.querySelector('iframe'); return 'aberto:'+d.open+' src:'+(f?.getAttribute('src')||'sem src');})()"
# esperado: "aberto:true src:/admin/romaneios/<id>/pdf?veiculo=..."
# 4c. Fechar com Esc:
agent-browser press Escape
agent-browser eval "getComputedStyle(document.querySelector('[data-romaneio-target=overlay]')).display"
# esperado: "none"
# 4c. Fechar de novo:
agent-browser eval "document.querySelector('details[data-romaneio-target=overlay] summary').click()"
# 4d. PDF responde:
agent-browser eval "fetch(document.querySelector('a[href*=pdf]').href).then(r=>r.status)"
# esperado: 200
# 4d. O PDF responde e é PDF de verdade (não a página de login):
agent-browser eval "(async()=>{const r=await fetch(document.querySelector('details[data-romaneio-target=overlay] iframe').src); const b=await r.blob(); return r.status+' '+b.type+' '+Math.round(b.size/1024)+'KB';})()"
# esperado: "200 application/pdf <N>KB"
```
**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).
**PASSOU se**: 4a fechada, 4b abre com src do PDF, 4c fecha, 4d devolve
`application/pdf`, Teste 0 limpo. **NÃO** clicar em "Reimportar plano" (tem
confirmação).
⚠️ Se 4d devolver `text/html`, a sessão caiu no meio do teste — refaça o login e
repita, **não** registre como falha do PDF (já deu falso positivo assim).
### Caso 4e — Vínculo manual da operação (só leitura)
@@ -210,6 +214,47 @@ agent-browser open https://teste.reemtransportes.com.br/auth/login
**PASSOU se**: cai no dashboard do motorista, valores legíveis sem zoom,
Teste 0 limpo. Ao final: `agent-browser set viewport 1280 800`.
## Caso 9 — Tempo de resposta (performance)
Mede o tempo real de cada tela e do PDF. Rode logado, com a rede parada (sem
outra aba baixando coisa), e compare com a linha de base.
```bash
# Tempo das telas (TTFB | resposta completa | DOM pronto)
for u in /dashboard /dashboard/operacoes "/consolidacoes?visao=lista" /admin/romaneios /admin/romaneios/13; do
agent-browser open "https://teste.reemtransportes.com.br$u" >/dev/null
agent-browser eval "(()=>{const n=performance.getEntriesByType('navigation')[0]; return Math.round(n.responseStart-n.requestStart)+'|'+Math.round(n.responseEnd-n.requestStart)+'|'+Math.round(n.domContentLoadedEventEnd-n.startTime);})()"
done
```
```bash
# Tempo do PDF (o mais pesado do sistema). Com cache-buster, senão mede o cache.
agent-browser eval "(async()=>{const t0=performance.now(); const r=await fetch('/admin/romaneios/13/pdf?veiculo=GADE_002&cb='+Math.random()); const b=await r.blob(); return Math.round(performance.now()-t0)+'ms, '+Math.round(b.size/1024)+' KB';})()"
```
**Linha de base medida em 28/08/2026** (romaneio de 2.047 paradas / 72 veículos,
ambiente de teste, acesso pelo domínio com Cloudflare na frente):
| Alvo | TTFB | Resposta | DOM pronto |
|---|---|---|---|
| `/dashboard` | 339 ms | 340 ms | 493 ms |
| `/dashboard/operacoes` | 168 ms | 251 ms | 402 ms |
| `/consolidacoes?visao=lista` | 349 ms | 351 ms | 430 ms |
| `/admin/romaneios` | 49 ms | 50 ms | 127 ms |
| `/admin/romaneios/13` | 71 ms | 78 ms | 155 ms |
| **PDF de 1 veículo** | — | **228 ms** (84 KB) | — |
| **PDF de TODOS (72)** | — | **8.947 ms** (1,7 MB) | — |
**Orçamento — FALHOU se passar de**: 1 s de TTFB em qualquer tela; 1 s no PDF de
um veículo (é ele que a prévia carrega, tem que abrir na hora); 30 s no PDF
completo (acima disso o proxy corta a conexão e o operador recebe erro).
⚠️ **Ponto de atenção conhecido**: o PDF de todos os veículos leva ~9 s e segura
um processo do servidor esse tempo todo. Ainda dentro do aceitável para uma ação
manual e pontual, mas é o primeiro candidato a virar download em segundo plano se
o volume crescer ou se dois operadores baixarem ao mesmo tempo. **Não** compare
esse número com o do PDF de um veículo: são unidades diferentes (1 folha × 72).
## Relatório final (obrigatório)
Terminar a execução com uma tabela e a lista de falhas:
@@ -225,6 +270,7 @@ Terminar a execução com uma tabela e a lista de falhas:
| 6 Admin | … | … |
| 7 Notificações | … | … |
| 8 PIN motorista | … | … |
| 9 Performance | … | tabela de tempos |
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.