RF56: Usuario contesta preguntas del curso
Descripción
Como usuario que está tomando un curso, quiero responder las preguntas de evaluación para demostrar lo aprendido y poder finalizar el curso.
El backend evalúa las respuestas (la clave correcta nunca se expone al cliente) y registra el puntaje. Aprobar la evaluación es condición para finalizar el curso (RF57).
| Campo | Valor |
|---|---|
| Módulo | Courses Module |
| Actor | Usuario autenticado |
| Endpoint | POST /courses/:id/quiz ({ answers }) |
| Precondiciones | Sesión activa; acceso al curso; lecciones requeridas vistas |
| Prioridad | Media (MVP) |
| Etapa | MBI 1 |
| Requisitos relacionados | RF52, RF57, RF59 |
Reglas de negocio
- RN-56.1 — La evaluación se realiza en el backend; las respuestas correctas no se envían al cliente.
- RN-56.2 — Se define un puntaje mínimo de aprobación (p. ej. 70%).
- RN-56.3 — Se permite reintentar la evaluación si no se aprueba (con límite configurable).
- RN-56.4 — Se registra el intento, puntaje y fecha.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
answers | Obligatorio. Una respuesta por pregunta del cuestionario. | "Responde todas las preguntas." |
| Cada respuesta | Opción válida de la pregunta. | "Respuesta no válida." |
Authorization | Bearer válido. | "Sesión no válida." (401) |
El payload se valida (estructura y opciones válidas) con consultas parametrizadas; no se aceptan inyecciones SQL.
Criterios de aceptación
Escenario 1: Evaluación aprobada
Dado que respondo todas las preguntas y alcanzo el puntaje mínimo, Cuando envío mis respuestas, Entonces el sistema calcula el puntaje en el backend, Y registra el intento como aprobado, Y habilita la finalización del curso (RF57).
Escenario 2: Evaluación reprobada
Dado que no alcanzo el puntaje mínimo, Cuando envío mis respuestas, Entonces el sistema registra el intento como no aprobado, Y me indica el puntaje y que puedo reintentar.
Escenario 3: Respuestas incompletas o inválidas
Dado que dejo preguntas sin responder o envío una opción inexistente,
Cuando envío,
Entonces el sistema responde 400 con el mensaje correspondiente.
Escenario 4: No exposición de la clave (seguridad)
Dado que inspecciono las respuestas de la red, Cuando cargo el cuestionario, Entonces nunca recibo cuáles son las respuestas correctas.
Criterios no funcionales
- Evaluación en backend; respuesta < 1 s.
- Comunicación TLS 1.2+.