Skip to content

Prueba: Reportes – Egresos (Beta)

Objetivo

Validar que el sistema genere correctamente los reportes asociados al módulo de Egresos, permitiendo seleccionar filtros dinámicos (por fecha, registro o tercero), y exportar los resultados en PDF y Excel (XLS).

Precondiciones

  • Usuario autenticado mediante el comando cy.login().
  • Acceso al dashboard del sistema (/dashboard)..
  • Acceso al módulo de Reportes mediante la ruta /reports
  • El tab Egresos debe estar disponible y activable (#egresos-tab)
  • Existencia de datos en los rangos utilizados por las prueba
  • Los botones/modales de cada reporte deben existir en el DOM

Pasos Generales

  1. Iniciar sesión y acceder al dashboard.
  2. Entrar al módulo Reportes.
  3. Seleccionar el tab Egresos.
  4. Para cada reporte: abrir modal correspondiente.
  5. Si aplica, activar el filtro correspondiente (función mostrarFiltroReportes / mostrarFiltroNomina).
  6. Completar los campos del escenario (fechas, registros, selección de tercero).
  7. Generar en PDF y luego en XLS.
  8. Cerrar el modal y verificar que haya desaparecido del DOM.

Resultado Esperado

  • El tab Egresos se muestra activo y con el contenido cargado.
  • Cada modal de reporte se abre y permite interacción con los campos y filtros necesarios.
  • Los botones de generación (PDF/XLS) están visibles y ejecutan la descarga/proceso sin errores visibles.
  • El modal se cierra correctamente después de generar los reportes.
  • No quedan modales con la clase .modal.show en el DOM al finalizar cada flujo.

Explicación Detallada del Código

Visitar Modulo de reportes y Validación del tab activo

cy.visit("/reports");
cy.get("#egresos-tab").click();
cy.get("#egresos-tab").should("have.class", "active");

Explicación

  • Se ingresa automáticamente al módulo Reportes antes de cada caso.
  • Se localiza el tab con el identificador #egresos-tab
  • La condición have.class('active') asegura que el sistema esté mostrando el contenido del módulo Ventas.

Definición de los reportes y escenarios de prueba

const reportes = [
  // --- Reporte Egresos ---
  {
    nombre: "Reporte Egresos",
    dataTarget: "#generarReporteEgresosReportes",
    escenarios: [
      {
        tipo: "fecha",
        tieneFiltro: true,
        filtroFuncion: "mostrarFiltroReportes",
        filtros: [
          { id: "#fecha-inicial-reportes", valor: "2025-09-01" },
          { id: "#fecha-final-reportes", valor: "2025-12-31" },
        ],
      },
      {
        tipo: "registro",
        tieneFiltro: true,
        filtroFuncion: "mostrarFiltroReportes",
        filtros: [
          { id: "#registro-inicial-reportes", valor: "010" },
          { id: "#registro-final-reportes", valor: "100" },
        ],
      },
    ],
  },

  // --- Reporte Costos ---
  {
    nombre: "Reporte Costos",
    dataTarget: "#generarReporteCostos",
    escenarios: [
      {
        tipo: "fecha",
        tieneFiltro: false,
        filtros: [
          { id: "#fecha-inicial-costos", valor: "2025-09-01" },
          { id: "#fecha-final-costos", valor: "2025-12-28" },
        ],
      },
    ],
  },

  // --- Reporte Gastos ---
  {
    nombre: "Reporte Gastos",
    dataTarget: "#generarReporteGastos",
    escenarios: [
      {
        tipo: "fecha",
        tieneFiltro: false,
        filtros: [
          { id: "#fecha-inicial-gastos", valor: "2025-09-01" },
          { id: "#fecha-final-gastos", valor: "2025-12-31" },
        ],
      },
    ],
  },

  // --- Reporte Nómina ---
  {
    nombre: "Reporte Nómina",
    dataTarget: "#generarReporteNomina",
    escenarios: [
      {
        tipo: "fecha",
        tieneFiltro: true,
        filtroFuncion: "mostrarFiltroNomina",
        filtros: [
          { id: "#fecha-inicial-nomina", valor: "2025-09-01" },
          { id: "#fecha-final-nomina", valor: "2025-11-30" },
        ],
      },
      {
        tipo: "tercero",
        tieneFiltro: true,
        filtroFuncion: "mostrarFiltroNomina",
        filtros: [{ id: "#tercero_dropdown_nomina", accion: "click" }],
      },
    ],
  },
];

Explicación

  • Se define un arreglo reportes que describe cada reporte, su dataTarget (para abrir modal) y sus escenarios.
  • Cada escenario contiene tipo, tieneFiltro, filtroFuncion (nombre de la función que habilita filtros en el modal) y filtros (campos a llenar o acciones).

Apertura del modal de reporte

cy.get(`[data-target='${reporte.dataTarget}']`).click();
cy.wait(500);
cy.get(".modal.show").should("be.visible");

Explicación

  • Se hace clic en el botón que tiene el atributo data-target apuntando al modal del reporte.
  • cy.wait(500) asegura que la animación o el render del modal termine antes de interactuar.
  • .modal.show es la clase usada por el componente modal para indicar que está abierto y visible — se valida su presencia.

Habilitar filtro (si aplica) y llenar campos

cy.get(".modal.show").within(() => {
  if (escenario.tieneFiltro && escenario.filtroFuncion) {
    cy.get(`[onclick="${escenario.filtroFuncion}('${escenario.tipo}')"]`, {
      timeout: 3000,
    }).click({ force: true });
  }

  escenario.filtros.forEach((filtro) => {
    if (filtro.accion === "click") {
      cy.get(filtro.id).should("be.visible").click();
    } else {
      cy.get(filtro.id).should("be.visible").clear().type(filtro.valor);
    }
  });
});

Explicación

  • within() limita la búsqueda al DOM del modal abierto, evitando colisiones con otros elementos.
  • Si tieneFiltro es true, se dispara el elemento onclick que habilita el bloque de filtros dentro del modal (por ejemplo mostrarFiltroReportes('fecha') o mostrarFiltroNomina('tercero')).
  • Se recorren los filtros: si el objeto contiene accion: "click" se ejecuta un click() , de lo contrario se limpian y escriben valores con .clear().type(valor).

Generación de los reportes (PDF y XLS)

cy.get("button[value='pdf']").should("be.visible").click();
cy.wait(800);

cy.get("button[value='xls']").should("be.visible").click();
cy.wait(800);

Explicación

  • Se localizan los botones de descarga por el atributo value y se asegura que estén visibles antes de hacer clic.
  • Primero se genera el reporte en PDF, luego en XLS, respetando un pequeño intervalo entre descargas (cy.wait(800))`` para evitar solapamiento de solicitudes.

Cierre del modal y verificación final

cy.get("button[aria-label='Close']")
  .should("be.visible")
  .click({ force: true });

cy.get(".modal.show").should("not.exist");

Explicación

  • Tras generar los reportes, se cierra el modal utilizando el botón de cierre (aria-label='Close').
  • Se verifica que no existan modales con la clase .show, lo cual confirma que el componente se cerró correctamente y que el flujo terminó sin errores visuales o bloqueos.

Resultados de la ejecución de la prueba

Escenario Reporte Tipo de Filtro Valores / Acción Formatos Generados Estado
1 Cuentas por Cobrar Fecha 2025-09-01 → 2025-12-31 PDF, XLS PASS
2 Cuentas por Cobrar Tercero Ana Rodriguez PDF, XLS PASS
3 Reportes de Abonos - Cuentas por Cobrar Fecha 2025-09-01 → 2025-12-31 PDF, XLS PASS
4 Reportes de Abonos - Cuentas por Cobrar Tercero Ana Rodriguez PDF, XLS PASS
5 Reportes de Abonos - Cuentas por Pagar Fecha 2025-09-01 → 2025-12-31 PDF, XLS PASS
6 Reportes de Abonos - Cuentas por Pagar Tercero Ana Rodriguez PDF, XLS PASS
7 Cuentas por Pagar Fecha 2025-09-01 → 2025-12-31 PDF, XLS PASS
8 Cuentas por Pagar Tercero Ana Rodriguez PDF, XLS PASS