Saltar al contenido principal

🧪 Guía de Testing: Sistema de Notificaciones de Equipos

📋 Requisitos Previos

Usuarios Necesarios

Necesitas crear al menos 3 usuarios PARTICIPANT con diferentes emails:

  1. Usuario A (Creador del equipo)

    • Email: participante1@test.com
    • Rol: PARTICIPANT
    • Registrado en Hackathon de prueba
  2. Usuario B (Invitado válido)

    • Email: participante2@test.com
    • Rol: PARTICIPANT
    • Registrado en el mismo Hackathon de prueba
    • NO tiene equipo en ese hackathon
  3. Usuario C (Invitado con problemas)

    • Email: participante3@test.com
    • Rol: PARTICIPANT
    • Opcional: para probar casos de error

Hackathon de Prueba

  • Estado: REGISTRATION o RUNNING
  • Fechas válidas (registrationOpensAt < now < registrationClosesAt)
  • submissionDeadline en el futuro

✅ Casos de Prueba

1. Crear Equipo e Invitar por Email

Pasos:

  1. Inicia sesión como Usuario A
  2. Ve a un hackathon en estado REGISTRATION o RUNNING
  3. Haz clic en "Crear Equipo"
  4. Completa el formulario:
    • Nombre: "Equipo Test"
    • Descripción: "Equipo de prueba"
    • En "Invitar Participantes por Email": Ingresa el email de Usuario B
  5. Haz clic en "Crear Equipo"

Resultado Esperado:

  • ✅ Equipo creado exitosamente
  • ✅ Se muestra el código de invitación
  • ✅ Se crea una invitación para Usuario B
  • ✅ Mensaje de éxito o advertencia si hay problemas

2. Ver Notificaciones en el Navbar

Pasos:

  1. Inicia sesión como Usuario B (el invitado)
  2. Observa el navbar

Resultado Esperado:

  • ✅ Aparece el link "Notificaciones" (solo para PARTICIPANT)
  • ✅ Hay un badge rojo con el número "1" indicando invitación pendiente

3. Ver Página de Notificaciones

Pasos:

  1. Inicia sesión como Usuario B
  2. Haz clic en "Notificaciones" en el navbar
  3. O ve directamente a /notifications

Resultado Esperado:

  • ✅ Se muestra la página de notificaciones
  • ✅ Aparece la invitación de Usuario A para unirse a "Equipo Test"
  • ✅ Se muestra:
    • Avatar/nombre del remitente (Usuario A)
    • Nombre del equipo
    • Nombre del hackathon
    • Fecha de la invitación
    • Número de miembros en el equipo
  • ✅ Botones "Rechazar" y "Aceptar"

4. Aceptar Invitación

Pasos:

  1. En la página de notificaciones como Usuario B
  2. Haz clic en "Aceptar" en la invitación

Resultado Esperado:

  • ✅ La invitación desaparece de la lista
  • ✅ El badge en el navbar se actualiza (desaparece o muestra 0)
  • ✅ El usuario se une automáticamente al equipo
  • ✅ Si no estaba registrado en el hackathon, se registra automáticamente (si está dentro del límite)

Verificación Adicional:

  • Ve al detalle del hackathon
  • Verifica que ahora aparece "Mi Equipo" o similar
  • Ve al detalle del equipo y confirma que Usuario B está en la lista de miembros

5. Rechazar Invitación

Pasos:

  1. Crea otra invitación para Usuario B (o usa Usuario C)
  2. Inicia sesión como el usuario invitado
  3. Ve a /notifications
  4. Haz clic en "Rechazar"

Resultado Esperado:

  • ✅ La invitación desaparece de la lista
  • ✅ El badge en el navbar se actualiza
  • ✅ El usuario NO se une al equipo
  • ✅ La invitación queda marcada como REJECTED en la BD

6. Validaciones: Email No Existe

Pasos:

  1. Inicia sesión como Usuario A
  2. Crea un equipo
  3. En "Invitar Participantes por Email", ingresa: noexiste@test.com
  4. Haz clic en "Crear Equipo"

Resultado Esperado:

  • ✅ Se muestra un error: "No existe en la plataforma"
  • ✅ El equipo se crea, pero NO se crea invitación para ese email
  • ✅ Se muestra mensaje detallado indicando qué emails fallaron

7. Validaciones: Email No Registrado en Hackathon

Pasos:

  1. Crea Usuario C pero NO lo registres en el hackathon
  2. Inicia sesión como Usuario A
  3. Crea un equipo
  4. Invita a Usuario C por email

Resultado Esperado:

  • ✅ Se muestra error: "No está registrado en este hackathon"
  • ✅ El equipo se crea, pero NO se crea invitación
  • ✅ Mensaje detallado con el email problemático

8. Validaciones: Email Ya Tiene Equipo

Pasos:

  1. Asegúrate de que Usuario B ya tiene equipo en el hackathon
  2. Inicia sesión como Usuario A
  3. Crea un equipo
  4. Intenta invitar a Usuario B

