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 69ef7020c0d3447d48b9a3b7c52177149048f89d..a6cc9408501db8e74554d3c8e8d8364baebdf47b 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);
+    });
+  });
 });