From 32d033fb5b75ea5d7f293da8fb5b080e5e30036e Mon Sep 17 00:00:00 2001 From: Nick Fitzpatrick <nick@metabase.com> Date: Wed, 21 Sep 2022 13:38:49 -0300 Subject: [PATCH] Adding tests for re-ordering bar chart series (#25468) * Adding tests for re-ordering bar chart series * PR feedback * more PR feedback --- .../e2e/helpers/e2e-ui-elements-helpers.js | 12 +++ .../visualizations/bar_chart.cy.spec.js | 78 ++++++++++++++++++- .../visualizations/funnel.cy.spec.js | 32 ++++---- 3 files changed, 101 insertions(+), 21 deletions(-) diff --git a/frontend/test/__support__/e2e/helpers/e2e-ui-elements-helpers.js b/frontend/test/__support__/e2e/helpers/e2e-ui-elements-helpers.js index fc91ae026e1..1da8687a900 100644 --- a/frontend/test/__support__/e2e/helpers/e2e-ui-elements-helpers.js +++ b/frontend/test/__support__/e2e/helpers/e2e-ui-elements-helpers.js @@ -83,3 +83,15 @@ export const questionInfoButton = () => { export const undo = () => { cy.findByTestId("toast-undo").findByText("Undo").click(); }; + +export const getDraggableElements = () => { + return cy.findAllByTestId(/draggable-item/); +}; + +export const moveColumnDown = (column, distance) => { + column + .trigger("mousedown", 0, 0, { force: true }) + .trigger("mousemove", 5, 5, { force: true }) + .trigger("mousemove", 0, distance * 50, { force: true }) + .trigger("mouseup", 0, distance * 50, { force: true }); +}; diff --git a/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js index c81a72e7ce4..6459e24ae2a 100644 --- a/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js +++ b/frontend/test/metabase/scenarios/visualizations/bar_chart.cy.spec.js @@ -1,9 +1,15 @@ -import { restore, visitQuestionAdhoc } from "__support__/e2e/helpers"; +import { + restore, + visitQuestionAdhoc, + sidebar, + getDraggableElements, + moveColumnDown, +} from "__support__/e2e/helpers"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; -const { ORDERS, ORDERS_ID } = SAMPLE_DATABASE; +const { ORDERS, ORDERS_ID, PEOPLE, PRODUCTS } = SAMPLE_DATABASE; describe("scenarios > visualizations > bar chart", () => { beforeEach(() => { @@ -103,4 +109,72 @@ describe("scenarios > visualizations > bar chart", () => { cy.get(".value-labels").should("contain", "19").and("contain", "20.0M"); }); }); + + describe("with x-axis series", () => { + beforeEach(() => { + visitQuestionAdhoc({ + display: "bar", + dataset_query: { + type: "query", + query: { + "source-table": ORDERS_ID, + aggregation: [["count"]], + breakout: [ + ["field", PEOPLE.SOURCE, { "source-field": ORDERS.USER_ID }], + [ + "field", + PRODUCTS.CATEGORY, + { "source-field": ORDERS.PRODUCT_ID }, + ], + ], + }, + database: SAMPLE_DB_ID, + }, + }); + + cy.findByText("Settings").click(); + sidebar().findByText("Data").click(); + }); + + it("should allow you to show/hide and reorder columns", () => { + moveColumnDown(getDraggableElements().eq(0), 2); + + getDraggableElements().each((element, index) => { + const draggableName = element[0].innerText; + cy.findAllByTestId("legend-item").eq(index).contains(draggableName); + }); + + const columnIndex = 1; + + getDraggableElements() + .eq(columnIndex) + .within(() => { + cy.icon("eye_filled").click(); + }); + + getDraggableElements() + .eq(columnIndex) + .invoke("text") + .then(columnName => { + cy.get(".Visualization").findByText(columnName).should("not.exist"); + cy.findAllByTestId("legend-item").should("have.length", 3); + cy.get(".enable-dots").should("have.length", 3); + }); + + getDraggableElements() + .eq(columnIndex) + .within(() => { + cy.icon("eye_crossed_out").click(); + }); + + getDraggableElements() + .eq(columnIndex) + .invoke("text") + .then(columnName => { + cy.get(".Visualization").findByText(columnName).should("exist"); + cy.findAllByTestId("legend-item").should("have.length", 4); + cy.get(".enable-dots").should("have.length", 4); + }); + }); + }); }); diff --git a/frontend/test/metabase/scenarios/visualizations/funnel.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/funnel.cy.spec.js index d00799d0d07..b7c789d3c13 100644 --- a/frontend/test/metabase/scenarios/visualizations/funnel.cy.spec.js +++ b/frontend/test/metabase/scenarios/visualizations/funnel.cy.spec.js @@ -1,4 +1,10 @@ -import { restore, visitQuestionAdhoc, sidebar } from "__support__/e2e/helpers"; +import { + restore, + visitQuestionAdhoc, + sidebar, + getDraggableElements, + moveColumnDown, +} from "__support__/e2e/helpers"; import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data"; import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; @@ -28,9 +34,9 @@ describe("scenarios > visualizations > funnel chart", () => { it("hould allow you to reorder and show/hide rows", () => { cy.log("ensure that rows are shown"); - getDraggableRows().should("have.length", 5); + getDraggableElements().should("have.length", 5); - getDraggableRows() + getDraggableElements() .first() .invoke("text") .then(name => { @@ -39,9 +45,9 @@ describe("scenarios > visualizations > funnel chart", () => { .first() .should("have.text", name); - moveColumnDown(getDraggableRows().first(), 2); + moveColumnDown(getDraggableElements().first(), 2); - getDraggableRows().eq(2).should("have.text", name); + getDraggableElements().eq(2).should("have.text", name); cy.findAllByTestId("funnel-chart-header") .eq(2) @@ -49,14 +55,14 @@ describe("scenarios > visualizations > funnel chart", () => { }); cy.log("toggle row visibility"); - getDraggableRows() + getDraggableElements() .eq(1) .within(() => { cy.icon("eye_filled").click(); }); cy.findAllByTestId("funnel-chart-header").should("have.length", 4); - getDraggableRows() + getDraggableElements() .eq(1) .within(() => { cy.icon("eye_crossed_out").click(); @@ -64,15 +70,3 @@ describe("scenarios > visualizations > funnel chart", () => { cy.findAllByTestId("funnel-chart-header").should("have.length", 5); }); }); - -function getDraggableRows() { - return cy.findAllByTestId(/draggable-item/); -} - -function moveColumnDown(column, distance) { - column - .trigger("mousedown", 0, 0, { force: true }) - .trigger("mousemove", 5, 5, { force: true }) - .trigger("mousemove", 0, distance * 50, { force: true }) - .trigger("mouseup", 0, distance * 50, { force: true }); -} -- GitLab