, Teste e correçoes
This commit is contained in:
@@ -44,6 +44,21 @@ agent-browser network requests | grep -E " (4[0-9]{2}|5[0-9]{2})$" # deve vir
|
||||
- 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).
|
||||
|
||||
⚠️ **404 de asset engana duas vezes.** O Cloudflare guarda os arquivos por um ano,
|
||||
então uma tela pode parecer boa enquanto a origem já não serve nada — sempre
|
||||
confira com cache-buster:
|
||||
|
||||
```bash
|
||||
curl -s -o /dev/null -w "%{http_code}\n" "https://teste.reemtransportes.com.br/assets/controllers/<arquivo>.js?cb=$RANDOM"
|
||||
```
|
||||
|
||||
E se **todos** derem 404, o problema é o build inteiro, não os arquivos: a tarefa
|
||||
`tailwindcss:build` aborta o `assets:precompile` quando falta
|
||||
`app/assets/tailwind/application.css`. O Propshaft, sem manifesto, continua
|
||||
gerando URLs com o digest certo — por isso a página abre normal e o JS some em
|
||||
silêncio. Confira no servidor com
|
||||
`docker compose logs app | grep '\[boot\] assets'`.
|
||||
- Exceção: chamadas para domínios de terceiros (cloudflareinsights etc.) com
|
||||
falha não reprovam o caso; registre como observação.
|
||||
|
||||
@@ -115,34 +130,65 @@ 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):
|
||||
A prévia é um pop-up cujo estado mora na **URL** (`?previa=1`) — abre, fecha e
|
||||
troca de folha por navegação normal, sem JavaScript. **Teste sempre navegando de
|
||||
verdade**, nunca com `.click()` de dentro do `eval`: o clique programático já
|
||||
mascarou um bug (com o Turbo carregado, o mecanismo anterior por `#hash` não
|
||||
abria, mas o `.click()` fazia parecer que abria).
|
||||
|
||||
```bash
|
||||
# 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"
|
||||
# 4a. Fechada, o pop-up NÃO existe no HTML (e nenhum PDF é gerado):
|
||||
agent-browser open "https://teste.reemtransportes.com.br/admin/romaneios/13"
|
||||
agent-browser eval "document.querySelector('[data-romaneio-target=overlay]') ? 'PRESENTE (erro)' : 'ausente (correto)'"
|
||||
|
||||
# 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=..."
|
||||
# 4b. Abrir pelo botão, com clique REAL:
|
||||
agent-browser snapshot -i | grep -i "prévia" # pegar o ref do link
|
||||
agent-browser click @eN
|
||||
agent-browser eval "(()=>{const o=document.querySelector('[data-romaneio-target=overlay]'); if(!o) return 'NAO ABRIU'; const c=[...o.querySelectorAll('span')].find(s=>s.textContent.includes(' de ')); return 'aberto | '+c.textContent.trim()+' | url='+location.search;})()"
|
||||
# esperado: "aberto | 1 de 72 · GADE_001 | url=?veiculo=GADE_001&previa=1"
|
||||
|
||||
# 4c. Fechar de novo:
|
||||
agent-browser eval "document.querySelector('details[data-romaneio-target=overlay] summary').click()"
|
||||
# 4c. Avançar de folha SEM fechar (é o carrossel):
|
||||
agent-browser eval "(()=>{const o=document.querySelector('[data-romaneio-target=overlay]'); const a=[...o.querySelectorAll('a')].filter(x=>(x.getAttribute('href')||'').includes('previa')); return a.at(-1).getAttribute('href');})()"
|
||||
# copie o href e navegue nele com `agent-browser open`; o pop-up tem que continuar
|
||||
# aberto e o contador virar "2 de 72".
|
||||
|
||||
# 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';})()"
|
||||
# 4d. Fechar pelo ✕ (volta para a URL sem previa) e o pop-up sumir do HTML.
|
||||
|
||||
# 4e. O PDF responde e é PDF de verdade (não a página de login):
|
||||
agent-browser eval "(async()=>{const r=await fetch('/admin/romaneios/13/pdf?veiculo=GADE_001&cb='+Math.random()); 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 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).
|
||||
**PASSOU se**: 4a ausente, 4b abre com o contador certo, 4c avança mantendo
|
||||
aberto, 4d fecha, 4e devolve `application/pdf`. **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
|
||||
⚠️ Se 4e 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 4f — Prévia em branco é o NAVEGADOR, não o sistema
|
||||
|
||||
O quadro do PDF pode aparecer branco mesmo com tudo funcionando, porque o
|
||||
navegador se recusa a desenhar PDF em iframe. As três causas conhecidas:
|
||||
|
||||
1. **"Baixar PDFs em vez de abri-los"** ligado (Chrome/Brave/Edge:
|
||||
`chrome://settings/content/pdfDocuments`);
|
||||
2. **bloqueador de conteúdo** (Brave Shields, uBlock) barrando o quadro;
|
||||
3. **bloqueio de pop-up/redirecionamento** do navegador.
|
||||
|
||||
O sistema **não consegue detectar isso** (o iframe é opaco por segurança), por
|
||||
isso o pop-up traz um aviso fixo com a saída ("abra em outra aba"). Antes de
|
||||
abrir bug de "prévia não aparece", confirme que **não** é o navegador:
|
||||
|
||||
```bash
|
||||
# Se ISTO devolve application/pdf, o servidor está certo e o problema é o navegador:
|
||||
agent-browser eval "(async()=>{const r=await fetch('/admin/romaneios/13/pdf?veiculo=GADE_001&cb='+Math.random()); const b=await r.blob(); return r.status+' '+b.type;})()"
|
||||
```
|
||||
|
||||
**PASSOU se**: o aviso está visível no rodapé do pop-up e o `fetch` acima devolve
|
||||
`application/pdf`. Se o fetch devolve PDF e o quadro está branco, o veredito é
|
||||
**"configuração do navegador"**, não falha do sistema — registre assim.
|
||||
|
||||
### 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
|
||||
|
||||
Reference in New Issue
Block a user