DEV Community

Hannah
Hannah

Posted on

Un sandbox de activación SaaS que sí se puede probar

Un sandbox de activación SaaS que sí se puede probar

Cuando un usuario se registra en un SaaS, el flujo parece corto: crear cuenta, enviar un correo, abrir el enlace y mostrar la primera pantalla útil. En un producto real, ese recorrido toca el backend, el proveedor de email, la sesión, la base de datos y la analítica. Si una parte falla, el equipo pueden pasar horas mirando un mensaje de error que no explica dónde se rompió.

Un sandbox de activación reduce ese problema. Es un entorno pequeño donde cada prueba puede crear un usuario, obtener correo temporal, consumir su mensaje de verificación y dejar una evidencia clara. No intenta copiar toda producción. Su objetivo es comprobar que la promesa inicial del producto funciona de principio a fin.

El problema: activar usuarios no es solo enviar un correo

En una prueba ingenua, el test usa una cuenta fija y busca “Verify your email” en una bandeja compartida. Esto funciona una vez. Luego llegan las pruebas paralelas, los reintentos y los mensajes atrasados. Una prueba lee el correo de otra, o un token antiguo hace que el resultado parezca correcto.

La activación necesita tres límites sencillos:

  1. Identidad: cada ejecución tiene un usuario y una dirección propios.
  2. Tiempo: la prueba sabe cuánto espera y cuándo debe parar.
  3. Evidencia: el resultado dice qué ocurrió sin publicar el token completo.

Esta separación es especialmente útil en un SaaS pequeño, donde una misma persona suele tocar producto, backend y soporte. Un contrato visible hace que el fallo sea más fácil de encontrar, tambien cuando el tráfico de pruebas crece.

Qué debe aislar el sandbox

Empieza con el mínimo que pueda responder la pregunta “¿un usuario nuevo puede activarse?”

  • Un identificador de ejecución, como activation-1842.
  • Un buzón exclusivo para esa ejecución.
  • Un usuario de prueba con datos sintéticos.
  • Un límite de espera y un intervalo de consulta.
  • Una forma de borrar el usuario y el buzón al terminar.

El sandbox no debería compartir una bandeja entre workers. Tampoco debería guardar el cuerpo completo del mensaje en cada log. Si necesitas probar el diseño HTML, crea una prueba separada. Para activación, normalmente basta con confirmar remitente, asunto, enlace esperado y hora de llegada.

Un estado visible de los correos asíncronos ayuda a que el test distinga entre “todavía esperando”, “mensaje recibido” y “proveedor agotó el tiempo”. Esa diferencia vale más que un simple sleep(10).

Un flujo paso a paso

Puedes modelar el recorrido con estados pequeños:

  1. Crear: genera un identificador único y reserva el buzón.
  2. Registrar: crea el usuario con el identificador de prueba.
  3. Esperar: consulta solo los mensajes asociados a ese buzón.
  4. Validar: comprueba el enlace, su caducidad y la cuenta correcta.
  5. Confirmar: verifica que la aplicación muestra el estado activado.
  6. Limpiar: elimina datos y registra si la limpieza terminó bien.

No conviene reintentar todo el flujo cuando falla la entrega. Si el registro fue correcto, repetirlo puede crear ruido y hacer más difícil saber qué pasó. Los runbooks de email que escalan suelen separar la entrega, la lectura y la acción final en pasos que se pueden observar de forma independiente.

Una implementación pequeña en el backend

El backend solo necesita devolver un resultado acotado al test. Un contrato posible, expresado en JavaScript, es:

{
  runId: "activation-1842",
  state: "verified",
  deliveryMs: 842,
  tokenChecked: true,
  bodyRetained: false
}
Enter fullscreen mode Exit fullscreen mode

El servicio de pruebas puede asociar el runId con la dirección creada, pero no debe enviar esa asociación a logs públicos. El endpoint de verificación debe aceptar el token una sola vez y responder de forma idempotente cuando un reintento llega después de la confirmación.

Para hacer el flujo reproducible, define la espera como una función con límite, no como una pausa fija. Cada consulta puede guardar el número de intento y el tiempo transcurrido. Asi sabrás si el problema es entrega lenta, un filtro incorrecto o una aplicación que nunca emitió el mensaje.

Cómo guardar evidencia sin guardar secretos

Una evidencia útil puede ser un recibo JSON con estos campos:

{
  "run_id": "activation-1842",
  "message_seen": true,
  "delivery_ms": 842,
  "link_target_checked": true,
  "cleanup": "completed"
}
Enter fullscreen mode Exit fullscreen mode

Guarda el hash del identificador si necesitas correlación entre servicios. Evita el token, la dirección completa y el cuerpo del email en los artefactos normales de CI. Si tienes que diagnosticar contenido, crea una captura redactada y con caducidad, no una copia permanente.

Para buscar una herramienta de pruebas, alguien puede escribir temp org mail o incluso tepm mail com. Esas expresiones sirven para entender búsquedas reales, pero no deben convertirse en nombres de configuración, dominios permitidos o datos de identidad dentro del sistema.

Errores comunes al empezar

  • Buzón compartido: produce carreras entre workers.
  • Polling infinito: oculta un proveedor caído y mantiene recursos vivos.
  • Logs con tokens: convierten un test en un incidente de seguridad.
  • Limpieza solo en el camino feliz: deja usuarios y mensajes abandonados.
  • Reintento de todo: mezcla un fallo de entrega con un fallo de activación.
  • Métrica única: “pasó” no explica si la entrega tardó demasiado.

Si el producto necesita una dirección aislada para una prueba, un correo desechable puede ser una capacidad de test, no una identidad de cliente. Elige el alcance, la retención y la política de acceso antes de integrarlo.

Preguntas frecuentes

¿Hace falta un proveedor real de email?

Para una prueba unitaria, no. Para comprobar la activación completa, sí conviene tener una ruta de integración con un buzón controlado. Mantén ambas pruebas separadas para que un problema externo no oculte un bug del backend.

¿Cuánto tiempo debe esperar el test?

Usa un límite basado en el contrato del entorno y registra cada intento. No hay un número universal; lo importante es que el agotamiento sea visible y que el worker libere el buzón.

¿Qué pasa si la limpieza falla?

Marca la ejecución como incompleta aunque la activación haya pasado. Un recurso que no se pudo borrar es un resultado operativo que el equipo debe ver, no un detalle para esconder.

Recapitulación

Un sandbox de activación SaaS útil tiene una dirección aislada, estados explícitos, una espera limitada y un recibo pequeño. Empieza con un solo flujo, mide la entrega y limpia siempre en un bloque de finalización. Después añade casos de caducidad, duplicados y reintentos.

La idea no es construir una plataforma enorme de pruebas. Es dar al equipo una señal confiable: un usuario nuevo pudo llegar al primer valor del producto, y si no pudo, sabemos en qué paso se detuvo. Con ese contrato, probar el backend deja de ser una apuesta y se vuelve una parte normal del desarrollo.

Top comments (0)