From 719f3ed6ac707d8be232b8a02d77e2f0ed3934db Mon Sep 17 00:00:00 2001 From: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com> Date: Tue, 13 Aug 2024 19:56:42 +0200 Subject: [PATCH] e2e: Fix dashboard number filter flakes (#46785) * Try to fix dashboard-filters-number flake * Try to fix dashboard-filters-number flake * Intercept all dashboard data requests for number filters --- .../dashboard-filters-number.cy.spec.js | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/e2e/test/scenarios/dashboard-filters/dashboard-filters-number.cy.spec.js b/e2e/test/scenarios/dashboard-filters/dashboard-filters-number.cy.spec.js index 1211dcac0ce..d7754a79274 100644 --- a/e2e/test/scenarios/dashboard-filters/dashboard-filters-number.cy.spec.js +++ b/e2e/test/scenarios/dashboard-filters/dashboard-filters-number.cy.spec.js @@ -1,7 +1,4 @@ -import { - ORDERS_DASHBOARD_ID, - ORDERS_DASHBOARD_DASHCARD_ID, -} from "e2e/support/cypress_sample_instance_data"; +import { ORDERS_DASHBOARD_ID } from "e2e/support/cypress_sample_instance_data"; import { restore, popover, @@ -35,6 +32,18 @@ describe("scenarios > dashboard > filters > number", () => { visitDashboard(ORDERS_DASHBOARD_ID); editDashboard(); + + /** + * Even though we're already intercepting this route in the visitDashboard helper, + * it is important to alias it differently here, and to then wait for it in tests. + * + * The place where the intercept is first set matters. + * If we set it before the visitDashboard, we'd have to wait for it after the visit, + * otherwise we'd always be one wait behind in tests. + */ + cy.intercept("POST", "api/dashboard/*/dashcard/*/card/*/query").as( + "dashboardData", + ); }); it("should work when set through the filter widget", () => { @@ -53,19 +62,19 @@ describe("scenarios > dashboard > filters > number", () => { }); saveDashboard(); + cy.wait("@dashboardData"); DASHBOARD_NUMBER_FILTERS.forEach( ({ operator, value, representativeResult }, index) => { filterWidget().eq(index).click(); addWidgetNumberFilter(value); + cy.wait("@dashboardData"); cy.log(`Make sure ${operator} filter returns correct result`); - cy.findByTestId("dashcard").within(() => { - cy.findByText(representativeResult); - }); + cy.findByTestId("dashcard").should("contain", representativeResult); clearFilterWidget(index); - cy.wait(`@dashcardQuery${ORDERS_DASHBOARD_DASHCARD_ID}`); + cy.wait("@dashboardData"); }, ); }); @@ -79,20 +88,22 @@ describe("scenarios > dashboard > filters > number", () => { addWidgetNumberFilter("2.07"); saveDashboard(); + cy.wait("@dashboardData"); - cy.findByTestId("dashcard").within(() => { - cy.findByText("37.65"); - }); + cy.findByTestId("dashcard") + .should("contain", "37.65") + .and("not.contain", "101.04"); clearFilterWidget(); + cy.wait("@dashboardData"); filterWidget().click(); - addWidgetNumberFilter("5.27", { buttonLabel: "Update filter" }); + cy.wait("@dashboardData"); - cy.findByTestId("dashcard").within(() => { - cy.findByText("101.04"); - }); + cy.findByTestId("dashcard") + .should("contain", "101.04") + .and("not.contain", "37.65"); }); it("should support being required", () => { @@ -120,15 +131,18 @@ describe("scenarios > dashboard > filters > number", () => { addWidgetNumberFilter("2.07", { buttonLabel: "Update filter" }); saveDashboard(); + cy.wait("@dashboardData"); ensureDashboardCardHasText("37.65"); // Updates the filter value setFilterWidgetValue("5.27", "Enter a number"); + cy.wait("@dashboardData"); ensureDashboardCardHasText("95.77"); // Resets the value back by clicking widget icon resetFilterWidgetToDefault(); filterWidget().findByText("2.07"); + cy.wait("@dashboardData"); ensureDashboardCardHasText("37.65"); // Removing value resets back to default -- GitLab