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
/registroREQ-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
/loginREQ-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
/cursosREQ-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 completado | Cupo disponible | Resultado esperado |
|---|---|---|
| Sí | Sí | Inscrito |
| Sí | No | Lista de espera |
| No | Sí | Rechazado (prerequisito pendiente) |
| No | No | Rechazado |
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-progresoREQ-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 actual | Transiciones permitidas |
|---|---|
| Inscrito | En progreso, Abandonado |
| En progreso | Completado, Abandonado |
| Completado | Certificado |
| Certificado | Ninguna (estado final) |
| Abandonado | Ninguna (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
globalREQ-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/enrollREQ-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:
200constatus: "inscrito"— inscripción exitosa200constatus: "lista-espera"— sin cupos400— falta courseId403— prerequisito no completado404— 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.