Prueba: Egresos – Registrar Egresos
Objetivo
Validar que el sistema permita registrar egresos en sus tres clasificaciones principales Monto Simple, No Inventariable y Inventariable, Asegurando que los campos visibles del formulario cambien dinámicamente según el tipo de egreso seleccionado, y que el registro se guarde correctamente al enviar el formulario en los diferentes escenarios.
Precondiciones
- Usuario autenticado mediante el comando
cy.login(). - Acceso al dashboard del sistema
(/dashboard).. - Existencia de terceros configurados en el sistema (ejemplo: Ana Rodriguez).
- Existencia de productos con código inventariable (ejemplo: SH229).
Pasos Generales
- Ingresar al módulo de Egresos.
- Abrir el modal de Registro de Egresos.
- Seleccionar la clasificación principal (Gasto o Costo)..
- Elegir el tipo de egreso dentro de la clasificación (Servicios, No Inventariable o Inventariable).
- Completar los campos obligatorios visibles según el tipo de egreso.
- Seleccionar el tercero asociado mediante el selector personalizado.
- Configurar el tipo de pago (Contado o Crédito).
- Definir el método o abono correspondiente (Efectivo o Transferencia).
- Guardar el registro.
- Validar que el modal se cierre automáticamente tras guardar.
Resultado Esperado
- El modal de egresos debe abrirse correctamente.
- Los campos del formulario cambian dinámicamente según el tipo de egreso seleccionado.
- Los terceros y productos (en caso de inventariables) se seleccionan correctamente.
- El sistema permite registrar correctamente los tres tipos de egreso:
- Monto Simple → con campo único “Monto”.
- No Inventariable → con campos “Cantidad” y “Precio Unitario”.
- Inventariable → con selección de producto, cantidad y precio.
- El modal se cierra automáticamente tras guardar el egreso.
- No se presentan errores en consola ni validaciones fallidas.
Explicación Detallada del Código
Configuración Inicial
Explicación
- Se visita el dashboard antes de cada prueba, garantizando que la sesión esté establecida.
Estructura de Formularios
const FORMULARIOS = {
MONTO_SIMPLE: ["Servicios", "Gastos generales", "Arrendamiento"],
NO_INVENTARIABLE: ["Compra insumos y materia prima (No Inventariable)"],
INVENTARIABLE: ["Compra insumos y materia prima (Inventariable)"],
};
Explicación
| Se agrupan los tipos de egreso en tres categorías para controlar los campos dinámicos:
- MONTO_SIMPLE: solo requiere el campo
Monto. - NO_INVENTARIABLE: requiere
CantidadyPrecio Unitario. -
INVENTARIABLE: incluye selección de producto más
cantidadyprecio.
Casos de Prueba
const egresos = [
// --- MONTO SIMPLE ---
{
clasificacion: "Gasto",
tipoEgreso: "Servicios",
concepto: "Pago de servicios",
monto: "180000",
tercero: "Ana Rodriguez",
tipoPago: "contado",
medioPago: "Efectivo",
},
{
clasificacion: "Gasto",
tipoEgreso: "Servicios",
concepto: "Pago de servicios",
monto: "180000",
tercero: "Ana Rodriguez",
tipoPago: "contado",
medioPago: "Transferencia",
tipoTransferencia: "Bancolombia",
},
{
clasificacion: "Gasto",
tipoEgreso: "Servicios",
concepto: "Pago de servicios",
monto: "180000",
tercero: "Ana Rodriguez",
tipoPago: "credito",
abonoInicial: "20000",
metodoAbono: "Efectivo",
},
{
clasificacion: "Gasto",
tipoEgreso: "Servicios",
concepto: "Pago de servicios",
monto: "180000",
tercero: "Ana Rodriguez",
tipoPago: "credito",
abonoInicial: "50000",
metodoAbono: "Transferencia",
tipoTransferencia: "Bancolombia",
},
// --- NO INVENTARIABLE ---
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (No Inventariable)",
concepto: "Compra de papel y tinta",
cantidad: "10",
precioUnitario: "12000",
tercero: "Ana Rodriguez",
tipoPago: "contado",
medioPago: "Efectivo",
},
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (No Inventariable)",
concepto: "Compra de papel y tinta",
cantidad: "10",
precioUnitario: "12000",
tercero: "Ana Rodriguez",
tipoPago: "contado",
medioPago: "Transferencia",
tipoTransferencia: "Bancolombia",
},
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (No Inventariable)",
concepto: "Compra de papel y tinta",
cantidad: "10",
precioUnitario: "12000",
tercero: "Ana Rodriguez",
tipoPago: "credito",
abonoInicial: "20000",
metodoAbono: "Efectivo",
},
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (No Inventariable)",
concepto: "Compra de papel y tinta",
cantidad: "10",
precioUnitario: "12000",
tercero: "Ana Rodriguez",
tipoPago: "credito",
abonoInicial: "50000",
metodoAbono: "Transferencia",
tipoTransferencia: "Bancolombia",
},
// --- INVENTARIABLE ---
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (Inventariable)",
codigoProducto: "SH229",
cantidad: "5",
concepto: "Compra de insumo inventariable",
precioUnitario: "8000",
tercero: "Ana Rodriguez",
tipoPago: "contado",
medioPago: "Efectivo",
},
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (Inventariable)",
codigoProducto: "SH229",
cantidad: "5",
concepto: "Compra de insumo inventariable",
precioUnitario: "8000",
tercero: "Ana Rodriguez",
tipoPago: "contado",
medioPago: "Transferencia",
tipoTransferencia: "Bancolombia",
},
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (Inventariable)",
codigoProducto: "SH229",
cantidad: "5",
concepto: "Compra de insumo inventariable",
precioUnitario: "8000",
tercero: "Ana Rodriguez",
tipoPago: "credito",
abonoInicial: "20000",
metodoAbono: "Efectivo",
},
{
clasificacion: "Costo",
tipoEgreso: "Compra insumos y materia prima (Inventariable)",
codigoProducto: "SH229",
cantidad: "5",
concepto: "Compra de insumo inventariable",
precioUnitario: "8000",
tercero: "Ana Rodriguez",
tipoPago: "credito",
abonoInicial: "50000",
metodoAbono: "Transferencia",
tipoTransferencia: "Bancolombia",
},
];
Explicación
- Cada objeto en el arreglo representa un escenario de prueba único.
| Se definen combinaciones con distintos métodos de pago:
- Contado → Efectivo / Transferencia.
- Crédito → Abono inicial + método de pago (Efectivo o Transferencia).
Ejecución Iterativa de Casos
egresos.forEach((egreso) => {
it(`Debe registrar un egreso: ${egreso.clasificacion} - ${egreso.concepto}`, () => {
cy.visit("/egresos");
cy.get('button[data-target="#EgresosModal"]').click();
});
});
Explicación
- Se genera un caso de prueba dinámico para cada elemento del arreglo
egresos. - Se navega al módulo
/egresosy se abre el modal de registro. - El título del
it()se construye dinámicamente para identificar el escenario ejecutado.
Selección de Clasificación y Tipo
cy.get("#content-1 select.clasificacion-egreso").select(egreso.clasificacion);
cy.get("#content-1 select.tipo-egreso").select(egreso.tipoEgreso);
cy.get('#content-1 input[name="concepto[]"]').clear().type(egreso.concepto);
Explicación
- Define la clasificación (Gasto o Costo) y el tipo de egreso.
- Ingresa el concepto del egreso en el campo correspondiente.
Campos según Tipo de Egreso
if (FORMULARIOS.MONTO_SIMPLE.includes(egreso.tipoEgreso)) {
cy.get('#content-1 input[data-tipo="monto"]:visible').type(egreso.monto);
} else if (FORMULARIOS.NO_INVENTARIABLE.includes(egreso.tipoEgreso)) {
cy.get('input[name="cantidaE[]"]:visible').type(egreso.cantidad);
cy.get('input[name="precioU[]"]:visible').type(egreso.precioUnitario);
} else if (FORMULARIOS.INVENTARIABLE.includes(egreso.tipoEgreso)) {
cy.get("div#EgresosModal div.custom-select-container:visible")
.first()
.click();
cy.get(".custom-select-options")
.contains("li.custom-select-option", egreso.codigoProducto)
.click();
cy.get('input[name="cantidaE[]"]:visible').clear().type(egreso.cantidad);
cy.get('input[name="precioU[]"]:visible').clear().type(egreso.precioUnitario);
}
Explicación
| Según el tipo de egreso, se muestran distintos campos:
- Monto Simple: solo campo de monto.
- No Inventariable: cantidad y precio.
- Inventariable: selección de producto y llenado de cantidad y precio.
- El uso de
.includes()permite determinar dinámicamente el grupo correspondiente.
Selección de Tercero
cy.get("div#EgresosModal div.custom-select-container:visible").last().click();
cy.get(".custom-select-options")
.contains("li.custom-select-option", egreso.tercero)
.click();
Explicación
- Se utiliza un selector personalizado para elegir el tercero.
- Se hace clic en el contenedor visible y luego en el nombre del tercero correspondiente.
Configuración de Pago
cy.get("#tipoVenta_0").select(egreso.tipoPago);
if (egreso.medioPago) cy.get("select#medioPago_1").select(egreso.medioPago);
if (egreso.abonoInicial) cy.get("#abono_inicial_1").type(egreso.abonoInicial);
if (egreso.metodoAbono)
cy.get('select[name="metodo_abono[]"]').select(egreso.metodoAbono);
if (egreso.tipoTransferencia) {
if (egreso.tipoPago === "contado")
cy.get("#tipoTransferencia_1").select(egreso.tipoTransferencia);
else
cy.get('select[name="tipo_transferencia_abono[]"]').select(
egreso.tipoTransferencia
);
}
Explicación
| Maneja la lógica de pagos contado y crédito:
- Contado → selecciona medio de pago (Efectivo o Transferencia).
- Crédito → define abono inicial y método de abono.
- Transferencia → requiere tipo de banco.
Guardar Registro y Validar Cierre
cy.get('div.d-flex button[type="submit"].btn.btn-primary').click();
cy.get("div#EgresosModal").should("not.be.visible");
Explicación
- Se hace clic en el botón Guardar.
- Se valida que el modal se cierre correctamente al finalizar el registro.
Resultados de la ejecución de la prueba
| Escenario | Clasificación | Tipo de Egreso | Tipo de Pago | Medio / Método | Resultado |
|---|---|---|---|---|---|
| 1 | Gasto | Servicios | Contado | Efectivo | PASS |
| 2 | Gasto | Servicios | Contado | Transferencia Bancolombia | PASS |
| 3 | Gasto | Servicios | Crédito | Efectivo | PASS |
| 4 | Gasto | Servicios | Crédito | Transferencia Bancolombia | PASS |
| 5 | Costo | No Inventariable | Contado | Efectivo | PASS |
| 6 | Costo | No Inventariable | Contado | Transferencia Bancolombia | PASS |
| 7 | Costo | No Inventariable | Crédito | Efectivo | PASS |
| 8 | Costo | No Inventariable | Crédito | Transferencia Bancolombia | PASS |
| 9 | Costo | Inventariable | Contado | Efectivo | PASS |
| 10 | Costo | Inventariable | Contado | Transferencia Bancolombia | PASS |
| 11 | Costo | Inventariable | Crédito | Efectivo | PASS |
| 12 | Costo | Inventariable | Crédito | Transferencia Bancolombia | PASS |