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íaContratar 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