Skip to content

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

  1. Navegar al módulo de Cotizaciones (/cliente/cotizaciones).
  2. Para cada cotización listada, hacer clic en el botón “Convertir a ingreso”.
  3. Completar los campos del modal según el tipo y método de pago definidos en el escenario
  4. Tipo de ingreso (Venta de contado, crédito u otros).
  5. Método de pago (Efectivo, Transferencia o Cheque).
  6. Si aplica:
    • Completar campos de crédito: vencimiento y abono.
    • Seleccionar tipo de transferencia bancaria.
  7. Confirmar la conversión en el SweetAlert.
  8. Verificar que el modal de confirmación aparezca y cierre correctamente.
  9. Según el índice del escenario, seleccionar entre “Ver Ingresos” o “Continuar Aquí”.
  10. 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

cy.visit("/cliente/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