From 207d81469172252a3eb3bb7030dcd801a584a741 Mon Sep 17 00:00:00 2001
From: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
Date: Fri, 25 Sep 2020 17:00:57 +0200
Subject: [PATCH] Repro for #13022 (#13308)

---
 .../admin/datamodel/metrics.cy.spec.js        | 53 +++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js
index 69ef7020c0d..a6cc9408501 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/metrics.cy.spec.js
@@ -168,4 +168,57 @@ describe("scenarios > admin > datamodel > metrics", () => {
         .click();
     });
   });
+
+  describe("custom metrics", () => {
+    it("should save the metric using custom expressions (metabase#13022)", () => {
+      cy.visit("/admin/datamodel/metrics");
+      cy.findByText("New metric").click();
+
+      cy.log("**Create new metric based on Custom Expression**");
+      cy.findByText("Select a table").click();
+      popover().within(() => {
+        cy.findByText("Sample Dataset");
+        cy.findByText("Orders").click();
+      });
+      // "Count" is selected by defauult
+      cy.get(".QueryOption")
+        .contains("Count")
+        .click();
+      // Override it with "Custom Expression"
+      popover().within(() => {
+        cy.findByText("Custom Expression").click();
+        cy.get("[contenteditable='true']")
+          .click()
+          .clear()
+          .type("Sum([Discount] * [Quantity])", { delay: 100 });
+        cy.findByPlaceholderText("Name (required)")
+          .click()
+          .type("CE", { delay: 100 });
+        cy.findByText("Done").click();
+      });
+
+      const metricName = "Test CE Metric";
+      // Give it a name
+      cy.findByPlaceholderText("Something descriptive but not too long").type(
+        metricName,
+      );
+      // and description
+      cy.findByPlaceholderText(
+        "This is a good place to be more specific about less obvious metric rules",
+      ).type("Description");
+      // Save the custom metric
+      cy.findByText("Save changes")
+        .should("not.be.disabled")
+        .click();
+
+      cy.log("**Refresh the page and assert**");
+      cy.reload();
+      cy.url().should("be", "/admin/datamodel/metrics");
+      cy.findByText(
+        'Unexpected input given to normalize. Expected type to be "object", found "string".',
+      ).should("not.exist");
+
+      cy.findByText(metricName);
+    });
+  });
 });
-- 
GitLab