Academia sin Humo

Especificación de producto

Documento de requerimientos de Academia sin Humo. Usa esta especificación para diseñar tus casos de prueba y encontrar los bugs.

1. Registro de estudiantes

/registro
REQ-R01
El formulario requiere: nombre completo, email, contraseña y edad. Todos los campos son obligatorios.
REQ-R02
El nombre debe tener entre 2 y 50 caracteres.
REQ-R03
El email debe tener formato válido: debe contener un @ seguido de un dominio con punto (ejemplo: usuario@dominio.com). Emails como usuario@ o usuario no son válidos.
REQ-R04
La contraseña debe tener entre 8 y 64 caracteres (inclusive). Una contraseña de 7 caracteres debe ser rechazada. Una de 65 también.
REQ-R05
La edad debe estar entre 16 y 99 (inclusive).
REQ-R06
Tras un registro exitoso, el formulario debe limpiarse completamente. Ningún campo debe conservar datos del registro anterior.
REQ-R07
No se puede registrar un email que ya existe en el sistema.

2. Inicio de sesión

/login
REQ-L01
El login requiere email y contraseña. Ambos son obligatorios.
REQ-L02
Las credenciales se validan contra los usuarios registrados. Un email no registrado o una contraseña incorrecta muestran un mensaje de error.
REQ-L03
Rate limiting: después de 5 intentos fallidos consecutivos, la cuenta se bloquea por 30 segundos. Durante el bloqueo:
  • El botón de login debe estar deshabilitado
  • Un timer visual muestra los segundos restantes
  • El botón se habilita exactamente cuando el timer llega a 0
REQ-L04
Tras un login exitoso, el sistema muestra un mensaje de bienvenida con el nombre del usuario.

3. Catálogo e inscripción a cursos

/cursos
REQ-C01
El catálogo muestra todos los cursos disponibles con: título, descripción, nivel, duración, prerequisito y cupos disponibles.
REQ-C02
Reglas de inscripción (tabla de decisión):
Prerequisito completadoCupo disponibleResultado esperado
Inscrito
NoLista de espera
NoRechazado (prerequisito pendiente)
NoNoRechazado
REQ-C03
Un curso solo se desbloquea cuando el estudiante ha completado su prerequisito. Estar inscrito o en progreso no cuenta como completado.
REQ-C04
Al inscribirse exitosamente, el número de cupos disponibles debe reducirse en 1.
REQ-C05
Si el estudiante queda en lista de espera, el badge debe mostrar "Lista de espera" (no "Inscrito").
REQ-C06
La API de inscripción (POST /api/enroll) debe aplicar las mismas reglas de validación que la UI. Un curso con prerequisito pendiente debe ser rechazado tanto en la UI como en la API.

Mapa de prerequisitos

📋 Fundamentos de Testing← sin prerequisito
↳ 🎭 Playwright desde cero← requiere Fundamentos
↳ 🧩 Diseño de casos de prueba← requiere Fundamentos
↳ 🔌 API Testing con Playwright← requiere Playwright desde cero
↳ ⚙️ CI/CD para QA← requiere Playwright desde cero
↳ 🚀 Liderazgo QA← requiere Diseño de casos

4. Progreso del estudiante

/mi-progreso
REQ-P01
Cada curso inscrito tiene un ciclo de vida con los siguientes estados: Inscrito, En progreso, Completado, Certificado, Abandonado.
REQ-P02
Transiciones válidas:
Estado actualTransiciones permitidas
InscritoEn progreso, Abandonado
En progresoCompletado, Abandonado
CompletadoCertificado
CertificadoNinguna (estado final)
AbandonadoNinguna (estado terminal)
REQ-P03
Cualquier transición no listada arriba debe ser rechazada con un mensaje de error. Por ejemplo: Inscrito → Completado, Abandonado → En progreso.
REQ-P04
El certificadose genera una sola vez por curso. Múltiples clics en "Certificar" no deben crear certificados duplicados.
REQ-P05
Completar un curso actualiza el estado de prerequisitos en el catálogo. Los cursos que dependen del completado deben desbloquearse.

5. Sesión y autenticación

global
REQ-S01
Las páginas /cursos y /mi-progreso requieren autenticación. Un usuario no logueado debe ver un mensaje pidiendo iniciar sesión.
REQ-S02
Al cerrar sesión, todo el progreso del estudiante se reinicia. Al volver a iniciar sesión, el estudiante empieza sin cursos inscritos.

6. API de inscripción

/api/enroll
REQ-A01
POST /api/enroll acepta un body JSON con el campo courseId.
REQ-A02
La API debe validar: que el curso exista, que haya cupos, y que el prerequisito esté completado. Las mismas reglas que la UI.
REQ-A03
Respuestas esperadas:
  • 200 con status: "inscrito" — inscripción exitosa
  • 200 con status: "lista-espera" — sin cupos
  • 400 — falta courseId
  • 403 — prerequisito no completado
  • 404 — curso no encontrado

¿Lista para encontrar los bugs?

Compara esta especificación con el comportamiento real de la app. Cada diferencia que encuentres es un bug.