Saltar a contenido

Test Plan: Autenticacion de Usuarios


Proposito

Plan de pruebas completo para la feature de autenticacion. Cubre registro, login, verificacion de email, refresh tokens, y bloqueo por intentos fallidos.


Metadata

Campo Valor
Feature Autenticacion de Usuarios (FEAT-001)
Spec feature-user-auth.spec.md
Autor Maria Lopez
Fecha 2025-03-22
Estado Approved

1. Alcance del Testing

En scope

  • Registro de pacientes
  • Verificacion de email
  • Login con email + password
  • Refresh de access token
  • Recuperacion de password
  • Bloqueo por intentos fallidos
  • Validacion de password (politica de complejidad y reutilizacion)

Fuera de scope

  • Registro de medicos (flujo admin, se testea en la feature de admin)
  • UI/Frontend tests (responsabilidad del equipo frontend)
  • Performance bajo carga (se testea en fase de load testing general)

2. Niveles de Testing

Unit Tests

Test Que valida Prioridad
PasswordValidator.validate() con password valido Acepta password con 8+ chars, 1 mayuscula, 1 numero Alta
PasswordValidator.validate() con password corto Rechaza password < 8 chars Alta
PasswordValidator.validate() sin mayuscula Rechaza password sin mayuscula Alta
PasswordValidator.validate() sin numero Rechaza password sin numero Alta
PasswordHistoryChecker.isReused() con password repetido Detecta password igual a los ultimos 3 Alta
PasswordHistoryChecker.isReused() con password nuevo Acepta password no repetido Media
LoginAttemptTracker.shouldLock() con 4 intentos No bloquea Media
LoginAttemptTracker.shouldLock() con 5 intentos Bloquea por 15 min Alta
LoginAttemptTracker.shouldLock() despues de 15 min Desbloquea Alta
JwtService.generateAccessToken() Genera token con claims correctos (userId, role, exp) Alta
JwtService.verifyAccessToken() con token expirado Retorna error de expiracion Alta

Integration Tests

Test Que valida Prioridad
POST /auth/register con datos validos Crea user en BD, password hasheado, is_verified=false Alta
POST /auth/register con email duplicado Retorna 409 EMAIL_ALREADY_EXISTS Alta
POST /auth/verify-email con token valido Actualiza is_verified=true en BD Alta
POST /auth/login con credenciales correctas Retorna access + refresh token, crea refresh en BD Alta
POST /auth/login con cuenta no verificada Retorna 403 EMAIL_NOT_VERIFIED Alta
POST /auth/login con cuenta bloqueada Retorna 423 ACCOUNT_LOCKED Alta
POST /auth/login incrementa failed_login_attempts Contador incrementa en BD, se resetea en login exitoso Alta
POST /auth/refresh con token valido Retorna nuevo access token Alta
POST /auth/refresh con token revocado Retorna 401 Alta
POST /auth/reset-password con password repetido Retorna 400 PASSWORD_RECENTLY_USED Media
GET /users/me con token valido Retorna datos del usuario Media
GET /users/me con token expirado Retorna 401 Media

E2E Tests

Test Que valida Prioridad
Flujo completo: registro -> verificacion -> login -> acceso a recurso protegido El happy path funciona de punta a punta Alta
Flujo de recuperacion: forgot-password -> reset-password -> login con nuevo password Reset funciona correctamente Alta
Flujo de bloqueo: 5 logins fallidos -> esperar 15 min -> login exitoso Bloqueo temporal funciona Media

3. Datos de Prueba

Fixtures / Seeds

  • Usuario verificado: test-patient@example.com, password TestPass123, is_verified=true
  • Usuario no verificado: unverified@example.com, password TestPass123, is_verified=false
  • Usuario bloqueado: locked@example.com, failed_login_attempts=5, locked_until=futuro

Mocks / Stubs

  • Servicio de email: Mock que captura los emails enviados sin enviarlos realmente. Permite verificar que se envio el email correcto con el token correcto.
  • Clock/Time: Mock para controlar el tiempo en tests de expiracion de tokens y bloqueo temporal.

4. Edge Cases y Negativos

Scenario Input Expected
Registro con email en mayusculas JUAN@EMAIL.COM Se normaliza a juan@email.com, funciona
Login con espacios en email juan@email.com Se hace trim, funciona
Password con caracteres especiales P@ss#w0rd! Acepta (cumple requisitos)
Password con emojis Password1 Acepta (cumple requisitos basicos)
Token JWT manipulado (firma invalida) Token con payload editado 401, no se autentica
Refresh token usado despues de logout Token valido pero revocado 401
Registro con email malformado no-es-un-email 400 VALIDATION_ERROR
Registro con body vacio {} 400 VALIDATION_ERROR con detalle de campos faltantes
Multiples sesiones simultaneas Login desde 2 dispositivos Ambas sesiones funcionan (refresh tokens independientes)
Cambio de password invalida sesiones? Cambiar password Refresh tokens previos deben ser revocados

5. Performance Tests (si aplica)

Test Metrica Target
Login endpoint latencia p95 response time < 500ms
bcrypt hash time Tiempo de hash con cost 12 < 300ms
JWT verification Tiempo de verificacion RS256 < 10ms

Checklist de Completitud

  • Alcance definido (in scope / out of scope)
  • Unit tests para reglas de negocio (password validation, bloqueo)
  • Integration tests para flujos criticos (registro, login, refresh)
  • E2E tests para happy paths
  • Edge cases y negativos cubiertos
  • Datos de prueba definidos
  • Revisada por otro ingeniero
  • Derivados generados (test code)

Archivos relacionados