From 3716a0a51bbcd1fd71c87a0076eaa4a3380886fe Mon Sep 17 00:00:00 2001
From: Romeo Van Snick <romeo@romeovansnick.be>
Date: Tue, 1 Oct 2024 08:34:01 +0200
Subject: [PATCH] Await dashcard query when editing to fix flake (#48181)

* Await dashcard query when editing

* Reload to fix flake

* Reset filters to fix flake

* Await dashcard query when editing

* Wait for query

* WIP

* Hard-visit dashboard

* Split up test to avoid navigation issues
---
 .../dashboard-filter-defaults.cy.spec.ts      | 67 ++++++++++++++++---
 1 file changed, 59 insertions(+), 8 deletions(-)

diff --git a/e2e/test/scenarios/dashboard-filters/dashboard-filter-defaults.cy.spec.ts b/e2e/test/scenarios/dashboard-filters/dashboard-filter-defaults.cy.spec.ts
index d537772fad3..6e4a0875660 100644
--- a/e2e/test/scenarios/dashboard-filters/dashboard-filter-defaults.cy.spec.ts
+++ b/e2e/test/scenarios/dashboard-filters/dashboard-filter-defaults.cy.spec.ts
@@ -49,7 +49,9 @@ describe("scenarios > dashboard > filters > reset", () => {
   beforeEach(() => {
     restore();
     cy.signInAsAdmin();
+  });
 
+  it("should reset a filters value when editing the default", () => {
     createQuestionAndDashboard({
       questionDetails: QUESTION,
       dashboardDetails: DASHBOARD,
@@ -69,14 +71,21 @@ describe("scenarios > dashboard > filters > reset", () => {
             target: ["dimension", ["field", PRODUCTS.TITLE, null]],
           },
         ],
+      }).then(() => {
+        visitDashboard(dashboard_id, {
+          params: {
+            filter_one: "",
+            filter_two: "Bar",
+          },
+        });
       });
-
-      visitDashboard(dashboard_id);
     });
-  });
 
-  it("should reset a filters value when editing the default", () => {
     cy.log("Default dashboard filter");
+
+    filterWidget().contains("Filter One").should("be.visible");
+    filterWidget().contains("Bar").should("be.visible");
+
     cy.location("search").should("eq", "?filter_one=&filter_two=Bar");
 
     clearFilterWidget(1);
@@ -106,24 +115,66 @@ describe("scenarios > dashboard > filters > reset", () => {
 
     filterWidget().contains("Filter One").should("be.visible");
     filterWidget().contains("Foo").should("be.visible");
+  });
 
+  it("should reset a filters value when editing the default, and leave other filters alone", () => {
+    createQuestionAndDashboard({
+      questionDetails: QUESTION,
+      dashboardDetails: DASHBOARD,
+    }).then(({ body: dashboardCard }) => {
+      const { card_id, dashboard_id } = dashboardCard;
+
+      cy.editDashboardCard(dashboardCard, {
+        parameter_mappings: [
+          {
+            parameter_id: FILTER_ONE.id,
+            card_id,
+            target: ["dimension", ["field", PRODUCTS.CATEGORY, null]],
+          },
+          {
+            parameter_id: FILTER_TWO.id,
+            card_id,
+            target: ["dimension", ["field", PRODUCTS.TITLE, null]],
+          },
+        ],
+      }).then(() => {
+        visitDashboard(dashboard_id, {
+          params: {
+            filter_one: "",
+            filter_two: "Bar",
+          },
+        });
+      });
+    });
+
+    cy.log("Default dashboard filter");
+
+    filterWidget().contains("Filter One").should("be.visible");
+    filterWidget().contains("Bar").should("be.visible");
+
+    cy.location("search").should("eq", "?filter_one=&filter_two=Bar");
+
+    cy.log(
+      "Finally, when we remove dashboard filter's default value, the url should reflect that by removing the placeholder",
+    );
     editDashboard();
 
     openFilterOptions("Filter One");
 
     sidebar().within(() => {
       cy.findByLabelText("Input box").click();
-      setDefaultFilterValue("Quu");
+      setDefaultFilterValue("Foo");
     });
 
     popover().button("Add filter").click();
 
-    cy.location("search").should("eq", "?filter_one=Quu&filter_two=Foo");
+    cy.location("search").should("eq", "?filter_one=Foo&filter_two=Bar");
 
     saveDashboard();
 
-    cy.location("search").should("eq", "?filter_one=Quu&filter_two=Foo");
-    filterWidget().contains("Quu").should("be.visible");
+    cy.location("search").should("eq", "?filter_one=Foo&filter_two=Bar");
+
+    filterWidget().contains("Filter One").should("be.visible");
     filterWidget().contains("Foo").should("be.visible");
   });
 });
-- 
GitLab