Skip to content

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

  1. Ingresar al módulo de Egresos.
  2. Abrir el modal de Registro de Egresos.
  3. Seleccionar la clasificación principal (Gasto o Costo)..
  4. Elegir el tipo de egreso dentro de la clasificación (Servicios, No Inventariable o Inventariable).
  5. Completar los campos obligatorios visibles según el tipo de egreso.
  6. Seleccionar el tercero asociado mediante el selector personalizado.
  7. Configurar el tipo de pago (Contado o Crédito).
  8. Definir el método o abono correspondiente (Efectivo o Transferencia).
  9. Guardar el registro.
  10. 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

cy.visit("/dashboard");

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 Cantidad y Precio Unitario.
  • INVENTARIABLE: incluye selección de producto más cantidad y precio.



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 /egresos y 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