academia/docs/qa/QA-REPORT-2026-01-08-MANUAL...

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:

  1. Iniciar sesión como estudiante con materias inscritas
  2. Navegar a "Mis Materias" (/enrollment/{id})
  3. En la sección "Materias Inscritas", hacer click en "Cancelar"
  4. 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:

  1. Iniciar sesión como cualquier estudiante
  2. Cerrar el navegador (sin logout)
  3. Abrir el navegador y navegar a la aplicación
  4. 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

  1. Funcionalidad Core: El 91% de las funcionalidades principales operan correctamente.

  2. Defecto Crítico: La imposibilidad de cancelar inscripciones (DEF-001) impacta directamente la experiencia del usuario y debe ser corregida antes de cualquier despliegue.

  3. Defecto Medio: El dashboard vacío con sesión existente (DEF-002) puede confundir a los usuarios pero tiene workaround (re-login).

  4. Reglas de Negocio: Todas las reglas del dominio están implementadas y funcionando correctamente.

  5. 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:

  1. Archivo: src/frontend/src/app/core/graphql/mutations/students.mutations.ts

    mutation UnenrollStudent($enrollmentId: Int!, $studentId: Int!) {
      unenrollStudent(enrollmentId: $enrollmentId, studentId: $studentId) {
        success
      }
    }
    
  2. Archivo: src/frontend/src/app/core/services/enrollment.service.ts

    variables: { 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

  1. Corregir DEF-001 (Crítico) - Error al cancelar inscripción
  2. Investigar DEF-002 (Medio) - Dashboard vacío con sesión existente
  3. Re-ejecutar pruebas de regresión
  4. Pruebas de integración E2E automatizadas