SURCO · 13-qa-test-plan.md · 15 de 22

En esta página 1. Objetivo 0%

13 — Plan de QA y pruebas — SURCO

1. Objetivo

Verificar el vertical slice L2 end-to-end: auth multi-rol, listado filtrado, creación, cambio de estado, empty/error, build runnable.

2. Entorno de prueba

ItemValor
APIhttp://localhost:3007
Webhttp://localhost:4200
DBNeon old-paper-48739086 (o local via DATABASE_URL)
Seednpm run db:seed
FARMERcampo@surco.agro / password123
TECHNICIANtecnico@surco.agro / password123

3. Smoke crítico (bloqueante de cierre)

#CasoPasosEsperado
S1Login farmerPOST login / UI login200 + token; redirect lista
S2List farmerGET /api/tasks≥1 task seed; solo suyas
S3StatsGET stats/summarytotal/open/byStatus coherentes
S4CreateUI new task con parcela y dueAparece en lista
S5Assign techcreate con tecnico@…status ACTIVE; tech la ve
S6Login techlogin technicianlista asignaciones
S7Patch DONEdetail → DONEbadge Hecha; stats cambian al reload
S8Authz create techPOST tasks con JWT tech403
S9No tokenGET tasks sin Authorization401
S10Web build/serveng serve o buildsin error compile

Smoke ejecutado / diseñable (2026-08-07)

CasoResultado de diseño
Login farmer / techaccessToken + user.role
GET /tasks farmerseed (5 tareas)
GET stats/summarytotal/open/byStatus
POST /tasks farmercode SU-* ; ACTIVE si tech
PATCH status → DONE200
TECH no creaForbiddenException 403
ng build productionobjetivo OK

4. Casos funcionales por área

4.1 Auth

IDCasoResultado
A1Password incorrecto401 + mensaje UI
A2Email mal formadovalidación
A3Logouttoken limpio; /app/tasks → login
A4Token basura401 en API

4.2 Tareas farmer

IDCasoResultado
F1Lista orden dueAtmás próxima primero
F2Empty si lista []empty + CTA crear
F3Create sin título400 / validación
F4Create parcela nueva nombrese crea parcel
F5Create parcela existentereutiliza
F6Técnico email inexistente404 controlado
F7Detalle propio200
F8Cancelar tareastatus CANCELLED

4.3 Tareas technician

IDCasoResultado
T1No ve “+ Tarea”UI
T2No crea (POST)403 API
T3Solo asignadasfiltro
T4DONE en asignada200
T5Detalle no asignada403

4.4 UI / contenido

IDCasoResultado
U1Home hero + 3 pasosvisibles
U2Labels estado en ESPendiente/Activa/Hecha/Cancelada
U3Error carga listamensaje rojo
U4Responsive 375pxusable sin overflow crítico

5. Pruebas API (ejemplos curl)

# Login
curl -s -X POST http://localhost:3007/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"campo@surco.agro","password":"password123"}'

# List (TOKEN=...)
curl -s http://localhost:3007/api/tasks -H "Authorization: Bearer $TOKEN"

# Stats
curl -s http://localhost:3007/api/tasks/stats/summary -H "Authorization: Bearer $TOKEN"

# Create
curl -s -X POST http://localhost:3007/api/tasks \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"title":"Test riego","parcelName":"Bancal Nord","dueAt":"2026-08-10T08:00:00.000Z"}'

# Status
curl -s -X PATCH http://localhost:3007/api/tasks/$ID/status \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"status":"DONE"}'

6. Regresión visual (manual)

PantallaChecklist
HomeLiterata H1, leaf CTAs, hero, footer
Loginform centrado/legible
Listastats 4 tiles, cards, badge rol
Newcampos alineados
Detailacciones estado
Empty/Errorpatrones DS

Comparar con Paper §2–§5 (file 01KZDGF3509TA4WDZTTQJW1V45).

7. Accesibilidad spot-check

Ver doc 10: teclado login+create, contraste botones, alt hero, labels estado.

8. Regresión de datos

  • Seed idempotente (deleteMany + create).
  • Migración Prisma deploy limpia.
  • Códigos SU-* únicos en seed y creates.

9. Criterios de salida (release demo)

  • Smoke S1–S10 en verde
  • Seed reproducible
  • README con puertos 3007/4200
  • Sin secretos en cliente más allá de JWT de sesión
  • Docs case actualizados

10. Bugs conocidos / límites aceptados v1

LímiteNotas
Soft guard solo en clienteAPI es la autoridad real
Código task randomcolisión teórica rara
Sin refresh tokenre-login al expirar
Parcela por texto libretypos crean duplicados lógicos

No son fallos de cierre si están documentados y el smoke pasa.