13 — Plan de QA — RELE
1. Alcance
Smoke y regresión del vertical slice L2: auth multi-rol, CRUD lecturas, stats, estados UI, tokens visuales.
Entornos: local API :3009 · web :4200 · Neon sparkling-snow-59844541.
2. Cuentas de prueba
3. Smoke API (obligatorio D-P1-06)
| # | Paso | Expectativa |
|---|
| S1 | POST /api/auth/login casa@… | 200 + accessToken + role RESIDENT |
| S2 | GET /api/readings con Bearer | 200 array ≥ 1 |
| S3 | GET /api/readings/stats/summary | total, open, byStatus, kwhTotal |
| S4 | POST /api/readings period+kwh | 201/200 · status SUBMITTED · code RE-… |
| S5 | Login asesor | role ADVISOR |
| S6 | GET /api/readings asesor | ve lecturas de Elena |
| S7 | PATCH /api/readings/:id/status REVIEWED | 200 · advisorId set |
| S8 | Sin token GET readings | 401 |
| S9 | RESIDENT PATCH status | 403 |
| S10 | ADVISOR POST reading | 403 |
Ejemplo curl (orientativo)
# Login residente
TOKEN=$(curl -s -X POST http://localhost:3009/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"email":"casa@rele.energy","password":"password123"}' | jq -r .accessToken)
curl -s http://localhost:3009/api/readings -H "Authorization: Bearer $TOKEN" | jq length
curl -s http://localhost:3009/api/readings/stats/summary -H "Authorization: Bearer $TOKEN" | jq .
4. Smoke web
| # | Paso | Expectativa |
|---|
| W1 | Abrir / | Hero, eslogan, CTAs, imagen |
| W2 | Ir a login | Split navy/form |
| W3 | Login residente | Redirect /lecturas · nombre Elena · badge RESIDENT |
| W4 | Stats visibles | TOTAL / ABIERTAS / kWh Σ |
| W5 | Nueva lectura | Form → submit → vuelve lista con item |
| W6 | Detalle | kWh, estado, notas |
| W7 | Logout + login asesor | Cola con nombres residentes |
| W8 | Detalle → REVIEWED | Badge actualiza |
| W9 | FLAGGED + nota | Nota visible sea soft |
| W10 | Empty (DB limpia opcional) | Empty state sin crash |
| W11 | API apagada | Error + Reintentar |
5. Regresión de dominio
| Caso | Resultado |
|---|
| Código único tras varios creates | No colisión (retry manual si 500 raro) |
| costEur null | Muestra “—” en detalle |
| notes vacías | No bloque de notas |
| Orden lista | Más reciente primero |
6. Regresión visual / craft
| Check | Pass |
|---|
| Colores fog/navy/sea/coral | No palette default indigo Tailwind |
| Fonts Sora + Nunito Sans | Títulos display |
| Badges por status | Colores distintos |
| Mobile 390px lista | Sin overflow horizontal crítico |
7. Seguridad básica
| Check | Pass |
|---|
| password no en responses | Sí |
| 401 sin token | Sí |
| 403 cross-role | Sí |
| XSS en notes | Angular escape; no innerHTML raw |
8. Accesibilidad smoke
Ver doc 10 §12 (A1–A6).
9. Build
| Check | Comando / criterio |
|---|
| API compile | nest start / tsc sin error |
| Web build | ng build OK o serve estable |
| Seed | consola RELE seed OK |
10. Matriz de riesgos QA
| Riesgo | Severidad | Detección |
|---|
| API URL mal puerto | Alta | lista error |
| Token key mismatch accessToken | Alta | login no guarda |
| Guard no aplicado | Crítica | GET sin token 200 |
| Role check missing | Crítica | resident patch |
11. Criterio de salida QA día
12. Fuera de alcance QA v1
- e2e Playwright suite CI
- Load test Neon
- Penetration test formal
- Compatibilidad IE