From 911201416768074eb1398d0ccd3198c1ce8ad7f8 Mon Sep 17 00:00:00 2001 From: Aleksandr Lesnenko <alxnddr@users.noreply.github.com> Date: Tue, 21 Jun 2022 16:49:13 +0400 Subject: [PATCH] fixes flaky visual tests (#23370) --- .../components/FunnelNormal.jsx | 1 + frontend/test/__support__/e2e/cypress.js | 1 + .../e2e/helpers/e2e-visual-tests-helpers.js | 3 ++ .../dashboard/parameters-widget.cy.spec.js | 37 ++++++++----------- .../metabase-visual/models/editor.cy.spec.js | 3 ++ .../notebook/notebook.cy.spec.js | 2 +- .../onboarding/urls.cy.spec.js | 1 + .../visualizations/bar.cy.spec.js | 7 +++- .../visualizations/funnel.cy.spec.js | 2 + .../visualizations/line.cy.spec.js | 11 +++++- .../visualizations/row.cy.spec.js | 7 +++- .../visualizations/scatter.cy.spec.js | 12 ++++-- .../visualizations/waterfall.cy.spec.js | 7 +++- 13 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 frontend/test/__support__/e2e/helpers/e2e-visual-tests-helpers.js diff --git a/frontend/src/metabase/visualizations/components/FunnelNormal.jsx b/frontend/src/metabase/visualizations/components/FunnelNormal.jsx index dca0cdab71a..766179f678e 100644 --- a/frontend/src/metabase/visualizations/components/FunnelNormal.jsx +++ b/frontend/src/metabase/visualizations/components/FunnelNormal.jsx @@ -116,6 +116,7 @@ export default class FunnelNormal extends Component { return ( <div + data-testid="funnel-chart" className={cx(className, styles.Funnel, "flex", { [styles["Funnel--narrow"]]: isNarrow, p1: isSmall, diff --git a/frontend/test/__support__/e2e/cypress.js b/frontend/test/__support__/e2e/cypress.js index 0de31fd7a02..c0163bf8feb 100644 --- a/frontend/test/__support__/e2e/cypress.js +++ b/frontend/test/__support__/e2e/cypress.js @@ -30,5 +30,6 @@ export * from "./helpers/e2e-bi-basics-helpers"; export * from "./helpers/e2e-boolean-helpers"; export * from "./helpers/e2e-embedding-helpers"; export * from "./helpers/e2e-permissions-helpers"; +export * from "./helpers/e2e-visual-tests-helpers"; Cypress.on("uncaught:exception", (err, runnable) => false); diff --git a/frontend/test/__support__/e2e/helpers/e2e-visual-tests-helpers.js b/frontend/test/__support__/e2e/helpers/e2e-visual-tests-helpers.js new file mode 100644 index 00000000000..a85eec847a2 --- /dev/null +++ b/frontend/test/__support__/e2e/helpers/e2e-visual-tests-helpers.js @@ -0,0 +1,3 @@ +export function ensureDcChartVisibility() { + cy.get(".dc-chart"); +} diff --git a/frontend/test/metabase-visual/dashboard/parameters-widget.cy.spec.js b/frontend/test/metabase-visual/dashboard/parameters-widget.cy.spec.js index 7afbdb952ac..ffa5dd45ce1 100644 --- a/frontend/test/metabase-visual/dashboard/parameters-widget.cy.spec.js +++ b/frontend/test/metabase-visual/dashboard/parameters-widget.cy.spec.js @@ -14,6 +14,8 @@ const parameter = { type: "category", }; +const MOBILE_WIDTH = 375; // iPhone SE + describe(`visual tests > dashboard > parameters widget`, () => { const parametersShort = new Array(5).fill(parameter); const parametersLong = new Array(12).fill(parameter); @@ -40,13 +42,14 @@ describe(`visual tests > dashboard > parameters widget`, () => { cy.editDashboardCard(card, updatedSize); visitDashboard(dashboard_id); + + cy.findByText("test question"); + cy.findByText("Rustic Paper Wallet"); }); }); describe(`desktop`, () => { it("is sticky in view mode", () => { - cy.findByText("test question"); - cy.get("main") .scrollTo(0, 264) .then(() => { @@ -61,8 +64,6 @@ describe(`visual tests > dashboard > parameters widget`, () => { }); it("is sticky in edit mode", () => { - cy.findByText("test question"); - cy.icon("pencil").click(); cy.findByTestId("dashboard-parameters-and-cards") @@ -81,14 +82,12 @@ describe(`visual tests > dashboard > parameters widget`, () => { describe(`mobile`, () => { it("is sticky in view mode", () => { - cy.findByText("test question"); - - cy.viewport(375, 667); // iPhone SE + cy.viewport(MOBILE_WIDTH, 667); cy.get("main") .scrollTo(0, 264) .then(() => { - cy.percySnapshot(); + cy.percySnapshot(null, { widths: [MOBILE_WIDTH] }); }); cy.findByTestId("dashboard-parameters-widget-container").should( @@ -99,16 +98,14 @@ describe(`visual tests > dashboard > parameters widget`, () => { }); it("is sticky in edit mode", () => { - cy.findByText("test question"); - - cy.viewport(375, 667); // iPhone SE + cy.viewport(MOBILE_WIDTH, 667); cy.icon("pencil").click(); cy.findByTestId("dashboard-parameters-and-cards") .scrollTo(0, 464) .then(() => { - cy.percySnapshot(); + cy.percySnapshot(null, { widths: [MOBILE_WIDTH] }); }); cy.findByTestId("edit-dashboard-parameters-widget-container").should( @@ -142,13 +139,13 @@ describe(`visual tests > dashboard > parameters widget`, () => { cy.editDashboardCard(card, updatedSize); visitDashboard(dashboard_id); + cy.findByText("test question"); + cy.findByText("Rustic Paper Wallet"); }); }); describe(`desktop`, () => { it("is sticky in view mode", () => { - cy.findByText("test question"); - cy.get("main") .scrollTo(0, 264) .then(() => { @@ -183,14 +180,12 @@ describe(`visual tests > dashboard > parameters widget`, () => { describe(`mobile`, () => { it("is not sticky in view mode", () => { - cy.findByText("test question"); - - cy.viewport(375, 667); // iPhone SE + cy.viewport(MOBILE_WIDTH, 667); cy.get("main") .scrollTo(0, 264) .then(() => { - cy.percySnapshot(); + cy.percySnapshot(null, { widths: [MOBILE_WIDTH] }); }); cy.findByTestId("dashboard-parameters-widget-container").should( @@ -201,16 +196,14 @@ describe(`visual tests > dashboard > parameters widget`, () => { }); it("is not sticky in edit mode", () => { - cy.findByText("test question"); - - cy.viewport(375, 667); // iPhone SE + cy.viewport(MOBILE_WIDTH, 667); cy.icon("pencil").click(); cy.findByTestId("dashboard-parameters-and-cards") .scrollTo(0, 464) .then(() => { - cy.percySnapshot(); + cy.percySnapshot(null, { widths: [MOBILE_WIDTH] }); }); cy.findByTestId("edit-dashboard-parameters-widget-container").should( diff --git a/frontend/test/metabase-visual/models/editor.cy.spec.js b/frontend/test/metabase-visual/models/editor.cy.spec.js index 0be451c5f7b..751c8c2e241 100644 --- a/frontend/test/metabase-visual/models/editor.cy.spec.js +++ b/frontend/test/metabase-visual/models/editor.cy.spec.js @@ -20,6 +20,7 @@ describe("visual tests > models > editor", () => { cy.visit(`/model/${MODEL_ID}/query`); cy.wait("@cardQuery"); cy.findByText(/Doing science/).should("not.exist"); + cy.wait(100); // waits for the colums widths calculation cy.percySnapshot( "visual tests > models > editor > GUI query > renders query editor correctly", ); @@ -35,6 +36,7 @@ describe("visual tests > models > editor", () => { cy.visit(`/model/${MODEL_ID}/metadata`); cy.wait("@cardQuery"); cy.findByText(/Doing science/).should("not.exist"); + cy.wait(100); // waits for the colums widths calculation cy.percySnapshot( "visual tests > models > editor > GUI query > renders metadata editor correctly", ); @@ -71,6 +73,7 @@ describe("visual tests > models > editor", () => { cy.visit(`/model/${MODEL_ID}/metadata`); cy.wait("@cardQuery"); cy.findByText(/Doing science/).should("not.exist"); + cy.wait(100); // waits for the colums widths calculation cy.percySnapshot( "visual tests > models > editor > native query > renders metadata editor correctly", ); diff --git a/frontend/test/metabase-visual/notebook/notebook.cy.spec.js b/frontend/test/metabase-visual/notebook/notebook.cy.spec.js index 38b9043d077..583f9bcfaf7 100644 --- a/frontend/test/metabase-visual/notebook/notebook.cy.spec.js +++ b/frontend/test/metabase-visual/notebook/notebook.cy.spec.js @@ -92,7 +92,7 @@ describe("visual tests > notebook > Run buttons", () => { cy.findByText("SQL query").click(); // Check that we're on the blank question page - cy.findByText("Here's where your results will appear"); + cy.findByText("Here's where your results will appear").click(); cy.percySnapshot( "visual tests > notebook > Run buttons in Native Query render correctly", { diff --git a/frontend/test/metabase-visual/onboarding/urls.cy.spec.js b/frontend/test/metabase-visual/onboarding/urls.cy.spec.js index 692d5aba187..a6421a9a5e6 100644 --- a/frontend/test/metabase-visual/onboarding/urls.cy.spec.js +++ b/frontend/test/metabase-visual/onboarding/urls.cy.spec.js @@ -36,6 +36,7 @@ describe("visual tests > onboarding > URLs", () => { cy.findByText("First collection"); cy.findByText("Your personal collection"); + cy.findByText("Orders"); cy.percySnapshot(); }); diff --git a/frontend/test/metabase-visual/visualizations/bar.cy.spec.js b/frontend/test/metabase-visual/visualizations/bar.cy.spec.js index a55e7e9f2ea..4590bcba840 100644 --- a/frontend/test/metabase-visual/visualizations/bar.cy.spec.js +++ b/frontend/test/metabase-visual/visualizations/bar.cy.spec.js @@ -1,4 +1,8 @@ -import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress"; +import { + restore, + visitQuestionAdhoc, + ensureDcChartVisibility, +} from "__support__/e2e/cypress"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; describe("visual tests > visualizations > bar", () => { @@ -28,6 +32,7 @@ describe("visual tests > visualizations > bar", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); diff --git a/frontend/test/metabase-visual/visualizations/funnel.cy.spec.js b/frontend/test/metabase-visual/visualizations/funnel.cy.spec.js index 7c3fdea7708..a3afacc6ce3 100644 --- a/frontend/test/metabase-visual/visualizations/funnel.cy.spec.js +++ b/frontend/test/metabase-visual/visualizations/funnel.cy.spec.js @@ -27,6 +27,7 @@ describe("visual tests > visualizations > funnel", () => { }, }); + cy.findByTestId("funnel-chart"); cy.percySnapshot(); }); @@ -52,6 +53,7 @@ describe("visual tests > visualizations > funnel", () => { }, }); + cy.findByTestId("funnel-chart"); cy.percySnapshot(); }); }); diff --git a/frontend/test/metabase-visual/visualizations/line.cy.spec.js b/frontend/test/metabase-visual/visualizations/line.cy.spec.js index 708cf04d4a2..3a184e7c9a6 100644 --- a/frontend/test/metabase-visual/visualizations/line.cy.spec.js +++ b/frontend/test/metabase-visual/visualizations/line.cy.spec.js @@ -1,4 +1,8 @@ -import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress"; +import { + restore, + visitQuestionAdhoc, + ensureDcChartVisibility, +} from "__support__/e2e/cypress"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; @@ -38,6 +42,7 @@ describe("visual tests > visualizations > line", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); @@ -74,6 +79,7 @@ describe("visual tests > visualizations > line", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); @@ -110,6 +116,7 @@ describe("visual tests > visualizations > line", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); @@ -149,6 +156,7 @@ describe("visual tests > visualizations > line", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); @@ -189,6 +197,7 @@ describe("visual tests > visualizations > line", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); }); diff --git a/frontend/test/metabase-visual/visualizations/row.cy.spec.js b/frontend/test/metabase-visual/visualizations/row.cy.spec.js index 8a3d105b6b2..c83be56588f 100644 --- a/frontend/test/metabase-visual/visualizations/row.cy.spec.js +++ b/frontend/test/metabase-visual/visualizations/row.cy.spec.js @@ -1,4 +1,8 @@ -import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress"; +import { + restore, + visitQuestionAdhoc, + ensureDcChartVisibility, +} from "__support__/e2e/cypress"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; @@ -33,6 +37,7 @@ describe("visual tests > visualizations > row", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); }); diff --git a/frontend/test/metabase-visual/visualizations/scatter.cy.spec.js b/frontend/test/metabase-visual/visualizations/scatter.cy.spec.js index 15a47fee5b1..1e7630491ca 100644 --- a/frontend/test/metabase-visual/visualizations/scatter.cy.spec.js +++ b/frontend/test/metabase-visual/visualizations/scatter.cy.spec.js @@ -1,4 +1,8 @@ -import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress"; +import { + restore, + visitQuestionAdhoc, + ensureDcChartVisibility, +} from "__support__/e2e/cypress"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; @@ -37,7 +41,7 @@ describe("visual tests > visualizations > scatter", () => { }, }); - cy.get(".dc-chart"); + ensureDcChartVisibility(); cy.percySnapshot(); }); @@ -65,7 +69,7 @@ describe("visual tests > visualizations > scatter", () => { }, }); - cy.get(".dc-chart"); + ensureDcChartVisibility(); cy.percySnapshot(); }); @@ -92,7 +96,7 @@ union all select 5, -20, 70`, }, }); - cy.get(".dc-chart"); + ensureDcChartVisibility(); cy.percySnapshot(); }); }); diff --git a/frontend/test/metabase-visual/visualizations/waterfall.cy.spec.js b/frontend/test/metabase-visual/visualizations/waterfall.cy.spec.js index a1057326f98..09c0c655cf4 100644 --- a/frontend/test/metabase-visual/visualizations/waterfall.cy.spec.js +++ b/frontend/test/metabase-visual/visualizations/waterfall.cy.spec.js @@ -1,4 +1,8 @@ -import { restore, visitQuestionAdhoc } from "__support__/e2e/cypress"; +import { + restore, + visitQuestionAdhoc, + ensureDcChartVisibility, +} from "__support__/e2e/cypress"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; @@ -40,6 +44,7 @@ describe("visual tests > visualizations > waterfall", () => { }, }); + ensureDcChartVisibility(); cy.percySnapshot(); }); }); -- GitLab