11 KiB
Reporte de Pruebas Manuales QA
Fecha: 2026-01-08 Versión: 1.0 Ejecutor: QA Automatizado con Playwright MCP Ambiente: Desarrollo Local (localhost:4200 / localhost:5000)
Resumen Ejecutivo
| Métrica | Valor |
|---|---|
| Total de pruebas | 12 |
| Pruebas exitosas | 11 |
| Defectos encontrados | 2 |
| Severidad crítica | 1 |
| Severidad media | 1 |
Casos de Prueba Ejecutados
CP-001: Registro de Estudiante
- Estado: ✅ PASÓ
- Pasos: Navegar a /register → Completar formulario → Click "Crear Cuenta"
- Resultado: Cuenta creada exitosamente, código de recuperación mostrado
- Screenshot:
qa-test-04-register-page.png,qa-test-05-register-filled.png,qa-test-06-register-success-recovery-code.png
CP-002: Visualización de Código de Recuperación
- Estado: ✅ PASÓ
- Pasos: Después del registro, verificar que se muestre el código
- Resultado: Código "2DJFYE2GCRUJ" mostrado con advertencia de guardarlo
- Screenshot:
qa-test-06-register-success-recovery-code.png
CP-003: Dashboard de Estudiante
- Estado: ✅ PASÓ
- Pasos: Login → Verificar dashboard con información del estudiante
- Resultado: Dashboard muestra nombre, email, créditos, materias inscritas y programa de créditos
- Screenshot:
qa-test-07-dashboard-working.png,qa-test-15-login-after-reset-success.png
CP-004: Inscripción en Materias
- Estado: ✅ PASÓ
- Pasos: Navegar a "Mis Materias" → Click "Inscribir" en una materia
- Resultado: Materia inscrita correctamente, créditos actualizados
- Screenshot:
qa-test-08-enrollment-page.png
CP-005: Restricción de Mismo Profesor
- Estado: ✅ PASÓ
- Pasos: Inscribir una materia → Intentar inscribir otra materia del mismo profesor
- Resultado: Botón deshabilitado con mensaje "Ya tienes una materia con este profesor"
- Screenshot:
qa-test-09-enrollment-restriction-working.png
CP-006: Límite Máximo de 3 Materias
- Estado: ✅ PASÓ
- Pasos: Inscribir 3 materias → Verificar que no se pueda inscribir más
- Resultado: Todas las materias disponibles muestran "Máximo 3 materias alcanzado"
- Screenshot:
qa-test-10-max-enrollment-reached.png
CP-007: Visualización de Compañeros de Clase
- Estado: ✅ PASÓ
- Pasos: Navegar a "Compañeros" → Verificar lista de materias con compañeros
- Resultado: Muestra las 3 materias inscritas con "0 compañeros" (correcto para nuevo estudiante)
- Screenshot:
qa-test-11-classmates-page.png
CP-008: Página de Recuperación de Contraseña
- Estado: ✅ PASÓ
- Pasos: Click "Olvidaste tu contraseña?" → Verificar formulario
- Resultado: Formulario con campos: usuario, código de recuperación, nueva contraseña
- Screenshot:
qa-test-12-reset-password-page.png
CP-009: Reseteo de Contraseña con Código
- Estado: ✅ PASÓ
- Pasos: Completar formulario de reset → Click "Cambiar Contraseña"
- Resultado: Contraseña actualizada correctamente
- Screenshot:
qa-test-13-reset-password-filled.png,qa-test-14-reset-password-success.png
CP-010: Login con Nueva Contraseña
- Estado: ✅ PASÓ
- Pasos: Login con usuario y nueva contraseña
- Resultado: Acceso exitoso al dashboard
- Screenshot:
qa-test-15-login-after-reset-success.png
CP-011: Cancelar Inscripción (Unenroll)
- Estado: ❌ FALLÓ
- Pasos: En "Mis Materias" → Click "Cancelar" en una materia inscrita
- Resultado: Error 400 Bad Request - "Datos inválidos"
- Screenshot:
qa-test-16-unenroll-error-defect.png
CP-012: Dashboard con Sesión Existente
- Estado: ⚠️ OBSERVACIÓN
- Pasos: Cargar aplicación con sesión existente (estudiante2)
- Resultado: Dashboard vacío inicialmente, se resuelve al reloguear
- Screenshot:
qa-test-02-dashboard-empty-defect.png
Defectos Encontrados
DEF-001: Error al Cancelar Inscripción
| Campo | Valor |
|---|---|
| ID | DEF-001 |
| Título | Error 400 al intentar cancelar inscripción de materia |
| Severidad | Crítica |
| Prioridad | Alta |
| Estado | Abierto |
| Componente | Backend - UnenrollStudent Mutation |
| Ambiente | Desarrollo |
Descripción: Al hacer click en el botón "Cancelar" para dar de baja una materia inscrita, el servidor responde con HTTP 400 Bad Request y el mensaje "Datos inválidos".
Pasos para Reproducir:
- Iniciar sesión como estudiante con materias inscritas
- Navegar a "Mis Materias" (/enrollment/{id})
- En la sección "Materias Inscritas", hacer click en "Cancelar"
- Observar el error en la notificación
Resultado Esperado: La materia debería ser removida de las inscripciones y los créditos actualizados.
Resultado Actual: Error 400 con mensaje "Datos inválidos". La inscripción no se cancela.
Evidencia:
- Screenshot:
qa-test-16-unenroll-error-defect.png - Console:
Failed to load resource: the server responded with a status of 400 (Bad Request)
Análisis Técnico Preliminar:
El error sugiere que la mutación unenrollStudent no está recibiendo el enrollmentId correctamente o hay un problema de validación en el backend.
DEF-002: Dashboard Vacío con Sesión Existente
| Campo | Valor |
|---|---|
| ID | DEF-002 |
| Título | Dashboard muestra contenido vacío al cargar con sesión existente |
| Severidad | Media |
| Prioridad | Media |
| Estado | Abierto |
| Componente | Frontend - StudentDashboard Component |
| Ambiente | Desarrollo |
Descripción: Cuando la aplicación se carga con una sesión existente en localStorage (sin hacer login fresco), el dashboard del estudiante muestra el área de contenido vacía.
Pasos para Reproducir:
- Iniciar sesión como cualquier estudiante
- Cerrar el navegador (sin logout)
- Abrir el navegador y navegar a la aplicación
- Observar que el dashboard está vacío
Resultado Esperado: El dashboard debería cargar y mostrar la información del estudiante (nombre, créditos, materias).
Resultado Actual: El área principal del dashboard está completamente vacía, solo se muestra el header de navegación.
Evidencia:
- Screenshot:
qa-test-02-dashboard-empty-defect.png
Análisis Técnico Preliminar:
Posible problema con la hidratación del estado del estudiante al restaurar la sesión desde localStorage. El studentId podría no estar disponible inmediatamente.
Capturas de Pantalla
Todas las capturas se encuentran en: .playwright-mcp/
| Archivo | Descripción |
|---|---|
| qa-test-01-dashboard-loading.png | Dashboard cargando |
| qa-test-02-dashboard-empty-defect.png | DEFECTO - Dashboard vacío |
| qa-test-03-login-page.png | Página de login |
| qa-test-04-register-page.png | Página de registro |
| qa-test-05-register-filled.png | Formulario de registro completado |
| qa-test-06-register-success-recovery-code.png | Código de recuperación mostrado |
| qa-test-07-dashboard-working.png | Dashboard funcionando |
| qa-test-08-enrollment-page.png | Página de inscripción |
| qa-test-09-enrollment-restriction-working.png | Restricción de profesor funcionando |
| qa-test-10-max-enrollment-reached.png | Límite de 3 materias alcanzado |
| qa-test-11-classmates-page.png | Página de compañeros |
| qa-test-12-reset-password-page.png | Página de reset de contraseña |
| qa-test-13-reset-password-filled.png | Formulario de reset completado |
| qa-test-14-reset-password-success.png | Reset exitoso |
| qa-test-15-login-after-reset-success.png | Login post-reset exitoso |
| qa-test-16-unenroll-error-defect.png | DEFECTO - Error al cancelar |
Reglas de Negocio Verificadas
| Regla | Estado | Evidencia |
|---|---|---|
| 10 materias disponibles | ✅ Verificado | 10 materias listadas en enrollment |
| 3 créditos por materia | ✅ Verificado | Cada materia muestra "3 créditos" |
| Máximo 3 materias (9 créditos) | ✅ Verificado | qa-test-10-max-enrollment-reached.png |
| 5 profesores con 2 materias c/u | ✅ Verificado | García, Martínez, López, Rodríguez, Hernández |
| No repetir profesor | ✅ Verificado | qa-test-09-enrollment-restriction-working.png |
| Ver compañeros (solo nombres) | ✅ Verificado | qa-test-11-classmates-page.png |
Conclusiones
-
Funcionalidad Core: El 91% de las funcionalidades principales operan correctamente.
-
Defecto Crítico: La imposibilidad de cancelar inscripciones (DEF-001) impacta directamente la experiencia del usuario y debe ser corregida antes de cualquier despliegue.
-
Defecto Medio: El dashboard vacío con sesión existente (DEF-002) puede confundir a los usuarios pero tiene workaround (re-login).
-
Reglas de Negocio: Todas las reglas del dominio están implementadas y funcionando correctamente.
-
Recuperación de Contraseña: La nueva funcionalidad de código de recuperación opera sin problemas.
Correcciones Aplicadas
DEF-001: Error al Cancelar Inscripción - CORREGIDO
Causa Raíz: Desincronización entre frontend y backend. El backend requería dos parámetros (enrollmentId y studentId) para la autorización, pero el frontend solo enviaba enrollmentId.
Solución Implementada:
-
Archivo:
src/frontend/src/app/core/graphql/mutations/students.mutations.tsmutation UnenrollStudent($enrollmentId: Int!, $studentId: Int!) { unenrollStudent(enrollmentId: $enrollmentId, studentId: $studentId) { success } } -
Archivo:
src/frontend/src/app/core/services/enrollment.service.tsvariables: { enrollmentId, studentId }
DEF-002: Dashboard Vacío con Sesión Existente - CORREGIDO
Causa Raíz: Cuando la sesión almacenada en localStorage hacía referencia a un estudiante que ya no existía en la base de datos (por ejemplo, después de un reset de BD), el componente no manejaba el caso de student = null.
Solución Implementada:
Archivo: src/frontend/src/app/features/dashboard/pages/student-dashboard/student-dashboard.component.ts
next: (result) => {
if (result.data?.student) {
this.student.set(result.data.student);
} else {
this.error.set('No se encontraron tus datos. Tu sesion puede haber expirado.');
this.authService.logout();
}
this.loading.set(false);
},
Próximos Pasos
Corregir DEF-001 (Crítico) - Error al cancelar inscripciónInvestigar DEF-002 (Medio) - Dashboard vacío con sesión existente- Re-ejecutar pruebas de regresión
- Pruebas de integración E2E automatizadas