Skip to content

Prueba: Reportes – Ventas (Beta)

Objetivo

Validar que el sistema permita generar correctamente los reportes del módulo Ventas, específicamente el Libro de Ventas y el Reporte de Productos Más Vendidos, comprobando que se puedan aplicar los filtros disponibles (por fechas o por registros) y que los archivos en formato PDF y XLS se generen exitosamente, cerrando el modal de forma automática tras su ejecución.

Precondiciones

  • Usuario autenticado mediante el comando cy.login().
  • Acceso al dashboard del sistema (/dashboard)..
  • Existencia de datos de ventas registrados dentro del rango de fechas o registros configurado.
  • Acceso al módulo de Reportes mediante la ruta /reports
  • Disponibilidad activa de los botones y modales de reporte definidos en el DOM

Pasos Generales

  1. Iniciar sesión y acceder al dashboard.
  2. Entrar al módulo Reportes.
  3. Confirmar que el tab activo corresponda a Ventas.
  4. Abrir el modal del reporte a generar (Libro de Ventas o Productos Más Vendidos).
  5. Aplicar los filtros requeridos (por fecha o registro).
  6. Generar el reporte en formato PDF.
  7. Generar el reporte en formato XLS.
  8. Cerrar el modal y verificar que se haya cerrado correctamente.

Resultado Esperado

  • El tab de Ventas debe mostrarse activo al ingresar al módulo.
  • Los modales de cada reporte deben abrirse correctamente.
  • Los filtros deben poder aplicarse y completarse sin errores de visibilidad.
  • Los botones de generación deben permitir descargar ambos formatos (PDF y XLS).
  • Tras la generación, el modal debe cerrarse y desaparecer del DOM sin errores.

Explicación Detallada del Código

Visitar Modulo de reportes y Validación del tab activo

cy.visit("/reports");
cy.get("#ventas-tab").should("exist").and("have.class", "active");

Explicación

  • Se ingresa automáticamente al módulo Reportes antes de cada caso.
  • Se localiza el tab con el identificador #ventas-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 = [
  {
    nombre: "Libro de Ventas",
    dataTarget: "#generarReporteIngresos",
    escenarios: [
      {
        tipo: "fecha",
        tieneFiltro: true,
        filtros: [
          { id: "#fecha-inicial", valor: "2025-09-01" },
          { id: "#fecha-final", valor: "2025-12-31" },
        ],
      },
      {
        tipo: "registro",
        tieneFiltro: true,
        filtros: [
          { id: "#registro-inicial", valor: "100" },
          { id: "#registro-final", valor: "200" },
        ],
      },
    ],
  },
  {
    nombre: "Reporte de Productos Más Vendidos",
    dataTarget: "#generarReporteProductos",
    escenarios: [
      {
        tipo: "fecha",
        tieneFiltro: false,
        filtros: [
          { id: "#fecha-inicial-productos", valor: "2025-09-01" },
          { id: "#fecha-final-productos", valor: "2025-12-28" },
        ],
      },
    ],
  },
];

Explicación

  • El arreglo reportes define cada conjunto de pruebas con sus escenarios específicos.

| Cada reporte contiene:

  • nombre: etiqueta descriptiva usada en los títulos de las pruebas.
  • dataTarget: valor del atributo usado para ubicar el botón que abre su modal.
  • escenarios: lista de contextos (por fecha o registro) con los filtros que deben llenarse.

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 localiza y hace clic en el botón cuyo atributo data-target coincide con el identificador del modal a abrir.
  • El cy.wait(500) da tiempo a que se renderice la animación del modal antes de interactuar con él.
  • Se valida la visibilidad del modal mediante la clase .modal.show, lo que confirma que el formulario está listo para usar.

Aplicación de filtros dentro del modal

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

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

Explicación

  • Se utiliza within() para limitar el alcance de las acciones al modal activo.
  • Si el escenario requiere filtros, se ejecuta el botón con el atributo onclick="mostrarFiltro(tipo)", el cual habilita los campos correspondientes según el tipo de filtro (fecha o registro).
  • Luego se recorren los campos definidos en escenario.filtros, limpiando (.clear()) y escribiendo (.type()) los valores especificados.

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 Ingresados Formatos Generados Estado
1 Libro de Ventas Fecha 2025-09-01 → 2025-12-31 PDF, XLS PASS
2 Libro de Ventas Registro 100 → 200 PDF, XLS PASS
3 Productos Más Vendidos Fecha 2025-09-01 → 2025-12-28 PDF, XLS PASS