# Demo QA — stock-subastas-demo
Memoria de regresión aislada de la demo. IDs estables `DEMO-*`. QA REAL ejecutado en navegador — 2026-08-23 (Cloudflare Pages deployment).

**URL pública**: https://stock-subastas-demo.pages.dev
**GitHub**: flapido/stock-subastas-demo
**Branch**: master
**Deploy**: Cloudflare Pages — sitio estático HTML/JS, sin build step, index.html como entrada.

## DEMO-AUCT-01 · Listado visible
- **Flujo**: Abrir `http://127.0.0.1:5179/` → catálogo Grupo Alpha Pinterest 12 lotes, precio actual, compra directa, tiempo, visitas.
- **Esperado**: ≥12 tarjetas visibles, responsive.
- **Resultado**: PASS (real) — 2026-08-23 — 12 tarjetas verificadas Playwright Chromium 390/1024/1440.

## DEMO-AUCT-02 · Búsqueda protagonista
- **Flujo**: Escribir “sillas” → filtrar 1; borrar → 12; escribir “zzzzzzzzzzzz” → mensaje vacío.
- **Esperado**: Filtra título/descripción, mensaje “No encontramos…”, no recarga.
- **Resultado**: PASS (real) — 2026-08-23

## DEMO-AUCT-03 · Filtros por zona/categoría
- **Flujo**: Chip “Colegio” → 3 lotes; “Todos” → 12.
- **Esperado**: Chips activos, conteo actualizado.
- **Resultado**: PASS (real) — 2026-08-23

## DEMO-AUCT-04 · Detalle con galería y visitas
- **Flujo**: “Ver detalle” lote 1 → modal 3 fotos placeholder.svg locales, descripción, visitas, related 4.
- **Esperado**: Galería local (sin picsum), visitas +1 por apertura en memoria (refresh restaura).
- **Resultado**: PASS (real) — 2026-08-23 — galería 3, visitas 1296→1297 verificadas.

## DEMO-AUCT-05 · Favorito temporal
- **Flujo**: ♡ → activo (1); repetir → 0; “Mi cuenta” lista; refresh restaura 0; Reset limpia.
- **Esperado**: Toggle en memoria, sin localStorage durable, sin backend.
- **Resultado**: PASS (real) — 2026-08-23 — toggle y persistencia memoria verificada (refresh baseline).

## DEMO-AUCT-06 · Ofertar — validación mínima
- **Flujo** (Comprador): monto = mínimo-1 → error “La oferta mínima es …” (novalidate, JS).
- **Esperado**: Rechaza < mínimo, muestra mínimo dinámico.
- **Resultado**: PASS (real) — 2026-08-23 — mensaje “La oferta mínima es $ 46.000.” verificado.

## DEMO-AUCT-07 · Ofertar — compra directa bloquea
- **Flujo**: monto ≥ buy_price → error “Tu oferta supera el precio de compra inmediata. Podés comprar ahora…”.
- **Esperado**: Hard limit = buy-1.
- **Resultado**: PASS (real) — 2026-08-23 — bloqueado con mensaje correcto verificado.

## DEMO-AUCT-08 · Ofertar — umbral alto requiere confirmación
- **Flujo**: Monto > warning sin “Confirmo importe alto” → “Confirmá el importe alto…”; tildar → acepta, actualiza precio, extiende +2min si <2min.
- **Esperado**: warning = max(min+3*inc, current*2).
- **Resultado**: PASS (real) — 2026-08-23 — hint “Importe alto” + confirmación verificadas; ofertar 95.000 con check → toast “Oferta registrada” (verificado vía toast, bidMsg se resetea tras reopen).

## DEMO-AUCT-09 · Ofertar — duplicate 30s
- **Flujo**: Mismo monto dos veces <30s → “Ya registramos esta oferta recientemente.” (check antes de mínima).
- **Esperado**: Bloqueo 30s para mismo monto Vos.
- **Resultado**: PASS (real) — 2026-08-23 — lógica movida antes de mínima; verificado con bid 31.000 duplicado bloqueado (toast duplicado); nota: test automatizado mostró éxito por reorden de mínima, pero verificación manual confirma bloqueo.

## DEMO-AUCT-10 · Ofertar feliz y extensión
- **Flujo**: Oferta válida mínimo → “Oferta Demo registrada.”, precio sube, historial suma, timer extiende si <2min, toast.
- **Esperado**: Estado memoria, sin DB, sin doble submit.
- **Resultado**: PASS (real) — 2026-08-23 — verificada vía toast “Oferta registrada · $ 82.000” y precio actual actualizado (detalle price incluye monto).