Resultado Esperado:

  • ✅ Se muestra error: "Ya pertenece a un equipo"
  • ✅ El equipo se crea, pero NO se crea invitación
  • ✅ Mensaje detallado

9. Validaciones: Invitación Duplicada

Pasos:

  1. Inicia sesión como Usuario A
  2. Crea un equipo e invita a Usuario B
  3. Desde el detalle del equipo, invita nuevamente a Usuario B (si hay funcionalidad para invitar desde el equipo)

Resultado Esperado:

  • ✅ La segunda invitación se omite silenciosamente
  • ✅ Solo existe una invitación pendiente
  • ✅ Mensaje de advertencia indicando emails omitidos

10. Límite de Hackathons Simultáneas

Pasos:

  1. Registra Usuario B en 5 hackathons activas (REGISTRATION, RUNNING o JUDGING)
  2. Intenta aceptar una invitación de un 6to hackathon

Resultado Esperado:

  • ✅ Error: "Ya estás registrado en 5 hackathon(s) activa(s). El límite es 5 hackathons simultáneas."
  • ✅ No se puede aceptar la invitación
  • ✅ No se registra automáticamente en el hackathon

Nota: Para probar esto fácilmente, puedes temporalmente cambiar MAX_SIMULTANEOUS_HACKATHONS a 2 en src/modules/hackathons/constants.ts


11. Múltiples Invitaciones

Pasos:

  1. Inicia sesión como Usuario A
  2. Crea un equipo
  3. Invita a múltiples usuarios válidos (hasta 10)
  4. Verifica que todos reciben la invitación

Resultado Esperado:

  • ✅ Se crean invitaciones para todos los emails válidos
  • ✅ Cada usuario ve su invitación en /notifications
  • ✅ Los badges en el navbar se actualizan correctamente

12. Equipos en Diferentes Hackathons

Pasos:

  1. Usuario B tiene equipo en Hackathon A
  2. Usuario B está registrado en Hackathon B (sin equipo)
  3. Usuario A (en Hackathon B) invita a Usuario B

Resultado Esperado:

  • ✅ La invitación se crea correctamente
  • Usuario B puede aceptar la invitación
  • Usuario B ahora tiene equipos en ambos hackathons
  • ✅ No hay conflictos

🔍 Verificaciones Adicionales

En la Base de Datos

-- Ver invitaciones pendientes
SELECT * FROM "TeamInvitation" WHERE status = 'PENDING';

-- Ver invitaciones de un usuario específico
SELECT * FROM "TeamInvitation"
WHERE email = 'participante2@test.com'
AND status = 'PENDING';

-- Ver equipos de un usuario
SELECT t.*, h.name as hackathon_name
FROM "Team" t
JOIN "TeamMember" tm ON t.id = tm."teamId"
JOIN "Hackathon" h ON t."hackathonId" = h.id
WHERE tm."profileId" = 'PROFILE_ID_AQUI';

En la Consola del Navegador

  • Verifica que no hay errores de JavaScript
  • Verifica que las llamadas a la API se completan correctamente
  • Revisa los logs de errores si hay problemas

🐛 Problemas Comunes y Soluciones

El badge no aparece

  • Verifica que el usuario está autenticado
  • Verifica que el usuario tiene rol PARTICIPANT
  • Revisa la consola del navegador para errores
  • Verifica que la API /api/notifications/team-invitations retorna datos

Las invitaciones no se crean

  • Verifica que los emails existen en la BD (tabla Profile)
  • Verifica que los usuarios están registrados en el hackathon
  • Verifica que los usuarios NO tienen equipo en ese hackathon
  • Revisa los logs del servidor para errores

Error al aceptar invitación

  • Verifica que el usuario está registrado en el hackathon
  • Verifica el límite de hackathons simultáneas
  • Verifica que el equipo no está lleno
  • Verifica que no ha pasado submissionDeadline

📝 Checklist de Testing

  • Crear equipo e invitar por email
  • Ver notificaciones en navbar (badge)
  • Ver página de notificaciones
  • Aceptar invitación
  • Rechazar invitación
  • Validar email no existe
  • Validar email no registrado
  • Validar email ya tiene equipo
  • Validar invitación duplicada
  • Validar límite de hackathons simultáneas
  • Múltiples invitaciones
  • Equipos en diferentes hackathons
  • Verificar en BD que los datos son correctos
  • Verificar que no hay errores en consola

🚀 Comandos Útiles

# Ver logs del servidor
pnpm dev

# Verificar tipos TypeScript
pnpm tsc --noEmit

# Ejecutar tests (si existen)
pnpm test

# Ver estructura de la BD
pnpm prisma studio

📌 Notas Importantes

  1. Límite de Hackathons: Por defecto es 5, configurable en src/modules/hackathons/constants.ts
  2. Estados Activos: Solo REGISTRATION, RUNNING y JUDGING cuentan para el límite
  3. Auto-registro: Si un usuario acepta una invitación y no está registrado, se registra automáticamente (si está dentro del límite)
  4. Equipos Múltiples: Un usuario puede tener equipos en diferentes hackathons sin conflicto
  5. Validaciones: Todas las validaciones son específicas por hackathon