Saltar al contenido principal

🧪 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:

RolPropósitoCómo Crearlo
ADMINCrear y gestionar hackathonsScript create-admin.ts o desde /admin/users
ORGANIZERCrear y gestionar hackathons (alternativa a ADMIN)Desde /admin/users cambiar rol de un PARTICIPANT
PARTICIPANTRegistrarse en hackathonsRegistro normal en /onboarding (rol por defecto)

🚀 Paso 1: Preparar Usuarios de Prueba

Opción A: Crear ADMIN (Recomendado para empezar)

  1. Regístrate en Clerk con un email (ej: admin@puntohack.test)
  2. 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
  3. Ejecuta el script:
    pnpm exec tsx scripts/create-admin.ts
  4. 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

  1. Inicia sesión como ADMIN
  2. Ve a /admin/users
  3. Busca un usuario PARTICIPANT (o crea uno nuevo registrándote con otro email)
  4. Cambia su rol a ORGANIZER usando el selector de roles

Opción C: Crear PARTICIPANT

  1. Regístrate en Clerk con un email diferente (ej: participant@puntohack.test)
  2. 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:

  1. Inicia sesión como ADMIN o ORGANIZER

  2. Ve a /admin/hackathons/create

  3. 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
    • Criterio 2:
      • Nombre: Calidad Técnica
      • Descripción: ¿Qué tan bien implementada está la solución?
      • Peso: 4
      • Puntaje Máximo: 10
    • Criterio 3:
      • Nombre: Diseño UX/UI
      • Descripción: ¿Qué tan intuitiva y atractiva es la interfaz?
      • Peso: 2
      • Puntaje Máximo: 10
  4. Haz clic en "Crear Hackathon"

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

Escenario 2: Publicar Hackathon

Usuario: ADMIN o ORGANIZER
Ruta: /admin/hackathons/[slug]

Pasos:

  1. Ve a /admin/hackathons/hackathon-innovacion-2025 (o el slug que usaste)
  2. Verifica que el hackathon esté en estado DRAFT
  3. Haz clic en "Publicar Hackathon" (botón azul en la parte superior)
  4. Confirma la publicación
  5. Verifica:
    • ✅ El estado cambia a REGISTRATION
    • ✅ El hackathon ahora es visible en /hackathons (página pública)
    • ✅ Si la fecha de registrationOpensAt es 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:

  1. Cierra sesión (si estás como ADMIN/ORGANIZER)

  2. Inicia sesión como PARTICIPANT

  3. Ve a /hackathons

  4. Verifica:

    • ✅ Aparece el hackathon que creaste (si está publicado)
    • ✅ Muestra el estado "Abierto a Registro"
    • ✅ Muestra el número de participantes y criterios
  5. Haz clic en el hackathon para ver el detalle

  6. 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
  7. Haz clic en "Registrarse en este Hackathon"

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

  1. Ve a /admin/hackathons/hackathon-innovacion-2025

  2. Modifica algunos campos:

    • Cambia el nombre
    • Modifica la descripción
    • Ajusta el tamaño máximo de equipo a 6
  3. 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
  4. Haz clic en "Guardar Cambios"

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

  1. Ve a /admin/hackathons/hackathon-innovacion-2025/dashboard

  2. 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)
  3. 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:

  1. 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)
  2. Llama manualmente al cron (en desarrollo):

    curl -X GET http://localhost:3000/api/cron/update-hackathon-states \
    -H "Authorization: Bearer tu-CRON_SECRET"
  3. 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:

  1. Ve a /admin/hackathons/create
  2. Completa el formulario con fechas desordenadas:
    • registrationClosesAt antes de registrationOpensAt
    • startsAt antes de registrationClosesAt
    • 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:

  1. Crea un hackathon con slug test-hackathon
  2. 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:

  1. Como PARTICIPANT, regístrate en un hackathon
  2. 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:

  1. Crea un hackathon y publícalo
  2. Cambia manualmente el estado a RUNNING (o espera a que el cron lo cambie)
  3. 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:

  1. Crea un hackathon SIN agregar criterios
  2. 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:

  1. Inicia sesión como PARTICIPANT
  2. 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:

  1. Crea un hackathon y publícalo (estado REGISTRATION)
  2. Ve a editar
  3. Intenta extender startsAt má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

  1. Usa fechas realistas pero cercanas: Usa fechas de esta semana para poder probar el cron job rápidamente.

  2. Crea múltiples usuarios: Usa diferentes navegadores o modo incógnito para tener múltiples sesiones activas.

  3. Prueba el cron manualmente: En desarrollo, puedes llamar al endpoint del cron directamente para probar cambios de estado.

  4. Verifica en la base de datos: Usa Prisma Studio para verificar que los datos se guardan correctamente:

    pnpm prisma studio
  5. 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! 🚀