Skip to content

Verificación post-deploy ​

Smoke tests que debes correr en orden tras cada deploy a producción. Cada test valida una integración crítica. Si uno falla, no avances — diagnostica antes.

0 · Prerequisitos ​

  • El deploy terminó sin errores.
  • Las 12 casillas del checklist maestro están marcadas.
  • Tienes acceso a:
    • Un inbox real para recibir correos de prueba
    • Tu tarjeta real (para refund inmediato) o Stripe test cards
    • Acceso a los logs del servidor backend
    • Acceso al dashboard de Stripe

Duración estimada del ciclo completo: 30–45 minutos.


1 · Health check del backend ​

bash
curl -i https://api.humae.com.mx/api/v1/health

Esperado:

HTTP/2 200
content-type: application/json

{
  "success": true,
  "message": "OK",
  "data": {
    "app": "ok",
    "database": "ok",
    "cache": "ok",
    "queue": "ok"
  }
}

Si falla:

  • database: "error" → revisar DB_* en .env + conectividad al MySQL.
  • cache: "error" → revisar REDIS_* y que Redis esté corriendo.
  • queue: "error" → revisar que el worker esté activo (supervisorctl status).

2 · Frontend carga y conecta ​

Abrir en el browser: https://humae.com.mx

Esperado:

  • Landing carga sin errores de JS en la consola.
  • Network tab: las llamadas a https://api.humae.com.mx/api/v1/* devuelven 200 (o 401 si requieren auth).
  • No errores de CORS.

Si hay errores de CORS:

  • Revisar FRONTEND_URL y SANCTUM_STATEFUL_DOMAINS en el backend.
  • Revisar config/cors.php include el origen correcto.
  • Clear Laravel cache: php artisan config:clear.

3 · Registro + verificación de email (flujo candidato) ​

3.1 Registrar cuenta de prueba ​

En el browser:

  1. Ir a https://humae.com.mx/register.
  2. Llenar: nombre Test Usuario, email real tuyo (recibirás correos), password Password123, checkbox de términos.
  3. Enviar → debe redirigir a /verify-email.

3.2 Recibir correo ​

Revisa tu inbox en ≤ 2 minutos:

  • Sender: HUMAE <hola@humae.com.mx>
  • Subject: "Verifica tu correo para activar tu cuenta HUMAE"
  • Link: clic en "Verificar correo".

Si no llega:

  • Revisa spam.
  • sudo tail -n 50 /var/log/mail.log → buscar tu email; el estado debe ser status=sent.
  • mailq → no debería estar acumulando mensajes.
  • Logs backend: tail -f storage/logs/laravel-$(date +%F).log | grep -i mail.

3.3 Verificar ​

Clic en el link → debe redirigir a /login con toast de éxito.

En DB:

sql
SELECT email_verified_at, status FROM users WHERE email = 'tu_email@gmail.com';

Debe tener email_verified_at con fecha reciente y status = 'active'.


4 · Login + sesión persistente ​

  1. Login con el usuario recién creado.
  2. Debe redirigir a /dashboard.
  3. Cerrar el browser.
  4. Volver a https://humae.com.mx/dashboard → debe seguir logueado (token persistido).

Si no persiste:

  • Revisar SESSION_DRIVER=redis y SESSION_DOMAIN=.humae.com.mx.
  • Revisar que las cookies de Sanctum se setean con Secure; SameSite=Lax.

5 · Stripe Checkout → activación de membresía ​

5.1 Iniciar checkout ​

En el dashboard del candidato → Membresía → Contratar membresía.

El backend debe:

  • Crear un Payment con status = pending.
  • Llamar a Stripe y devolver la URL.
  • El frontend redirige a checkout.stripe.com.

5.2 Pagar ​

En Stripe Checkout:

  • Tarjeta de prueba (si el dashboard está en test mode): 4242 4242 4242 4242, fecha futura, CVC cualquiera.
  • O tu tarjeta real si ya estás en live mode (montos bajos y con intención de refund).

5.3 Webhook llega al backend ​

Stripe debe disparar checkout.session.completed al endpoint del backend.

En Stripe Dashboard → Webhooks → tu endpoint → últimos eventos:

  • Debe aparecer el evento con status succeeded (200).
  • Si es failed (4xx/5xx), clic para ver el error.

En logs del backend:

bash
tail -f storage/logs/laravel-$(date +%F).log | grep -i stripe
# Esperado:
# [StripeWebhook] checkout.session.completed processed. session=cs_...

5.4 Membresía activa ​

Volver al dashboard del candidato:

  • Tarjeta de membresía cambia a verde: "Activa hasta DD/MM/YYYY".
  • Correo recibido: "Tu membresía HUMAE está activa 🎉".

En DB:

sql
SELECT status, expires_at FROM memberships
WHERE user_id = (SELECT id FROM users WHERE email = 'tu_email@gmail.com');

Debe existir una fila con status=active y expires_at ≈ now() + 180 days.

Si el webhook no llega:

  • Verificar que el endpoint Stripe apunta a https://api.humae.com.mx/api/webhooks/stripe (no staging).
  • Verificar que el endpoint sea accesible desde internet (no detrás de firewall).
  • Verificar STRIPE_WEBHOOK_SECRET coincide con el del dashboard.

