diff --git a/frontend/src/metabase/lib/schema_metadata.js b/frontend/src/metabase/lib/schema_metadata.js index c89ee5b0cdd9026c6d2577cec28c4fd0747b434c..2a9c82b7608fbc98e20599a2dbfd942f4994e188 100644 --- a/frontend/src/metabase/lib/schema_metadata.js +++ b/frontend/src/metabase/lib/schema_metadata.js @@ -73,8 +73,8 @@ const TYPES = { exclude: [ENTITY, LOCATION, TEMPORAL], }, [SCOPE]: { - include: [NUMBER, TEMPORAL], - exclude: [ENTITY, LOCATION], + include: [NUMBER, TEMPORAL, CATEGORY, ENTITY], + exclude: [LOCATION], }, [CATEGORY]: { base: [TYPE.Boolean], diff --git a/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.cy.spec.js b/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.cy.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..65e7b9b52753b6977db1bf04cd8f8e47993df2e1 --- /dev/null +++ b/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.cy.spec.js @@ -0,0 +1,97 @@ +import { + enterCustomColumnDetails, + popover, + restore, + visualize, +} from "__support__/e2e/cypress"; + +describe("issue 18207", () => { + beforeEach(() => { + cy.intercept("POST", "/api/dataset").as("dataset"); + + restore(); + cy.signInAsAdmin(); + }); + + it("should be possible to use MIN on a string column (metabase#18207)", () => { + cy.visit("/question/new"); + cy.contains("Custom question").click(); + cy.contains("Sample Dataset").click(); + cy.contains("Products").click(); + + cy.contains("Pick the metric").click(); + + cy.contains("Minimum of").click(); + cy.findByText("Price"); + cy.findByText("Rating"); + cy.contains("Category").click(); + + visualize(); + + cy.findByText("Doohickey"); + }); + + it("should be possible to use MAX on a string column (metabase#18207)", () => { + cy.visit("/question/new"); + cy.contains("Custom question").click(); + cy.contains("Sample Dataset").click(); + cy.contains("Products").click(); + + cy.contains("Pick the metric").click(); + + cy.contains("Maximum of").click(); + cy.findByText("Price"); + cy.findByText("Rating"); + cy.contains("Category").click(); + + visualize(); + + cy.findByText("Widget"); + }); + + it("should be not possible to use AVERAGE on a string column (metabase#18207)", () => { + cy.visit("/question/new"); + cy.contains("Custom question").click(); + cy.contains("Sample Dataset").click(); + cy.contains("Products").click(); + + cy.contains("Pick the metric").click(); + + cy.contains("Average of").click(); + cy.findByText("Price"); + cy.findByText("Rating"); + cy.findByText("Category").should("not.exist"); + }); + + it("should be possible to group by a string expression (metabase#18207)", () => { + cy.visit("/question/new"); + cy.contains("Custom question").click(); + cy.contains("Sample Dataset").click(); + cy.contains("Products").click(); + + cy.contains("Pick the metric").click(); + popover() + .contains("Custom Expression") + .click(); + popover().within(() => { + enterCustomColumnDetails({ formula: "Max([Vendor])" }); + cy.findByPlaceholderText("Name (required)").type("LastVendor"); + cy.findByText("Done").click(); + }); + + cy.contains("Pick a column to group by").click(); + popover() + .contains("Category") + .click(); + + visualize(); + + // Why is it not a table? + cy.contains("Settings").click(); + cy.contains("Bar options").click(); + cy.get("[data-testid=Table-button]").click(); + cy.contains("Done").click(); + + cy.findByText("Zemlak-Wiegand"); + }); +});