Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96b08eda01 | ||
|
|
e6c3e0ed8d |
@@ -328,7 +328,69 @@ compartido) para que el contenedor vea los archivos de verdad.
|
||||
`<select>` del checkout. Ningún banco PSE real tiene código "0" —
|
||||
se filtra explícitamente en `pse-banks/route.ts`.
|
||||
|
||||
### Pendiente — checklist ampliado para la próxima sesión con navegador
|
||||
Ampliado 2026-09-10 con el resto de la superficie real del storefront
|
||||
(4 páginas + `components/{account,cart,catalog,checkout,home,layout,
|
||||
product,search,wishlist}`), agrupado por riesgo, y ejecutado el mismo
|
||||
día contra `shop.cruzcloud.net` con el harness de `.browser-scratch/`.
|
||||
|
||||
### RESUELTO (2026-09-11) — segunda tanda con navegador real
|
||||
|
||||
Resultados reales, uno por uno (código de cada prueba en
|
||||
`checks.mjs`):
|
||||
|
||||
- **`/checkout` con carrito vacío (ítem 9) — OK.** Muestra "Tu carrito
|
||||
está vacío" con link a `/catalog`, no rompe.
|
||||
- **Fallback "Confirmar por WhatsApp" (ítem 10) — OK.** Abre
|
||||
`api.whatsapp.com/send?phone=...` en pestaña nueva con el mensaje del
|
||||
pedido armado correctamente.
|
||||
- **Filtros de `/catalog` (ítem 11) — OK.** Un filtro de categoría real
|
||||
("Figuras de acción") redujo los productos mostrados de 18 a 4. Nota:
|
||||
estos filtros (categoría/marca/edad dentro de la barra lateral) son
|
||||
**estado de cliente, no reflejado en la URL** — distinto de los
|
||||
filtros por query param (`?category=...`) que sí usa la navegación
|
||||
del header. Ninguno de los dos es un bug, son dos mecanismos
|
||||
distintos coexistiendo; queda como nota para no confundirlos.
|
||||
- **Búsqueda sin resultados (ítem 12) — BUG real encontrado y
|
||||
corregido.** El dropdown de autocompletado no mostraba absolutamente
|
||||
nada (ni "Buscando…" ni ningún mensaje) cuando una búsqueda de 2+
|
||||
caracteres no tenía coincidencias — el usuario se quedaba sin
|
||||
feedback de que su búsqueda había corrido. Corregido en
|
||||
`predictive-search.tsx`: ahora muestra "No encontramos resultados
|
||||
para…" con el botón de buscar en todo el catálogo.
|
||||
- **Slug de producto inválido (ítem 14) — hallazgo, no corregido
|
||||
todavía.** La página sí muestra el contenido correcto de "Este tesoro
|
||||
no existe" (el código ya llama a `notFound()` de
|
||||
`next/navigation`, como corresponde), **pero la respuesta HTTP real
|
||||
es `200`, no `404`** — confirmado independientemente con `curl`, no
|
||||
es un artefacto de Playwright. No se investigó a fondo en qué capa se
|
||||
pierde el status real (Next.js standalone vs. alguna capa de
|
||||
Cloudflare/NPM/Traefik en el medio, ver
|
||||
`incidente-cloudflared-504-quic-2026-08.md` para precedente de
|
||||
problemas de red en esa cadena) — bajo impacto en la experiencia del
|
||||
usuario (el contenido es correcto), pero sí afecta SEO/crawlers.
|
||||
Queda como pendiente de investigar, no de corregir a ciegas.
|
||||
- **Zoom interactivo del producto (ítem 15) — OK.** Hover-zoom y el
|
||||
modal de click-to-zoom siguen funcionando igual tras los cambios
|
||||
recientes al storefront.
|
||||
- **Wishlist/favoritos (ítem 17) — OK.** Agregar a favoritos +
|
||||
recargar la página: persiste correctamente vía `localStorage`.
|
||||
- **Otros viewports, tablet y desktop grande (ítem 19) — OK.**
|
||||
Capturas guardadas, sin problemas de layout visibles en el banner ni
|
||||
el header en esos anchos.
|
||||
- **Página 404 genérica (ítem 20) — OK.** Una ruta que no existe cae en
|
||||
`not-found.tsx` con status HTTP `404` real (a diferencia del caso de
|
||||
producto inválido arriba — la diferencia de comportamiento entre
|
||||
ambos casos es justamente lo que quedó como pendiente de investigar).
|
||||
- **Accesibilidad básica (ítem 21) — OK, parcial.** El buscador es
|
||||
alcanzable navegando solo con `Tab` desde el body, sin mouse. Falta
|
||||
probar el resto del flujo de checkout por teclado.
|
||||
- **Registro/login con email y contraseña (parte del ítem 16) — OK.**
|
||||
Crear cuenta con nombre/apellido/email/contraseña funciona y deja la
|
||||
sesión iniciada. La parte de Google OAuth sigue sin probarse (necesita
|
||||
una cuenta de Google real, no algo que se pueda automatizar sin
|
||||
credenciales).
|
||||
|
||||
### Pendiente — lo que queda sin probar
|
||||
|
||||
3. **Resiliencia del fallback de envío:** forzar una dirección o
|
||||
producto que haga fallar la cotización real de EnvíoClick (ej. un
|
||||
@@ -340,67 +402,26 @@ compartido) para que el contenedor vea los archivos de verdad.
|
||||
conseguir credenciales de prueba reales de PSE (persona/clave de
|
||||
algún banco del ambiente `desarrollo`), completar el login bancario
|
||||
de punta a punta, y confirmar que el webhook mueve la orden a
|
||||
completada sin intervención manual — hoy solo se confirmó que el
|
||||
endpoint responde `200` a un `POST` sintético y que la redirección
|
||||
al banco ocurre, no el ciclo completo con notificación real.
|
||||
Ampliado 2026-09-10 con el resto de la superficie real del storefront
|
||||
(4 páginas + `components/{account,cart,catalog,checkout,home,layout,
|
||||
product,search,wishlist}`), agrupado por riesgo:
|
||||
|
||||
**Checkout / pagos**
|
||||
|
||||
completada sin intervención manual.
|
||||
7. **Pago cancelado o rechazado en el banco PSE:** confirmar que la
|
||||
orden no queda en un estado ambiguo ("colgada" en
|
||||
`pending_authorization` para siempre) cuando el comprador cancela o
|
||||
el banco rechaza — hoy solo se probó el camino feliz hasta la
|
||||
redirección.
|
||||
`pending_authorization` para siempre).
|
||||
8. **Persona jurídica + NIT** en el formulario de PSE — solo se probó
|
||||
persona natural con cédula.
|
||||
9. **`/checkout` con carrito vacío** (acceso directo por URL, sin pasar
|
||||
por un producto primero).
|
||||
10. **Fallback "Confirmar por WhatsApp"** (visible cuando falla la
|
||||
lista de bancos o como alternativa siempre disponible): que el link
|
||||
arme el mensaje correcto con los datos del pedido.
|
||||
|
||||
**Catálogo y búsqueda**
|
||||
|
||||
11. **Filtros de `/catalog`** (categoría/colección/marca/precio — las
|
||||
facetas de Meilisearch, ver ADR 0006) con navegador real: que
|
||||
aplicar/combinar filtros actualice los resultados y la URL.
|
||||
12. **Búsqueda sin resultados** — confirmar que muestra un mensaje
|
||||
claro en vez de quedar vacío sin explicación.
|
||||
|
||||
**Producto**
|
||||
|
||||
13. **Selección de variantes** (cuando un producto tiene más de una) y
|
||||
que el precio/disponibilidad mostrado cambie según la variante
|
||||
elegida.
|
||||
14. **Slug de producto inválido** → debe caer en `not-found.tsx`
|
||||
(`app/not-found.tsx`), no en un error sin manejar.
|
||||
15. **Zoom interactivo del producto** (hover + modal click-to-zoom,
|
||||
`product-gallery.tsx`) — re-verificar con navegador real, la última
|
||||
vez que se probó fue antes de esta tanda de cambios al storefront.
|
||||
|
||||
**Cuenta y wishlist**
|
||||
|
||||
16. **Login/registro de cliente real** (Google OAuth de punta a punta
|
||||
incluyendo `/auth/google/callback`, y con contraseña) — nunca
|
||||
ejercitado con un navegador real en ninguna sesión.
|
||||
17. **Wishlist/favoritos** (`wishlist-drawer.tsx`): agregar/quitar y
|
||||
confirmar que persiste entre recargas (guardado en `localStorage`,
|
||||
por-viewer — no hay forma de verificarlo por API).
|
||||
|
||||
**Transversal**
|
||||
|
||||
elegida — ningún producto probado hasta ahora tenía más de una
|
||||
variante real.
|
||||
14b. **Investigar por qué `/product/<slug-inválido>` responde HTTP 200**
|
||||
en vez de 404 pese a llamar `notFound()` correctamente (ver
|
||||
hallazgo arriba) — identificar la capa responsable antes de tocar
|
||||
código.
|
||||
16b. **Login con Google (OAuth completo)** incluyendo
|
||||
`/auth/google/callback` — necesita una cuenta de Google real de
|
||||
prueba.
|
||||
18. **Bug conocido de Firefox Android** (ver memoria de proyecto,
|
||||
`known-bug-firefox-android-layout`): el layout se corta/desplaza
|
||||
solo en Firefox Android — Playwright puede emular Android/Chrome
|
||||
pero no Firefox; si se necesita reproducir esto específicamente hace
|
||||
falta `playwright-firefox` o un dispositivo real.
|
||||
19. **Otros viewports** (tablet, desktop grande) para el banner y el
|
||||
buscador — solo se probaron mobile (iPhone 13) y desktop 1280px.
|
||||
20. **Página 404** (`app/not-found.tsx`) — nunca visitada con navegador
|
||||
real.
|
||||
21. **Accesibilidad básica**: navegación completa por teclado (tab
|
||||
order, foco visible) en el checkout y el buscador — Playwright
|
||||
puede simular esto (`page.keyboard`), no probado todavía.
|
||||
`known-bug-firefox-android-layout`) — Playwright puede emular
|
||||
Android/Chrome pero no Firefox; hace falta `playwright-firefox` o
|
||||
un dispositivo real.
|
||||
21b. **Accesibilidad del checkout completo** por teclado (no solo el
|
||||
buscador) — tab order y foco visible en los 3 pasos.
|
||||
Reference in new issue
Block a user