6 · Upload de avatar (disco local) ​

Desde el dashboard candidato → Mi perfil → cambiar avatar.

Seleccionar una imagen JPG/PNG ≤ 4MB.

Esperado:

  • Upload completa en < 3 segundos.
  • La foto aparece inmediatamente en el perfil.
  • Inspeccionar el <img> → src debe ser {APP_URL}/storage/avatars/{user_id}/{hash}.webp.
  • curl -I sobre esa URL devuelve 200 con Content-Type: image/webp.

En el servidor: ls storage/app/public/avatars/{user_id}/ debe mostrar el archivo recién subido. Dimensiones: 400×400.

Si falla con 404 en la URL:

  • Falta php artisan storage:link.
  • Nginx no está sirviendo /storage/* — revisar que el bloque de config no rewrittea todo a index.php.

Si falla con 500:

  • Revisar permisos de storage/ (chown www-data:www-data storage && chmod -R 775 storage).
  • Revisar que la extensión GD esté instalada (php -m | grep gd).

7 · Descargar CV PDF ​

Dashboard candidato → Mi perfil → Descargar CV PDF.

Esperado:

  • Response Content-Type: application/pdf.
  • Descarga un archivo CV_Nombre_Apellido.pdf.
  • Abrir con un visor de PDF: debe renderizar correctamente con el logo HUMAE y los datos del perfil.

Si está en blanco o corrupto:

  • Revisar que DomPDF esté instalado (composer show dompdf/dompdf).
  • Revisar permisos de escritura en storage/framework/cache.

8 · Agendar entrevista (flujo recruiter → candidato) ​

8.1 Crear un recruiter de prueba ​

Como admin en /admin/usuarios → crear usuario con rol recruiter.

8.2 Crear una empresa + vacante de prueba ​

/admin/empresas → nueva empresa → crear vacante → estado activa.

8.3 Asignar candidato ​

Como recruiter → directorio → tu candidato de prueba → asignar a la vacante.

8.4 Agendar entrevista ​

Pipeline → arrastrar a presented → agendar entrevista para now + 3 days.

Esperado:

  • El candidato (tú) recibe correo: "Nueva entrevista agendada".
  • El correo llega en ≤ 2 minutos.
  • El enlace del correo redirige a la entrevista en el dashboard del candidato.

En DB:

sql
SELECT state, scheduled_at FROM interviews ORDER BY id DESC LIMIT 1;

Debe existir con state='propuesta'.


9 · Búsqueda en directorio (funcionalidad clave del recruiter) ​

Como recruiter → /recruiter/directorio.

Esperado:

  • Lista al menos tu candidato de prueba (si tiene membresía activa).
  • Filtros funcionan: filtrar por ciudad, skills, etc.
  • Paginación funciona.

10 · Reportes (admin) ​

Como admin → /admin/reportes.

Esperado:

  • KPI cards cargan sin "Loading..." indefinido.
  • Al menos las métricas de candidatos y membresías muestran valores > 0 (tu usuario de prueba).
  • Charts renderizan sin errores.

11 · Scheduler + queue workers vivos ​

bash
# En el servidor backend
sudo supervisorctl status humae-queue:*
# Todos deben estar RUNNING

php artisan schedule:list
# Debe listar ExpireMembershipsJob

Esperar hasta medianoche UTC (o ejecutar manualmente):

bash
php artisan schedule:run
# o el comando específico:
php artisan memberships:expire

Debe loguear que revisó memberships (no debe haber expiradas si todo es reciente).


12 · Cobertura de errores (Sentry, si lo tienes) ​

Disparar un error intencional en prod (un endpoint temporal):

bash
curl -X POST https://api.humae.com.mx/api/v1/debug/trigger-error

(Agregar temporal, remover después). Verificar que Sentry recibe el evento en ≤ 2 minutos.


Resultado final ​

Si los 12 pasos pasaron:

✓ Health endpoint verde
✓ Frontend conecta al backend
✓ Registro + verificación + login
✓ Stripe Checkout + webhook + membresía
✓ Upload a disco local + descarga autenticada de documentos
✓ CV PDF se genera
✓ Entrevista agendada + notificación
✓ Directorio funcional
✓ Reportes cargan
✓ Queue worker + scheduler activos

El deploy está listo. Comunica al equipo de negocio que la plataforma es accesible públicamente.

Limpieza post-prueba ​

Borrar los datos de prueba:

sql
-- Eliminar usuario test y sus datos
DELETE FROM users WHERE email = 'tu_email@gmail.com';
-- Cascade borra candidate_profile, memberships, payments, etc.

Y en Stripe:

  • Refund del pago de prueba si usaste tarjeta real.

Si algo falla ​

  1. NO hagas rollback inmediato. La mayoría de fallos son de configuración, no de código.
  2. Lee los logs — casi siempre dan la pista exacta.
  3. Revisa Preguntas frecuentes — cubre los escenarios comunes.
  4. Si es crítico y no resuelves en 15 min:
    • Marcar la plataforma como "en mantenimiento" en el frontend (feature flag temporal).
    • Investigar con calma.
    • Si necesitas rollback, restaurar backup de DB + deploy anterior del código.

Manual de usuario HUMAE · Uso interno