Skip to content

Commit 33939b0

Browse files
[Dashboard filters coverage] Add initial set of tests for dashboard date filters (metabase#17173)
1 parent 4d62207 commit 33939b0

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed

frontend/test/__support__/e2e/helpers/e2e-dashboard-helpers.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,14 @@ export function checkFilterLabelAndValue(label, value) {
3636

3737
cy.get("fieldset").contains(value);
3838
}
39+
40+
export function setFilter(type, subType) {
41+
cy.icon("filter").click();
42+
43+
cy.findByText("What do you want to filter?");
44+
45+
popover().within(() => {
46+
cy.findByText(type).click();
47+
cy.findByText(subType).click();
48+
});
49+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import {
2+
restore,
3+
popover,
4+
mockSessionProperty,
5+
filterWidget,
6+
editDashboard,
7+
saveDashboard,
8+
setFilter,
9+
} from "__support__/e2e/cypress";
10+
11+
import { DASHBOARD_DATE_FILTERS } from "./helpers/e2e-dashboard-filter-data-objects";
12+
import * as DateFilter from "../native-filters/helpers/e2e-date-filter-helpers";
13+
14+
Object.entries(DASHBOARD_DATE_FILTERS).forEach(
15+
([filter, { value, representativeResult }]) => {
16+
describe(`should work for ${filter}`, () => {
17+
beforeEach(() => {
18+
cy.intercept("GET", "/api/table/*/query_metadata").as("metadata");
19+
20+
restore();
21+
cy.signInAsAdmin();
22+
23+
mockSessionProperty("field-filter-operators-enabled?", true);
24+
25+
cy.visit("/dashboard/1");
26+
27+
editDashboard();
28+
setFilter("Time", filter);
29+
30+
cy.findByText("Column to filter on")
31+
.next("a")
32+
.click();
33+
34+
popover()
35+
.contains("Created At")
36+
.first()
37+
.click();
38+
});
39+
40+
it(`should work for "${filter}" when set through the filter widget`, () => {
41+
saveDashboard();
42+
43+
filterWidget().click();
44+
45+
dateFilterSelector({
46+
filterType: filter,
47+
filterValue: value,
48+
});
49+
50+
cy.get(".Card").within(() => {
51+
cy.findByText(representativeResult);
52+
});
53+
});
54+
55+
it(`should work for "${filter}" when set as the default filter`, () => {
56+
cy.findByText("Default value")
57+
.next()
58+
.click();
59+
60+
dateFilterSelector({
61+
filterType: filter,
62+
filterValue: value,
63+
});
64+
saveDashboard();
65+
66+
cy.get(".Card").within(() => {
67+
cy.findByText(representativeResult);
68+
});
69+
});
70+
});
71+
},
72+
);
73+
74+
function dateFilterSelector({ filterType, filterValue } = {}) {
75+
switch (filterType) {
76+
case "Month and Year":
77+
DateFilter.setMonthAndYear(filterValue);
78+
break;
79+
80+
case "Quarter and Year":
81+
DateFilter.setQuarterAndYear(filterValue);
82+
break;
83+
84+
case "Single Date":
85+
DateFilter.setSingleDate(filterValue);
86+
break;
87+
88+
case "Date Range":
89+
DateFilter.setDateRange(filterValue);
90+
break;
91+
92+
case "Relative Date":
93+
DateFilter.setRelativeDate(filterValue);
94+
break;
95+
96+
case "All Options":
97+
DateFilter.setAdHocFilter(filterValue);
98+
break;
99+
100+
default:
101+
throw new Error("Wrong filter type!");
102+
}
103+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
export const DASHBOARD_DATE_FILTERS = {
2+
"Month and Year": {
3+
value: {
4+
month: "November",
5+
year: "2016",
6+
},
7+
representativeResult: "85.88",
8+
},
9+
"Quarter and Year": {
10+
value: {
11+
quarter: "Q2",
12+
year: "2016",
13+
},
14+
representativeResult: "44.43",
15+
},
16+
"Single Date": {
17+
value: "15",
18+
representativeResult: "No results!",
19+
},
20+
"Date Range": {
21+
value: {
22+
startDate: "13",
23+
endDate: "15",
24+
},
25+
representativeResult: "No results!",
26+
},
27+
"Relative Date": {
28+
value: "Past 7 days",
29+
representativeResult: "No results!",
30+
},
31+
"All Options": {
32+
value: {
33+
timeBucket: "Years",
34+
},
35+
representativeResult: "37.65",
36+
},
37+
};

0 commit comments

Comments
 (0)