🧪 Guía de Pruebas - Módulo 2: Hackathons Module
Fecha: 2025-01-XX
Módulo: Hackathons Module
Estado: ✅ Listo para pruebas
📋 Resumen de Roles Necesarios
Para probar completamente el Módulo 2, necesitas 3 usuarios con diferentes roles:
| Rol | Propósito | Cómo Crearlo |
|---|---|---|
| ADMIN | Crear y gestionar hackathons | Script create-admin.ts o desde /admin/users |
| ORGANIZER | Crear y gestionar hackathons (alternativa a ADMIN) | Desde /admin/users cambiar rol de un PARTICIPANT |
| PARTICIPANT | Registrarse en hackathons | Registro normal en /onboarding (rol por defecto) |
🚀 Paso 1: Preparar Usuarios de Prueba
Opción A: Crear ADMIN (Recomendado para empezar)
- Regístrate en Clerk con un email (ej:
admin@puntohack.test) - Obtén tu userId de Clerk:
- Abre la consola del navegador (F12)
- Ejecuta:
window.Clerk?.user?.id - O ve a Clerk Dashboard > Users > [Tu usuario] > User ID
- Ejecuta el script:
pnpm exec tsx scripts/create-admin.ts - Ingresa los datos:
- Email: El mismo que usaste en Clerk
- Nombre: Tu nombre
- userId: El userId que obtuviste (debe empezar con
user_)
Opción B: Crear ORGANIZER desde ADMIN
- Inicia sesión como ADMIN
- Ve a
/admin/users - Busca un usuario PARTICIPANT (o crea uno nuevo registrándote con otro email)
- Cambia su rol a ORGANIZER usando el selector de roles
Opción C: Crear PARTICIPANT
- Regístrate en Clerk con un email diferente (ej:
participant@puntohack.test) - Completa el onboarding en
/onboarding- El rol por defecto es PARTICIPANT
- No necesitas cambiar nada
🎯 Paso 2: Probar Flujo Completo
Escenario 1: ADMIN/ORGANIZER crea un Hackathon
Usuario: ADMIN o ORGANIZER
Ruta: /admin/hackathons/create
Pasos:
-
Inicia sesión como ADMIN o ORGANIZER
-
Ve a
/admin/hackathons/create -
Completa el formulario con estos datos de ejemplo:
Información Básica:
- Nombre:
Hackathon de Innovación 2025 - Slug:
hackathon-innovacion-2025 - Descripción:
Un hackathon para desarrollar soluciones innovadoras usando tecnologías modernas. Los participantes trabajarán en equipos para crear proyectos que resuelvan problemas reales.
Fechas (⚠️ IMPORTANTE: Deben seguir este orden estricto):
- Apertura de Registro:
2025-02-01 00:00(1 de febrero) - Cierre de Registro:
2025-02-15 23:59(15 de febrero) - Inicio del Hackathon:
2025-02-20 09:00(20 de febrero) - Fin del Hackathon:
2025-02-22 18:00(22 de febrero) - Deadline de Submissions:
2025-02-22 17:00(22 de febrero, antes del fin) - Inicio de Evaluación:
2025-02-23 09:00(23 de febrero) - Fin de Evaluación:
2025-02-25 18:00(25 de febrero)
Configuración de Equipos:
- Tamaño Mínimo:
1 - Tamaño Máximo:
5
Criterios de Evaluación (agrega al menos 1):
- Criterio 1:
- Nombre:
Innovación - Descripción:
¿Qué tan innovadora es la solución propuesta? - Peso:
3 - Puntaje Máximo:
10
- Nombre:
- Criterio 2:
- Nombre:
Calidad Técnica - Descripción:
¿Qué tan bien implementada está la solución? - Peso:
4 - Puntaje Máximo:
10
- Nombre:
- Criterio 3:
- Nombre:
Diseño UX/UI - Descripción:
¿Qué tan intuitiva y atractiva es la interfaz? - Peso:
2 - Puntaje Máximo:
10
- Nombre:
- Nombre:
-
Haz clic en "Crear Hackathon"
-
Verifica:
- ✅ Deberías ser redirigido a
/admin/hackathons/hackathon-innovacion-2025/dashboard - ✅ El hackathon aparece con estado DRAFT
- ✅ Las estadísticas muestran 0 participantes, 0 equipos, 0 submissions
- ✅ Deberías ser redirigido a
Escenario 2: Publicar Hackathon
Usuario: ADMIN o ORGANIZER
Ruta: /admin/hackathons/[slug]
Pasos:
- Ve a
/admin/hackathons/hackathon-innovacion-2025(o el slug que usaste) - Verifica que el hackathon esté en estado DRAFT
- Haz clic en "Publicar Hackathon" (botón azul en la parte superior)
- Confirma la publicación
- Verifica:
- ✅ El estado cambia a REGISTRATION
- ✅ El hackathon ahora es visible en
/hackathons(página pública) - ✅ Si la fecha de
registrationOpensAtes futura, verás un mensaje de error
Nota: Para que la publicación funcione, la fecha registrationOpensAt debe ser hoy o en el pasado. Si usaste fechas futuras, ajusta registrationOpensAt a una fecha pasada antes de publicar.
Escenario 3: PARTICIPANT se registra en Hackathon
Usuario: PARTICIPANT
Ruta: /hackathons/[slug]
Pasos:
-
Cierra sesión (si estás como ADMIN/ORGANIZER)
-
Inicia sesión como PARTICIPANT
-
Ve a
/hackathons -
Verifica:
- ✅ Aparece el hackathon que creaste (si está publicado)
- ✅ Muestra el estado "Abierto a Registro"
- ✅ Muestra el número de participantes y criterios
-
Haz clic en el hackathon para ver el detalle
-
Verifica la información:
- ✅ Todas las fechas se muestran correctamente
- ✅ Los criterios de evaluación están listados
- ✅ La configuración de equipos se muestra
-
Haz clic en "Registrarse en este Hackathon"
-
Verifica:
- ✅ El botón cambia a "✅ Estás registrado en este hackathon"
- ✅ Aparece un botón "Desregistrarse"
- ✅ El contador de participantes aumenta en el dashboard del organizador
Escenario 4: Editar Hackathon (Extensiones de Fechas)
Usuario: ADMIN o ORGANIZER
Ruta: /admin/hackathons/[slug]
Pasos:
-
Ve a
/admin/hackathons/hackathon-innovacion-2025 -
Modifica algunos campos:
- Cambia el nombre
- Modifica la descripción
- Ajusta el tamaño máximo de equipo a
6
-
Si el hackathon está en curso (REGISTRATION, RUNNING, JUDGING):
- ✅ Solo puedes extender fechas de la fase siguiente
- ✅ Máximo +7 días de extensión
- ✅ No puedes acortar fechas
- ✅ No puedes modificar fechas de la fase actual
-
Haz clic en "Guardar Cambios"
-
Verifica:
- ✅ Los cambios se guardan correctamente
- ✅ Eres redirigido al dashboard
Escenario 5: Ver Dashboard del Organizador
Usuario: ADMIN o ORGANIZER
Ruta: /admin/hackathons/[slug]/dashboard
Pasos:
-
Ve a
/admin/hackathons/hackathon-innovacion-2025/dashboard -
Verifica las estadísticas:
- ✅ Estado del hackathon
- ✅ Número de participantes (debe coincidir con los registrados)
- ✅ Número de equipos (0 por ahora, se implementará en Módulo 3)
- ✅ Número de submissions (0 por ahora, se implementará en Módulo 4)
-
Verifica las acciones disponibles:
- ✅ Botón "Editar Hackathon"
- ✅ Botón "Ver Página Pública"
Escenario 6: Cron Job (Cambios Automáticos de Estado)
Usuario: Sistema (automático)
Ruta: /api/cron/update-hackathon-states
Pasos:
-
Crea un hackathon con fechas pasadas para probar el cron:
- Estado:
REGISTRATION registrationClosesAt: Fecha pasada (ej: ayer)judgingStartsAt: Fecha pasada (ej: hace 2 días)judgingEndsAt: Fecha pasada (ej: hace 1 día)
- Estado:
-
Llama manualmente al cron (en desarrollo):
curl -X GET http://localhost:3000/api/cron/update-hackathon-states \
-H "Authorization: Bearer tu-CRON_SECRET" -
Verifica:
- ✅ El hackathon cambia de estado automáticamente según las fechas
- ✅ REGISTRATION → RUNNING (cuando
now >= registrationClosesAt) - ✅ RUNNING → JUDGING (cuando
now >= judgingStartsAt) - ✅ JUDGING → FINISHED (cuando
now >= judgingEndsAt)
Nota: En producción, el cron se ejecuta automáticamente cada minuto. En desarrollo, puedes llamarlo manualmente.
🐛 Casos de Prueba (Validaciones)
Validación 1: Orden de Fechas
Prueba: Intentar crear un hackathon con fechas en orden incorrecto
Pasos:
- Ve a
/admin/hackathons/create - Completa el formulario con fechas desordenadas:
registrationClosesAtantes deregistrationOpensAtstartsAtantes deregistrationClosesAt- etc.
Resultado Esperado:
- ✅ Error: "Las fechas deben seguir el orden correcto"
- ✅ El hackathon NO se crea
Validación 2: Slug Duplicado
Prueba: Intentar crear un hackathon con un slug que ya existe
Pasos:
- Crea un hackathon con slug
test-hackathon - Intenta crear otro con el mismo slug
Resultado Esperado:
- ✅ Error: "Ya existe un hackathon con ese slug"
- ✅ El hackathon NO se crea
Validación 3: Registro Duplicado
Prueba: Intentar registrarse dos veces en el mismo hackathon
Pasos:
- Como PARTICIPANT, regístrate en un hackathon
- Intenta registrarte de nuevo
Resultado Esperado:
- ✅ Error: "Ya estás registrado en este hackathon"
- ✅ El botón muestra "✅ Estás registrado"
Validación 4: Registro Fuera de Período
Prueba: Intentar registrarse cuando el hackathon no está en REGISTRATION
Pasos:
- Crea un hackathon y publícalo
- Cambia manualmente el estado a RUNNING (o espera a que el cron lo cambie)
- Como PARTICIPANT, intenta registrarte
Resultado Esperado:
- ✅ Error: "El hackathon no está abierto para registro"
- ✅ El botón de registro NO aparece
Validación 5: Publicar sin Criterios
Prueba: Intentar publicar un hackathon sin criterios
Pasos:
- Crea un hackathon SIN agregar criterios
- Intenta publicarlo
Resultado Esperado:
- ✅ Error: "El hackathon debe tener al menos un criterio de evaluación"
- ✅ El hackathon NO se publica
Validación 6: RBAC - PARTICIPANT no puede crear hackathons
Prueba: Intentar acceder a /admin/hackathons/create como PARTICIPANT
Pasos:
- Inicia sesión como PARTICIPANT
- Intenta acceder a
/admin/hackathons/create
Resultado Esperado:
- ✅ Redirección a
/dashboard - ✅ No puedes crear hackathons
Validación 7: Extensiones de Fechas (Máximo +7 días)
Prueba: Intentar extender una fecha más de 7 días
Pasos:
- Crea un hackathon y publícalo (estado REGISTRATION)
- Ve a editar
- Intenta extender
startsAtmás de 7 días desde la fecha original
Resultado Esperado:
- ✅ Error: "La extensión de startsAt no puede exceder 7 días"
- ✅ El cambio NO se guarda
📝 Checklist de Pruebas
Usa este checklist para asegurarte de probar todo:
Funcionalidades Core
- Crear hackathon como ADMIN
- Crear hackathon como ORGANIZER
- Publicar hackathon (DRAFT → REGISTRATION)
- Editar hackathon
- Eliminar hackathon
- Agregar criterio a hackathon
- Actualizar criterio
- Eliminar criterio
Participaciones
- PARTICIPANT se registra en hackathon
- PARTICIPANT se desregistra de hackathon
- Validación: no puede registrarse dos veces
- Validación: no puede registrarse fuera de período
Validaciones
- Orden de fechas (debe fallar si está mal)
- Slug duplicado (debe fallar)
- Publicar sin criterios (debe fallar)
- RBAC: PARTICIPANT no puede crear (debe redirigir)
- Extensiones de fechas: máximo +7 días (debe fallar si excede)
UI
- Lista pública de hackathons (
/hackathons) - Detalle público de hackathon (
/hackathons/[slug]) - Dashboard del organizador (
/admin/hackathons/[slug]/dashboard) - Formulario de creación funciona correctamente
- Formulario de edición funciona correctamente
Cron Job
- Cambio automático REGISTRATION → RUNNING
- Cambio automático RUNNING → JUDGING
- Cambio automático JUDGING → FINISHED
🔧 Configuración Necesaria
Variables de Entorno
Asegúrate de tener configurado CRON_SECRET en .env.local:
CRON_SECRET=tu-secret-super-seguro-aqui
Base de Datos
Asegúrate de que la migración se haya ejecutado:
pnpm prisma db push
pnpm prisma generate
💡 Tips para Pruebas
-
Usa fechas realistas pero cercanas: Usa fechas de esta semana para poder probar el cron job rápidamente.
-
Crea múltiples usuarios: Usa diferentes navegadores o modo incógnito para tener múltiples sesiones activas.
-
Prueba el cron manualmente: En desarrollo, puedes llamar al endpoint del cron directamente para probar cambios de estado.
-
Verifica en la base de datos: Usa Prisma Studio para verificar que los datos se guardan correctamente:
pnpm prisma studio -
Revisa la consola: Los errores de validación aparecen tanto en la UI como en la consola del navegador.
🎯 Resultado Esperado
Después de completar todas las pruebas, deberías poder:
✅ Crear hackathons completos con criterios
✅ Publicar hackathons para que sean visibles
✅ Participantes pueden registrarse y desregistrarse
✅ El cron cambia estados automáticamente
✅ Las validaciones funcionan correctamente
✅ El RBAC protege las rutas adecuadamente
❓ Problemas Comunes
"No puedo publicar el hackathon"
- Causa: Falta al menos un criterio
- Solución: Agrega al menos un criterio antes de publicar
"No puedo registrarme"
- Causa: El hackathon no está en estado REGISTRATION
- Solución: Publica el hackathon primero
"Error al crear hackathon: fechas inválidas"
- Causa: Las fechas no siguen el orden correcto
- Solución: Revisa que
registrationOpensAt < registrationClosesAt < startsAt < endsAt < submissionDeadline < judgingStartsAt < judgingEndsAt
"No veo el hackathon en /hackathons"
- Causa: El hackathon está en estado DRAFT
- Solución: Publícalo primero (cambia a REGISTRATION)
¡Listo para probar! 🚀