🧪 Guía de Testing: Sistema de Notificaciones de Equipos
📋 Requisitos Previos
Usuarios Necesarios
Necesitas crear al menos 3 usuarios PARTICIPANT con diferentes emails:
-
Usuario A (Creador del equipo)
- Email:
participante1@test.com - Rol:
PARTICIPANT - Registrado en Hackathon de prueba
- Email:
-
Usuario B (Invitado válido)
- Email:
participante2@test.com - Rol:
PARTICIPANT - Registrado en el mismo Hackathon de prueba
- NO tiene equipo en ese hackathon
- Email:
-
Usuario C (Invitado con problemas)
- Email:
participante3@test.com - Rol:
PARTICIPANT - Opcional: para probar casos de error
- Email:
Hackathon de Prueba
- Estado:
REGISTRATIONoRUNNING - Fechas válidas (registrationOpensAt < now < registrationClosesAt)
- submissionDeadline en el futuro
✅ Casos de Prueba
1. Crear Equipo e Invitar por Email
Pasos:
- Inicia sesión como Usuario A
- Ve a un hackathon en estado
REGISTRATIONoRUNNING - Haz clic en "Crear Equipo"
- Completa el formulario:
- Nombre: "Equipo Test"
- Descripción: "Equipo de prueba"
- En "Invitar Participantes por Email": Ingresa el email de Usuario B
- 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:
- Inicia sesión como Usuario B (el invitado)
- 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:
- Inicia sesión como Usuario B
- Haz clic en "Notificaciones" en el navbar
- 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:
- En la página de notificaciones como Usuario B
- 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:
- Crea otra invitación para Usuario B (o usa Usuario C)
- Inicia sesión como el usuario invitado
- Ve a
/notifications - 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
REJECTEDen la BD
6. Validaciones: Email No Existe
Pasos:
- Inicia sesión como Usuario A
- Crea un equipo
- En "Invitar Participantes por Email", ingresa:
noexiste@test.com - 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:
- Crea Usuario C pero NO lo registres en el hackathon
- Inicia sesión como Usuario A
- Crea un equipo
- 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:
- Asegúrate de que Usuario B ya tiene equipo en el hackathon
- Inicia sesión como Usuario A
- Crea un equipo
- 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:
- Inicia sesión como Usuario A
- Crea un equipo e invita a Usuario B
- 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:
- Registra Usuario B en 5 hackathons activas (REGISTRATION, RUNNING o JUDGING)
- 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:
- Inicia sesión como Usuario A
- Crea un equipo
- Invita a múltiples usuarios válidos (hasta 10)
- 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:
- Usuario B tiene equipo en Hackathon A
- Usuario B está registrado en Hackathon B (sin equipo)
- 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-invitationsretorna 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
- Límite de Hackathons: Por defecto es 5, configurable en
src/modules/hackathons/constants.ts - Estados Activos: Solo
REGISTRATION,RUNNINGyJUDGINGcuentan para el límite - Auto-registro: Si un usuario acepta una invitación y no está registrado, se registra automáticamente (si está dentro del límite)
- Equipos Múltiples: Un usuario puede tener equipos en diferentes hackathons sin conflicto
- Validaciones: Todas las validaciones son específicas por hackathon