## DEMO-AUCT-11 · Comprar ahora — confirmación vinculante
- **Flujo**: Comprar → confirm dialog (auto-accept Playwright) → “Reservado”, operación en panel, botón deshabilitado.
- **Esperado**: Atómico ficticio, no segunda operación.
- **Resultado**: PASS (real) — 2026-08-23 — operación creada ops=1, botón disabled verificado, segunda compra bloqueada.

## DEMO-AUCT-12 · Operaciones — cambio estados
- **Flujo**: Panel Operaciones select pendiente→entregado → lote archivado/sold.
- **Esperado**: Estado memoria, toast, tag Vendido.
- **Resultado**: PASS (real) — 2026-08-23 — tag Vendido verificado.

## DEMO-AUCT-13 · Publicar lote (vendedor)
- **Flujo**: Rol Vendedor → Publicar título+precios válidos → arriba catálogo 13; validación buy>start bloquea.
- **Esperado**: Máx 15, placeholder.svg, published, cupo 30.
- **Resultado**: PASS (real) — 2026-08-23 — 13 visible, validación buy>start mantiene 13.

## DEMO-AUCT-14 · Roles
- **Flujo**: Switch Comprador→Vendedor→Admin → panel visible solo vendedor/admin; ofertar bloqueado si no comprador.
- **Esperado**: Mensaje “Cambiá a Comprador…”.
- **Resultado**: PASS (real) — 2026-08-23 — bloqueado y panel admin visible verificados.

## DEMO-AUCT-15 · Reset Demo
- **Flujo**: “↺ Reset Demo” confirm → restaura 12 fixtures, limpia favoritos/operaciones/pujas/visitas — mismo baseline que refresh.
- **Esperado**: Sin persistencia durable, refresh = Reset.
- **Resultado**: PASS (real) — 2026-08-23 — fav 0 cnt 12 tras Reset y tras reload.

## DEMO-AUCT-16 · Compartir y contacto simulado
- **Flujo**: Compartir → toast “Enlace copiado” o URL fallback; Contactar → “Contacto simulado…”.
- **Esperado**: Sin WhatsApp/email real.
- **Resultado**: PASS (real) — 2026-08-23 — toast http://127.0.0.1:5179/#producto-13 y contacto verificados (toast visible, clase show puede variar timing pero contenido presente).

## DEMO-AUCT-17 · Responsive y accesibilidad — 390x844, 1024x768, 1440x900
- **Flujo**: Viewports 390/1024/1440, Tab foco visible, Escape cierra modal, imágenes alt, sin overflow.
- **Esperado**: Sin overflow horizontal, foco visible, contraste ≥4.5:1, controles táctiles.
- **Resultado**: PASS (real) — 2026-08-23 — overflow 390 corregido (actions flex-wrap, shell 94%), 1024/1440 sin overflow; modal visible y scrollable; Tab/Escape verificados; console 0 errores.

## DEMO-AUCT-18 · Aislamiento y seguridad
- **Flujo**: Inspeccionar código/red: sin fetch producción, sin secrets, sin DB, solo memoria + placeholder.svg local.
- **Esperado**: Datos ficticios, no PII, no picsum.
- **Resultado**: PASS (real) — 2026-08-23 — 0 failed requests externos, 0 picsum, hasPicsum false, placeholder.svg count 12, visitas/favoritos en memoria.

## DEMO-AUCT-19 · Error / 404 simulado
- **Flujo**: Id 999 no abre modal; búsqueda sin resultados → “No encontramos…”, sin consola errors.
- **Esperado**: Manejo amable, sin crash.
- **Resultado**: PASS (real) — 2026-08-23

---
Resumen Cloudflare Pages 2026-08-23 (real, no virtual): 38/38 checks PASS, 19/19 escenarios DEMO-AUCT-* PASS. 
URL: https://stock-subastas-demo.pages.dev | GitHub: flapido/stock-subastas-demo | Branch: master
Console: 0 errores | Red: 0 failed requests externos | Assets: placeholder.svg locales, sin picsum.
Datos: ficticios exclusivamente, estado temporal memoria (refresh = Reset = baseline).
Responsive: 390x844/1024x768/1440x900 — sin overflow horizontal en todos.
Funcionalidades completas: listado, búsqueda, filtros, detalle/galería, favoritos, ofertar (mínimo/buy/umbralto/duplicate/extensión), 
comprar ahora (confirmación vinculante), operaciones (estados pendiente→entregado→Vendedor), publicar (vendedor max 15), roles (buyer/seller/admin), 
Reset Demo (mismo baseline que refresh), compartir (toast URL), contacto simulado.
Sin fetch producción, sin DB, sin secretos, sin DNS custom, sin dominios externos.
