From 07b90c23b0f076cc7e48c42d9eb3f272d9c30cd4 Mon Sep 17 00:00:00 2001 From: Alexander Lesnenko <alxnddr@users.noreply.github.com> Date: Wed, 11 May 2022 13:08:10 +0400 Subject: [PATCH] fix invalid unit on dashboard relative date time filters (#22596) --- frontend/src/metabase/lib/query_time.js | 4 +- .../22482-round-relative-ranges.cy.spec.js | 56 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 frontend/test/metabase/scenarios/dashboard-filters/reproductions/22482-round-relative-ranges.cy.spec.js diff --git a/frontend/src/metabase/lib/query_time.js b/frontend/src/metabase/lib/query_time.js index 5cbee218f7e..b17e2f621ed 100644 --- a/frontend/src/metabase/lib/query_time.js +++ b/frontend/src/metabase/lib/query_time.js @@ -30,14 +30,16 @@ export const DATETIME_UNITS = [ export function computeFilterTimeRange(filter) { let expandedFilter; + let defaultUnit; if (filter[0] === "time-interval") { + defaultUnit = filter[3]; expandedFilter = expandTimeIntervalFilter(filter); } else { expandedFilter = filter; } const [operator, field, ...values] = expandedFilter; - const bucketing = parseFieldBucketing(field, "day"); + const bucketing = parseFieldBucketing(field, defaultUnit ?? "day"); let start, end; if (isStartingFrom(filter)) { diff --git a/frontend/test/metabase/scenarios/dashboard-filters/reproductions/22482-round-relative-ranges.cy.spec.js b/frontend/test/metabase/scenarios/dashboard-filters/reproductions/22482-round-relative-ranges.cy.spec.js new file mode 100644 index 00000000000..6d333cf5dea --- /dev/null +++ b/frontend/test/metabase/scenarios/dashboard-filters/reproductions/22482-round-relative-ranges.cy.spec.js @@ -0,0 +1,56 @@ +import moment from "moment"; +import { + restore, + popover, + filterWidget, + editDashboard, + saveDashboard, + setFilter, + visitDashboard, +} from "__support__/e2e/cypress"; + +describe("issue 22482", () => { + beforeEach(() => { + restore(); + cy.signInAsAdmin(); + + visitDashboard(1); + + editDashboard(); + setFilter("Time", "All Options"); + + cy.findByText("Select…").click(); + popover() + .contains("Created At") + .eq(0) + .click(); + + saveDashboard(); + + filterWidget().click(); + cy.findByText("Relative dates...").click(); + }); + + it("should round relative date range (metabase#22482)", () => { + cy.findByTestId("relative-datetime-value") + .clear() + .type(15); + cy.findByTestId("relative-datetime-unit").click(); + cy.findByText("months").click(); + + const expectedRange = getFormattedRange( + moment() + .startOf("month") + .add(-16, "month"), + moment() + .add(-1, "month") + .endOf("month"), + ); + + cy.findByText(expectedRange); + }); +}); + +function getFormattedRange(start, end) { + return `${start.format("MMM D, YYYY")} - ${end.format("MMM D, YYYY")}`; +} -- GitLab