Compare commits

...
Author SHA1 Message Date
devopsandClaude Sonnet 5 8d44f2e771 fix(ecommerce): mostrar mensaje cuando el buscador no tiene resultados
Encontrado probando en vivo con navegador real (Docker + Playwright):
una búsqueda de 2+ caracteres sin coincidencias no mostraba nada -- ni
"Buscando…" ni ningún mensaje. El usuario quedaba sin feedback de que
su búsqueda de verdad corrió. Se agrega un estado vacío con el botón
de buscar en todo el catálogo (esa búsqueda completa puede usar
criterios más amplios que el autocompletado).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01THZFwPzrwv6VAbuwmaf5vR
2026-09-11 13:08:50 +00:00
devopsandClaude Sonnet 5 352762b9d2 Merge: ampliar checklist de pruebas reales pendientes (ADR 0010)
Build and Push Docs Portal / Construir y publicar Docs Portal (push) Successful in 6m6s
Build and Push Docs Portal / Escaneo de Secretos (Gitleaks) (push) Successful in 20s
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01THZFwPzrwv6VAbuwmaf5vR
2026-09-10 21:40:11 +00:00
devopsandClaude Sonnet 5 58cc93bb2f docs(adr-0010): ampliar checklist de pruebas reales pendientes
Cubre el resto de la superficie del storefront (checkout edge cases,
filtros de catalogo, variantes de producto, cuenta/wishlist,
accesibilidad, otros viewports) agrupado por riesgo, no solo lo ya
probado.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01THZFwPzrwv6VAbuwmaf5vR
2026-09-10 21:40:09 +00:00
gitea-actions 5eaa94818f chore(gitops): deploy Docs Portal v1.0.241 [skip ci] 2026-09-10 17:56:48 +00:00
gitea-actions 66a81ad9a3 chore(gitops): deploy Medusa v1.0.239 [skip ci] 2026-09-10 17:49:42 +00:00
devops 39e1bf61d3 chore: release v1.0.240 [skip ci] 2026-09-10 17:23:09 +00:00
5 changed files with 77 additions and 15 deletions

No files matched your search

@@ -343,14 +343,64 @@ compartido) para que el contenedor vea los archivos de verdad.
completada sin intervención manual — hoy solo se confirmó que el completada sin intervención manual — hoy solo se confirmó que el
endpoint responde `200` a un `POST` sintético y que la redirección endpoint responde `200` a un `POST` sintético y que la redirección
al banco ocurre, no el ciclo completo con notificación real. al banco ocurre, no el ciclo completo con notificación real.
7. **Login/registro de cliente real** (Google OAuth y con contraseña) — Ampliado 2026-09-10 con el resto de la superficie real del storefront
nunca ejercitado con un navegador real en ninguna sesión. (4 páginas + `components/{account,cart,catalog,checkout,home,layout,
8. **Bug conocido de Firefox Android** (ver memoria de proyecto, product,search,wishlist}`), agrupado por riesgo:
`known-bug-firefox-android-layout`): el layout se corta/desplaza
solo en Firefox Android — Playwright puede emular Android/Chrome **Checkout / pagos**
pero no Firefox; si se necesita reproducir esto específicamente hace
falta `playwright-firefox` o un dispositivo real. 7. **Pago cancelado o rechazado en el banco PSE:** confirmar que la
9. **Otros viewports** (tablet, desktop grande) para el banner y el orden no queda en un estado ambiguo ("colgada" en
buscador — solo se probaron mobile (iPhone 13) y desktop 1280px. `pending_authorization` para siempre) cuando el comprador cancela o
10. **Flujo de wishlist/favoritos y el diálogo de cuenta** — no el banco rechaza — hoy solo se probó el camino feliz hasta la
ejercitados todavía con navegador real. redirección.
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**
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.
@@ -25,7 +25,7 @@ spec:
runAsNonRoot: false runAsNonRoot: false
containers: containers:
- name: app - name: app
image: gitea.cruzcloud.net/devops/docs-portal:v1.0.237 image: gitea.cruzcloud.net/devops/docs-portal:v1.0.241
# El base saca TODAS las capabilities. Probado en vivo y # El base saca TODAS las capabilities. Probado en vivo y
# revertido: con drop: ALL (aunque se agregue NET_BIND_SERVICE # revertido: con drop: ALL (aunque se agregue NET_BIND_SERVICE
# de vuelta) el propio entrypoint de nginx:1.27-alpine falla al # de vuelta) el propio entrypoint de nginx:1.27-alpine falla al
@@ -65,7 +65,7 @@ spec:
memory: 64Mi memory: 64Mi
- name: migrations - name: migrations
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.234 image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.239
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
command: command:
- node - node
@@ -86,7 +86,7 @@ spec:
containers: containers:
- name: app - name: app
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.234 image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.239
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
envFrom: envFrom:
- configMapRef: - configMapRef:
@@ -87,6 +87,18 @@ export function PredictiveSearch() {
Buscando… Buscando…
</div> </div>
)} )}
{/* Encontrado probando en vivo con navegador real: sin este bloque,
una busqueda de 2+ caracteres sin coincidencias no mostraba nada
(ni "buscando" ni un mensaje) -- el usuario se quedaba sin ningun
feedback de que su busqueda de verdad corrio. Se ofrece igual el
boton de buscar en todo el catalogo porque esa busqueda completa
puede usar criterios mas amplios que el autocompletado. */}
{!loading && normalized.length >= 2 && matches.length === 0 && (
<div className="absolute left-0 right-0 top-[calc(100%+10px)] z-50 rounded-2xl border border-slate-200 bg-white p-2 text-center shadow-2xl">
<p className="p-3 text-sm text-slate-500">No encontramos resultados para “{query.trim()}”.</p>
<button type="submit" className="w-full rounded-xl bg-ari-marino px-4 py-3 text-sm font-black text-white hover:brightness-110">Buscar “{query.trim()}” en todo el catálogo</button>
</div>
)}
{matches.length > 0 && ( {matches.length > 0 && (
<div className="absolute left-0 right-0 top-[calc(100%+10px)] z-50 overflow-hidden rounded-2xl border border-slate-200 bg-white p-2 shadow-2xl"> <div className="absolute left-0 right-0 top-[calc(100%+10px)] z-50 overflow-hidden rounded-2xl border border-slate-200 bg-white p-2 shadow-2xl">
{matches.map((product) => ( {matches.map((product) => (
@@ -25,7 +25,7 @@ spec:
runAsUser: 1001 runAsUser: 1001
containers: containers:
- name: app - name: app
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.238 image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.240
env: env:
- name: HEADLESS_PROVIDER - name: HEADLESS_PROVIDER
value: medusa value: medusa