Prueba: Ingresos – Convertir Cotización a Ingreso
Objetivo
Verificar que el sistema permita convertir correctamente una cotización existente en un ingreso, y que se muestren los flujos de confirmación y finalización adecuados mediante los modales y alertas.
Precondiciones
- Usuario autenticado mediante el comando
cy.login(). - Acceso al dashboard del sistema
(/dashboard). - Deben existir cotizaciones registradas en el módulo “Ingresos → Cotizaciones”.
- El sistema debe permitir el acceso al botón “Convertir a ingreso” dentro de cada fila de cotización.
Pasos Generales
- Navegar al módulo de Cotizaciones (
/cliente/cotizaciones). - Para cada cotización listada, hacer clic en el botón “Convertir a ingreso”.
- Completar los campos del modal según el tipo y método de pago definidos en el escenario
- Tipo de ingreso (Venta de contado, crédito u otros).
- Método de pago (Efectivo, Transferencia o Cheque).
- Si aplica:
- Completar campos de crédito: vencimiento y abono.
- Seleccionar tipo de transferencia bancaria.
- Confirmar la conversión en el SweetAlert.
- Verificar que el modal de confirmación aparezca y cierre correctamente.
- Según el índice del escenario, seleccionar entre “Ver Ingresos” o “Continuar Aquí”.
- Validar que no existan modales visibles al finalizar.
Resultado Esperado
- El sistema debe permitir convertir la cotización a un ingreso sin errores.
- Los campos deben aceptar las modificaciones
- El modal de edición debe cerrarse tras guardar los cambios.
- No deben generarse excepciones ni errores en la consola del navegador.
Explicación Detallada del Código
Visitar el modulo de cotizaciones
Explicación
cy.visit("/cliente/cotizaciones")sitúa el test en la página de cotizaciones donde está el botón para crear nueva cotización.implementación
Definición de escenarios
const escenarios = [
{ tipo: "Venta de contado", metodoPago: "Efectivo" },
{
tipo: "Venta a credito",
metodoPago: "Transferencia",
tipoTransferencia: "Bancolombia",
vencimiento: "30",
abono: "100",
},
{ tipo: "Otros ingresos", metodoPago: "Cheque" },
];
Explicación
- Se crean tres escenarios representando diferentes tipos de ingresos.
- El segundo escenario (“Venta a crédito”) incluye campos adicionales que prueban la validación condicional de inputs.
Iteración y test por escenario
escenarios.forEach((escenario) => {
it(`Convertir cotización ${index + 1} a ${escenario.tipo} con método ${
escenario.metodoPago
}`, () => {
// ... flujo ...
});
});
Explicación
- Se genera dinámicamente un caso de prueba por cada escenario.
- El nombre del test incluye el tipo de ingreso y método de pago.
Selección de cotización y apertura del modal
cy.get(".table-cotizaciones tbody tr")
.eq(index)
.within(() => {
cy.get('button[title="Convertir a ingreso"]').click();
});
cy.get("#modalConvertirIngreso").should("be.visible");
Explicación
- Se selecciona una fila específica de la tabla según el índice.
- Dentro de esa fila, se localiza y hace clic en el botón para convertir la cotización a ingreso.
- Luego se valida que el modal de conversión esté visible.
Selección de tipo y método de pago
cy.get('#modalConvertirIngreso select[name="tipo"]').select(escenario.tipo);
cy.get('#modalConvertirIngreso select[name="metodoPago"]').select(
escenario.metodoPago
);
Explicación
- Se seleccionan los valores del tipo de ingreso y método de pago con base en los datos del escenario actual.
Campos condicionales según tipo
if (escenario.tipo === "Venta a credito") {
cy.get('#modalConvertirIngreso input[name="vencimiento"]')
.clear()
.type(escenario.vencimiento);
cy.get('#modalConvertirIngreso input[name="abono"]')
.clear()
.type(escenario.abono);
}
Explicación
- Si el tipo de ingreso es “Venta a crédito”, se completan los campos de vencimiento y abono, simulando un flujo financiero más complejo.
Campos condicionales según método de pago
if (escenario.metodoPago === "Transferencia") {
cy.get('#modalConvertirIngreso select[name="tipoTransferencia"]').select(
escenario.tipoTransferencia
);
}
Explicación
- Si el método de pago es transferencia, se selecciona el tipo de banco (ejemplo: Bancolombia).
Confirmación de conversión
cy.get("#modalConvertirIngreso button.btn-success").click();
cy.get(".swal2-container.swal2-center.swal2-backdrop-show", { timeout: 10000 })
.contains("Sí, Convertir")
.click();
Explicación
- Se hace clic en el botón principal para iniciar la conversión
- Aparece un modal de confirmación tipo SweetAlert, donde se confirma la acción con “Sí, Convertir”.
Verificación y acción final
cy.get(".swal2-container.swal2-center.swal2-backdrop-show", {
timeout: 10000,
}).should("be.visible");
if (index % 2 === 0) {
cy.get(".swal2-actions button").contains("Ver Ingresos").click();
} else {
cy.get(".swal2-actions button").contains("Continuar Aquí").click();
}
cy.get(".swal2-container.swal2-center.swal2-backdrop-show").should("not.exist");
Explicación
- Se valida que el modal final aparezca correctamente.
| Según el índice, se selecciona una de las dos rutas de finalización posibles:
- Ver Ingresos (para casos pares) → redirige al listado de ingresos.
- Continuar Aquí (para casos impares) → permanece en la página actual. -Finalmente, se verifica que no existan modales abiertos, lo que confirma el cierre exitoso del flujo.
Resultados de la ejecución de la prueba
| Escenario | Tipo de Ingreso | Método de Pago | Campos Adicionales | Estado |
|---|---|---|---|---|
| 1 | Venta de contado | Efectivo | Ninguno | PASS |
| 2 | Venta a crédito | Transferencia | Vencimiento: 30, Abono: 100, Banco: Bancolombia | PASS |
| 3 | Otros ingresos | Cheque | Ninguno | PASS |