diff --git a/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-date.cy.spec.js b/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-date.cy.spec.js index d149f7d0ce0ec51e8d8a9796a9c9d9361e1709ce..bfd2c7b3f011bfa0d2d4f6f3fee202d81c474e51 100644 --- a/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-date.cy.spec.js +++ b/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-date.cy.spec.js @@ -11,56 +11,77 @@ import { import { DASHBOARD_DATE_FILTERS } from "./helpers/e2e-dashboard-filter-data-objects"; import * as DateFilter from "../native-filters/helpers/e2e-date-filter-helpers"; -Object.entries(DASHBOARD_DATE_FILTERS).forEach( - ([filter, { value, representativeResult }]) => { - describe("scenarios > dashboard > filters > date", () => { - beforeEach(() => { - cy.intercept("GET", "/api/table/*/query_metadata").as("metadata"); +describe("scenarios > dashboard > filters > date", () => { + beforeEach(() => { + cy.intercept("GET", "/api/table/*/query_metadata").as("metadata"); - restore(); - cy.signInAsAdmin(); + restore(); + cy.signInAsAdmin(); - visitDashboard(1); + visitDashboard(1); - editDashboard(); - setFilter("Time", filter); + editDashboard(); + }); - cy.findByText("Select…").click(); - popover().contains("Created At").first().click(); - }); + it(`should work when set through the filter widget`, () => { + // Add and connect every single available date filter type + Object.entries(DASHBOARD_DATE_FILTERS).forEach(([filter]) => { + cy.log(`Make sure we can connect ${filter} filter`); + setFilter("Time", filter); - it(`should work for "${filter}" when set through the filter widget`, () => { - saveDashboard(); + cy.findByText("Select…").click(); + popover().contains("Created At").first().click(); + }); + + saveDashboard(); - filterWidget().click(); + // Go through each of the filters and make sure they work individually + Object.entries(DASHBOARD_DATE_FILTERS).forEach( + ([filter, { value, representativeResult }], index) => { + filterWidget().eq(index).click(); dateFilterSelector({ filterType: filter, filterValue: value, }); + cy.log(`Make sure ${filter} filter returns correct result`); cy.get(".Card").within(() => { cy.findByText(representativeResult); }); - }); - it(`should work for "${filter}" when set as the default filter`, () => { - cy.findByText("Default value").next().click(); + clearFilter(index); + }, + ); + }); - dateFilterSelector({ - filterType: filter, - filterValue: value, - }); + // Rather than going through every single filter type, + // make sure the default filter works for just one of the available options + it(`should work when set as the default filter`, () => { + setFilter("Time", "Month and Year"); + cy.findByText("Default value").next().click(); - saveDashboard(); + DateFilter.setMonthAndYear({ + month: "November", + year: "2016", + }); - cy.get(".Card").within(() => { - cy.findByText(representativeResult); - }); - }); + cy.findByText("Select…").click(); + popover().contains("Created At").first().click(); + + saveDashboard(); + + // The default value should immediately be applied + cy.get(".Card").within(() => { + cy.findByText("85.88"); }); - }, -); + + // Make sure we can override the default value + cy.findByText("November, 2016").click(); + popover().contains("June").click(); + cy.findByText("33.9"); + }); +}); function dateFilterSelector({ filterType, filterValue } = {}) { switch (filterType) { @@ -94,3 +115,8 @@ function dateFilterSelector({ filterType, filterValue } = {}) { throw new Error("Wrong filter type!"); } } + +function clearFilter(index) { + filterWidget().eq(index).find(".Icon-close").click(); + cy.wait("@dashcardQuery1"); +} diff --git a/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-sql-date.cy.spec.js b/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-sql-date.cy.spec.js index 14071cba73cfec5713ee893ebfa04bc69e55976c..0481013b911b73d210c35479bd6e4a3f50d933b2 100644 --- a/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-sql-date.cy.spec.js +++ b/frontend/test/metabase/scenarios/dashboard-filters/dashboard-filters-sql-date.cy.spec.js @@ -9,89 +9,81 @@ import { visitDashboard, } from "__support__/e2e/helpers"; -import { DASHBOARD_SQL_DATE_FILTERS } from "./helpers/e2e-dashboard-filter-sql-data-objects"; +import { + DASHBOARD_SQL_DATE_FILTERS, + questionDetails, +} from "./helpers/e2e-dashboard-filter-sql-data-objects"; import * as DateFilter from "../native-filters/helpers/e2e-date-filter-helpers"; -import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; - -const { PEOPLE } = SAMPLE_DATABASE; - -Object.entries(DASHBOARD_SQL_DATE_FILTERS).forEach( - ([filter, { value, representativeResult, sqlFilter }]) => { - describe("scenarios > dashboard > filters > SQL > date", () => { - beforeEach(() => { - restore(); - cy.signInAsAdmin(); +describe("scenarios > dashboard > filters > SQL > date", () => { + beforeEach(() => { + restore(); + cy.signInAsAdmin(); - const questionDetails = getQuestionDetails(sqlFilter); + cy.createNativeQuestionAndDashboard({ questionDetails }).then( + ({ body: { card_id, dashboard_id } }) => { + visitQuestion(card_id); - cy.createNativeQuestionAndDashboard({ questionDetails }).then( - ({ body: { card_id, dashboard_id } }) => { - visitQuestion(card_id); - - visitDashboard(dashboard_id); - }, - ); + visitDashboard(dashboard_id); + }, + ); - editDashboard(); - setFilter("Time", filter); + editDashboard(); + }); - cy.findByText("Select…").click(); - popover().contains("Filter").click(); - }); + it(`should work when set through the filter widget`, () => { + Object.entries(DASHBOARD_SQL_DATE_FILTERS).forEach(([filter]) => { + cy.log(`Make sure we can connect ${filter} filter`); + setFilter("Time", filter); - it(`should work for "${filter}" when set through the filter widget`, () => { - saveDashboard(); + cy.findByText("Select…").click(); + popover().contains(filter).click(); + }); - filterWidget().click(); + saveDashboard(); + Object.entries(DASHBOARD_SQL_DATE_FILTERS).forEach( + ([filter, { value, representativeResult }], index) => { + filterWidget().eq(index).click(); dateFilterSelector({ filterType: filter, filterValue: value, }); + cy.log(`Make sure ${filter} filter returns correct result`); cy.get(".Card").within(() => { cy.contains(representativeResult); }); - }); - it(`should work for "${filter}" when set as the default filter`, () => { - cy.findByText("Default value").next().click(); + clearFilter(index); + }, + ); + }); - dateFilterSelector({ - filterType: filter, - filterValue: value, - }); + it(`should work when set as the default filter`, () => { + setFilter("Time", "Month and Year"); - saveDashboard(); + cy.findByText("Default value").next().click(); + DateFilter.setMonthAndYear({ + month: "October", + year: "2017", + }); - cy.get(".Card").within(() => { - cy.contains(representativeResult); - }); - }); + cy.findByText("Select…").click(); + popover().contains("Month and Year").click(); + saveDashboard(); + + // The default value should immediately be applied + cy.get(".Card").within(() => { + cy.contains("Hudson Borer"); }); - }, -); - -function getQuestionDetails(filter) { - return { - name: "SQL with Field Filter", - native: { - query: - "select PEOPLE.NAME, PEOPLE.CREATED_AT from people where {{filter}} limit 10", - "template-tags": { - filter: { - id: "7136f057-cfa6-e6fb-40c1-02046a1df9fb", - name: "filter", - "display-name": "Filter", - type: "dimension", - dimension: ["field", PEOPLE.CREATED_AT, null], - "widget-type": filter, - }, - }, - }, - }; -} + + // Make sure we can override the default value + cy.findByText("October, 2017").click(); + popover().contains("August").click(); + cy.findByText("Oda Brakus"); + }); +}); function dateFilterSelector({ filterType, filterValue } = {}) { switch (filterType) { @@ -125,3 +117,8 @@ function dateFilterSelector({ filterType, filterValue } = {}) { throw new Error("Wrong filter type!"); } } + +function clearFilter(index) { + filterWidget().eq(index).find(".Icon-close").click(); + cy.wait("@dashcardQuery2"); +} diff --git a/frontend/test/metabase/scenarios/dashboard-filters/helpers/e2e-dashboard-filter-sql-data-objects.js b/frontend/test/metabase/scenarios/dashboard-filters/helpers/e2e-dashboard-filter-sql-data-objects.js index 870404da4e3d25f0c7ef7cab9cb6365b987e69bf..2948e3a93583e5afc29a8330d2d95edcb0481e1e 100644 --- a/frontend/test/metabase/scenarios/dashboard-filters/helpers/e2e-dashboard-filter-sql-data-objects.js +++ b/frontend/test/metabase/scenarios/dashboard-filters/helpers/e2e-dashboard-filter-sql-data-objects.js @@ -1,3 +1,7 @@ +import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database"; + +const { PEOPLE } = SAMPLE_DATABASE; + export const DASHBOARD_SQL_TEXT_FILTERS = { Dropdown: { sqlFilter: "string/=", @@ -135,3 +139,68 @@ export const DASHBOARD_SQL_DATE_FILTERS = { representativeResult: "Hudson Borer", }, }; + +export const questionDetails = { + name: "SQL with Field Filters", + native: { + query: + " select PEOPLE.NAME, PEOPLE.CREATED_AT from people where true\n [[AND {{monthyear}}]]\n [[AND {{quarteryear}}]]\n [[AND {{single}}]]\n [[AND {{range}}]]\n [[AND {{relative}}]]\n [[AND {{date}}]]\n limit 10", + "template-tags": { + monthyear: { + default: null, + dimension: ["field", PEOPLE.CREATED_AT, null], + "display-name": "Month and Year", + id: "5e40619a-34ff-426d-a5b8-251defe355e5", + name: "monthyear", + type: "dimension", + "widget-type": "date/month-year", + }, + quarteryear: { + default: null, + dimension: ["field", PEOPLE.CREATED_AT, null], + "display-name": "Quarter and Year", + id: "1f4ddbaf-e071-7be3-ce5d-fdc5b4f62ab9", + name: "quarteryear", + type: "dimension", + "widget-type": "date/quarter-year", + }, + single: { + default: null, + dimension: ["field", PEOPLE.CREATED_AT, null], + "display-name": "Single Date", + id: "726fd574-ed18-5b06-4d9d-4f901ef3378a", + name: "single", + type: "dimension", + "widget-type": "date/single", + }, + range: { + default: null, + dimension: ["field", PEOPLE.CREATED_AT, null], + "display-name": "Date Range", + id: "f4ed832a-8882-d25a-1517-95a7ac478660", + name: "range", + type: "dimension", + "widget-type": "date/range", + }, + relative: { + default: null, + dimension: ["field", PEOPLE.CREATED_AT, null], + "display-name": "Relative Date", + id: "4a6c70c8-8b39-7058-5b4e-7a7ede920fca", + name: "relative", + type: "dimension", + "widget-type": "date/relative", + }, + + date: { + default: null, + dimension: ["field", PEOPLE.CREATED_AT, null], + "display-name": "All Options", + id: "04171d50-5901-edaf-fba1-9b14211e965e", + name: "date", + type: "dimension", + "widget-type": "date/all-options", + }, + }, + }, +};