diff --git a/.circleci/config.yml b/.circleci/config.yml
index 2124dbb4a2dd947e3c0a98a71880cffd8d4b6a79..2b1c7d69b227342d58ba4ead29dcba630dd46bdb 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1264,7 +1264,25 @@ workflows:
           matrix:
             parameters:
               edition: ["ee", "oss"]
-              folder: ["admin", "binning", "collections", "dashboard", "dashboard-filters", "dashboard-filters-sql", "moderation", "native", "native-filters", "onboarding", "permissions", "question", "sharing", "smoketest", "visualizations"]
+              folder:
+                [
+                  "admin",
+                  "binning",
+                  "collections",
+                  "custom-column",
+                  "dashboard",
+                  "dashboard-filters",
+                  "dashboard-filters-sql",
+                  "moderation",
+                  "native",
+                  "native-filters",
+                  "onboarding",
+                  "permissions",
+                  "question",
+                  "sharing",
+                  "smoketest",
+                  "visualizations",
+                ]
           name: e2e-tests-<< matrix.folder >>-<< matrix.edition >>
           requires:
             - build-uberjar-<< matrix.edition >>
diff --git a/frontend/test/__support__/e2e/cypress.js b/frontend/test/__support__/e2e/cypress.js
index a99b3b12f74e52bdb65c77497e0437a16febacfc..1e294df3312e503c893f97e0b928e914fa3ce2fb 100644
--- a/frontend/test/__support__/e2e/cypress.js
+++ b/frontend/test/__support__/e2e/cypress.js
@@ -24,5 +24,6 @@ export * from "./helpers/e2e-data-model-helpers";
 export * from "./helpers/e2e-misc-helpers";
 export * from "./helpers/e2e-deprecated-helpers";
 export * from "./helpers/e2e-email-helpers";
+export * from "./helpers/e2e-custom-column-helpers";
 
 Cypress.on("uncaught:exception", (err, runnable) => false);
diff --git a/frontend/test/__support__/e2e/helpers/e2e-custom-column-helpers.js b/frontend/test/__support__/e2e/helpers/e2e-custom-column-helpers.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1fc0f85d97dfa8461f74ecfca0f4316731d04f0
--- /dev/null
+++ b/frontend/test/__support__/e2e/helpers/e2e-custom-column-helpers.js
@@ -0,0 +1,7 @@
+export function enterCustomColumnDetails({ formula, name } = {}) {
+  cy.get("[contenteditable='true']")
+    .as("formula")
+    .type(formula);
+
+  cy.findByPlaceholderText("Something nice and descriptive").type(name);
+}
diff --git a/frontend/test/metabase/scenarios/custom-column/cc-data-type.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/cc-data-type.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f53ea585864da89a8462f342f982f7a58259d2a
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/cc-data-type.cy.spec.js
@@ -0,0 +1,98 @@
+import {
+  restore,
+  openTable,
+  popover,
+  enterCustomColumnDetails,
+} from "__support__/e2e/cypress";
+
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
+
+const { ORDERS_ID, PEOPLE_ID, PRODUCTS_ID } = SAMPLE_DATASET;
+
+describe("scenarios > question > custom column > data type", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+  });
+
+  it("should understand string functions (metabase#13217)", () => {
+    openCustomColumnInTable(PRODUCTS_ID);
+
+    enterCustomColumnDetails({
+      formula: "concat([Category], [Title])",
+      name: "CategoryTitle",
+    });
+
+    cy.button("Done").click();
+
+    cy.findByText("Filter").click();
+    popover()
+      .findByText("CategoryTitle")
+      .click();
+
+    cy.findByPlaceholderText("Enter a number").should("not.exist");
+    cy.findByPlaceholderText("Enter some text");
+  });
+
+  it("should relay the type of a date field", () => {
+    openCustomColumnInTable(PEOPLE_ID);
+
+    enterCustomColumnDetails({ formula: "[Birth Date]", name: "DoB" });
+    cy.button("Done").click();
+
+    cy.findByText("Filter").click();
+    popover()
+      .findByText("DoB")
+      .click();
+
+    cy.findByPlaceholderText("Enter a number").should("not.exist");
+
+    cy.findByText("Previous");
+    cy.findByText("Days");
+  });
+
+  it("should handle CASE (metabase#13122)", () => {
+    openCustomColumnInTable(ORDERS_ID);
+
+    enterCustomColumnDetails({
+      formula: "case([Discount] > 0, [Created At], [Product → Created At])",
+      name: "MiscDate",
+    });
+    cy.button("Done").click();
+
+    cy.findByText("Filter").click();
+    popover()
+      .findByText("MiscDate")
+      .click();
+
+    cy.findByPlaceholderText("Enter a number").should("not.exist");
+
+    cy.findByText("Previous");
+    cy.findByText("Days");
+  });
+
+  it("should handle COALESCE", () => {
+    openCustomColumnInTable(ORDERS_ID);
+
+    enterCustomColumnDetails({
+      formula: "COALESCE([Product → Created At], [Created At])",
+      name: "MiscDate",
+    });
+    cy.button("Done").click();
+
+    cy.findByText("Filter").click();
+    popover()
+      .findByText("MiscDate")
+      .click();
+
+    cy.findByPlaceholderText("Enter a number").should("not.exist");
+
+    cy.findByText("Previous");
+    cy.findByText("Days");
+  });
+});
+
+function openCustomColumnInTable(table) {
+  openTable({ table, mode: "notebook" });
+  cy.findByText("Custom column").click();
+}
diff --git a/frontend/test/metabase/scenarios/custom-column/cc-error-feedback.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/cc-error-feedback.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..c838276bd46d97d8648fc3486935b97d70583ff4
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/cc-error-feedback.cy.spec.js
@@ -0,0 +1,85 @@
+import {
+  restore,
+  openProductsTable,
+  enterCustomColumnDetails,
+} from "__support__/e2e/cypress";
+
+describe("scenarios > question > custom column > error feedback", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+
+    openProductsTable({ mode: "notebook" });
+    cy.findByText("Custom column").click();
+  });
+
+  it("should catch mismatched parentheses", () => {
+    enterCustomColumnDetails({
+      formula: "FLOOR [Price]/2)",
+      name: "Massive Discount",
+    });
+
+    cy.contains(/^Expecting an opening parenthesis after function FLOOR/i);
+  });
+
+  it("should catch missing parentheses", () => {
+    enterCustomColumnDetails({
+      formula: "LOWER [Vendor]",
+      name: "Massive Discount",
+    });
+
+    cy.contains(/^Expecting an opening parenthesis after function LOWER/i);
+  });
+
+  it("should catch invalid characters", () => {
+    enterCustomColumnDetails({
+      formula: "[Price] / #",
+      name: "Massive Discount",
+    });
+
+    cy.contains(/^Invalid character: #/i);
+  });
+
+  it("should catch unterminated string literals", () => {
+    cy.get("[contenteditable='true']")
+      .type('[Category] = "widget')
+      .blur();
+
+    cy.findByText("Missing closing quotes");
+  });
+
+  it("should catch unterminated field reference", () => {
+    enterCustomColumnDetails({
+      formula: "[Price / 2",
+      name: "Massive Discount",
+    });
+
+    cy.contains(/^Missing a closing bracket/i);
+  });
+
+  it("should catch non-existent field reference", () => {
+    enterCustomColumnDetails({
+      formula: "abcdef",
+      name: "Non-existent",
+    });
+
+    cy.contains(/^Unknown Field: abcdef/i);
+  });
+
+  it("should show the correct number of CASE arguments in a custom expression", () => {
+    enterCustomColumnDetails({
+      formula: "CASE([Price]>0)",
+      name: "Sum Divide",
+    });
+
+    cy.contains(/^CASE expects 2 arguments or more/i);
+  });
+
+  it("should show the correct number of function arguments in a custom expression", () => {
+    cy.get("[contenteditable='true']")
+      .type("contains([Category])")
+      .blur();
+
+    cy.contains(/^Function contains expects 2 arguments/i);
+  });
+});
diff --git a/frontend/test/metabase/scenarios/custom-column/cc-expression-editor.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/cc-expression-editor.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..92909b9889d6b8e2fbf449a073359795f81b1865
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/cc-expression-editor.cy.spec.js
@@ -0,0 +1,57 @@
+import {
+  restore,
+  openOrdersTable,
+  enterCustomColumnDetails,
+} from "__support__/e2e/cypress";
+
+// ExpressionEditorTextfield jsx component
+describe("scenarios > question > custom column > expression editor", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+
+    // This is the default screen size but we need it explicitly set for this test because of the resize later on
+    cy.viewport(1280, 800);
+
+    openOrdersTable({ mode: "notebook" });
+    cy.findByText("Custom column").click();
+
+    enterCustomColumnDetails({
+      formula: "1+1", // Formula was intentionally written without spaces (important for this repro)!
+      name: "Math",
+    });
+    cy.button("Done").should("not.be.disabled");
+  });
+
+  it("should not accidentally delete Custom Column formula value and/or Custom Column name (metabase#15734)", () => {
+    cy.get("@formula")
+      .click()
+      .type("{movetoend}{leftarrow}{movetostart}{rightarrow}{rightarrow}")
+      .blur();
+    cy.findByDisplayValue("Math");
+    cy.button("Done").should("not.be.disabled");
+  });
+
+  /**
+   * 1. Explanation for `cy.get("@formula").click();`
+   *  - Without it, test runner is too fast and the test results in false positive.
+   *  - This gives it enough time to update the DOM. The same result can be achieved with `cy.wait(1)`
+   */
+  it("should not erase Custom column formula and Custom column name when expression is incomplete (metabase#16126)", () => {
+    cy.get("@formula")
+      .click()
+      .type("{movetoend}{backspace}")
+      .blur();
+    cy.findByText("Expected expression");
+    cy.button("Done").should("be.disabled");
+    cy.get("@formula").click(); /* See comment (1) above */
+    cy.findByDisplayValue("Math");
+  });
+
+  it("should not erase Custom Column formula and Custom Column name on window resize (metabase#16127)", () => {
+    cy.viewport(1260, 800);
+    cy.get("@formula").click(); /* See comment (1) above */
+    cy.findByDisplayValue("Math");
+    cy.button("Done").should("not.be.disabled");
+  });
+});
diff --git a/frontend/test/metabase/scenarios/custom-column/cc-help-text.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/cc-help-text.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac80db9ffe92edabdd8a3b56edaddf371703d499
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/cc-help-text.cy.spec.js
@@ -0,0 +1,52 @@
+import { restore, openProductsTable } from "__support__/e2e/cypress";
+
+describe("scenarios > question > custom column > help text", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+
+    openProductsTable({ mode: "notebook" });
+    cy.findByText("Custom column").click();
+  });
+
+  it("should appear while inside a function", () => {
+    cy.get("[contenteditable='true']").type("Lower(");
+    cy.findByText("lower(text)");
+  });
+
+  it("should appear after a field reference", () => {
+    cy.get("[contenteditable='true']").type("Lower([Category]");
+    cy.findByText("lower(text)");
+  });
+
+  it("should not appear while outside a function", () => {
+    cy.get("[contenteditable='true']").type("Lower([Category])");
+    cy.findByText("lower(text)").should("not.exist");
+  });
+
+  it("should not appear when formula field is not in focus (metabase#15891)", () => {
+    cy.get("[contenteditable='true']")
+      .as("formulaField")
+      .type(`rou{enter}1.5`);
+
+    cy.findByText("round([Temperature])");
+
+    cy.findByText(/Field formula/i).click(); // Click outside of formula field instead of blur
+    cy.findByText("round([Temperature])").should("not.exist");
+
+    // Should also work with escape key
+    cy.get("@formulaField").click();
+    cy.findByText("round([Temperature])");
+
+    cy.get("@formulaField").type("{esc}");
+    cy.findByText("round([Temperature])").should("not.exist");
+  });
+
+  it("should not disappear when clicked on (metabase#17548)", () => {
+    cy.get("[contenteditable='true']").type(`rou{enter}`);
+
+    // Shouldn't hide on click
+    cy.findByText("round([Temperature])").click();
+    cy.findByText("round([Temperature])");
+  });
+});
diff --git a/frontend/test/metabase/scenarios/custom-column/cc-typing-suggestion.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/cc-typing-suggestion.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0ef0560220339c049d17a52e48a878aaf25dbbd
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/cc-typing-suggestion.cy.spec.js
@@ -0,0 +1,52 @@
+import { restore, openProductsTable } from "__support__/e2e/cypress";
+
+describe("scenarios > question > custom column > typing suggestion", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+
+    openProductsTable({ mode: "notebook" });
+    cy.findByText("Custom column").click();
+  });
+
+  it("should not suggest arithmetic operators", () => {
+    cy.get("[contenteditable='true']").type("[Price] ");
+    cy.contains("/").should("not.exist");
+  });
+
+  it("should correctly accept the chosen field suggestion", () => {
+    cy.get("[contenteditable='true']").type(
+      "[Rating]{leftarrow}{leftarrow}{leftarrow}",
+    );
+
+    // accept the only suggested item, i.e. "[Rating]"
+    cy.get("[contenteditable='true']").type("{enter}");
+
+    // if the replacement is correct -> "[Rating]"
+    // if the replacement is wrong -> "[Rating] ng"
+    cy.get("[contenteditable='true']")
+      .contains("[Rating] ng")
+      .should("not.exist");
+  });
+
+  it("should correctly accept the chosen function suggestion", () => {
+    cy.get("[contenteditable='true']").type("LTRIM([Title])");
+
+    // Place the cursor between "is" and "empty"
+    cy.get("[contenteditable='true']").type(
+      Array(13)
+        .fill("{leftarrow}")
+        .join(""),
+    );
+
+    // accept the first suggested function, i.e. "length"
+    cy.get("[contenteditable='true']").type("{enter}");
+
+    cy.get("[contenteditable='true']").contains("length([Title])");
+  });
+
+  it("should correctly insert function suggestion with the opening parenthesis", () => {
+    cy.get("[contenteditable='true']").type("LOW{enter}");
+    cy.get("[contenteditable='true']").contains("lower(");
+  });
+});
diff --git a/frontend/test/metabase/scenarios/question/custom_column.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/custom-column.cy.spec.js
similarity index 59%
rename from frontend/test/metabase/scenarios/question/custom_column.cy.spec.js
rename to frontend/test/metabase/scenarios/custom-column/custom-column.cy.spec.js
index 843cbb9a2412573cbb586a712a624b6cfa2e9d49..34816ac76f8f14a1b3cc18e4968eb9e698084628 100644
--- a/frontend/test/metabase/scenarios/question/custom_column.cy.spec.js
+++ b/frontend/test/metabase/scenarios/custom-column/custom-column.cy.spec.js
@@ -2,17 +2,18 @@ import {
   restore,
   popover,
   openOrdersTable,
-  openProductsTable,
-  openPeopleTable,
   visitQuestionAdhoc,
+  enterCustomColumnDetails,
 } from "__support__/e2e/cypress";
 
 import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
 
 const { ORDERS, ORDERS_ID, PRODUCTS, PRODUCTS_ID } = SAMPLE_DATASET;
 
-describe("scenarios > question > custom columns", () => {
+describe("scenarios > question > custom column", () => {
   beforeEach(() => {
+    cy.intercept("POST", "/api/dataset").as("dataset");
+
     restore();
     cy.signInAsNormalUser();
   });
@@ -24,11 +25,9 @@ describe("scenarios > question > custom columns", () => {
     enterCustomColumnDetails({ formula: "1 + 1", name: "Math" });
     cy.button("Done").click();
 
-    cy.server();
-    cy.route("POST", "/api/dataset").as("dataset");
-
     cy.button("Visualize").click();
     cy.wait("@dataset");
+
     cy.findByText("There was a problem with your question").should("not.exist");
     cy.get(".Visualization").contains("Math");
   });
@@ -52,11 +51,9 @@ describe("scenarios > question > custom columns", () => {
       enterCustomColumnDetails({ formula, name });
       cy.button("Done").click();
 
-      cy.server();
-      cy.route("POST", "/api/dataset").as("dataset");
-
       cy.button("Visualize").click();
       cy.wait("@dataset");
+
       cy.get(".Visualization").contains(name);
     });
   });
@@ -95,61 +92,15 @@ describe("scenarios > question > custom columns", () => {
     });
     cy.button("Done").click();
 
-    cy.server();
-    cy.route("POST", "/api/dataset").as("dataset");
-
     cy.button("Visualize").click();
     cy.wait("@dataset");
+
     cy.findByText("There was a problem with your question").should("not.exist");
     // This is a pre-save state of the question but the column name should appear
     // both in tabular and graph views (regardless of which one is currently selected)
     cy.get(".Visualization").contains(columnName);
   });
 
-  it.skip("should allow 'zoom in' drill-through when grouped by custom column (metabase#13289)", () => {
-    openOrdersTable({ mode: "notebook" });
-
-    // Add custom column that will be used later in summarize (group by)
-    cy.findByText("Custom column").click();
-    enterCustomColumnDetails({ formula: "1 + 1", name: "Math" });
-    cy.button("Done").click();
-
-    cy.findByText("Summarize").click();
-    cy.findByText("Count of rows").click();
-    cy.findByText("Pick a column to group by").click();
-    popover()
-      .findByText("Math")
-      .click();
-
-    cy.icon("add")
-      .last()
-      .click();
-
-    popover().within(() => {
-      cy.findByText("Created At").click();
-    });
-
-    cy.server();
-    cy.route("POST", "/api/dataset").as("dataset");
-
-    cy.button("Visualize").click();
-    cy.wait("@dataset");
-
-    cy.get(".Visualization").within(() => {
-      cy.get("circle")
-        .eq(5) // random circle in the graph (there is no specific reason for this index)
-        .click({ force: true });
-    });
-
-    // Test should work even without this request, but it reduces a chance for a flake
-    cy.route("POST", "/api/dataset").as("zoom-in-dataset");
-
-    cy.findByText("Zoom in").click();
-    cy.wait("@zoom-in-dataset");
-
-    cy.findByText("There was a problem with your question").should("not.exist");
-  });
-
   it("should not return same results for columns with the same name (metabase#12649)", () => {
     openOrdersTable({ mode: "notebook" });
     // join with Products
@@ -204,8 +155,7 @@ describe("scenarios > question > custom columns", () => {
         },
       },
     }).then(({ body: { id: QUESTION_ID } }) => {
-      cy.server();
-      cy.route("POST", `/api/card/${QUESTION_ID}/query`).as("cardQuery");
+      cy.intercept("POST", `/api/card/${QUESTION_ID}/query`).as("cardQuery");
 
       cy.visit(`/question/${QUESTION_ID}`);
 
@@ -213,9 +163,9 @@ describe("scenarios > question > custom columns", () => {
       cy.wait("@cardQuery").then(xhr => {
         expect(xhr.response.body.error).not.to.exist;
       });
-
-      cy.findByText(CC_NAME);
     });
+
+    cy.findByText(CC_NAME);
   });
 
   it("should work with implicit joins (metabase#14080)", () => {
@@ -242,8 +192,7 @@ describe("scenarios > question > custom columns", () => {
       },
       display: "line",
     }).then(({ body: { id: QUESTION_ID } }) => {
-      cy.server();
-      cy.route("POST", `/api/card/${QUESTION_ID}/query`).as("cardQuery");
+      cy.intercept("POST", `/api/card/${QUESTION_ID}/query`).as("cardQuery");
 
       cy.visit(`/question/${QUESTION_ID}`);
 
@@ -251,10 +200,10 @@ describe("scenarios > question > custom columns", () => {
       cy.wait("@cardQuery").then(xhr => {
         expect(xhr.response.body.error).not.to.exist;
       });
-
-      cy.contains(`Sum of ${CC_NAME}`);
-      cy.get(".Visualization .dot").should("have.length.of.at.least", 8);
     });
+
+    cy.contains(`Sum of ${CC_NAME}`);
+    cy.get(".Visualization .dot").should("have.length.of.at.least", 8);
   });
 
   it.skip("should create custom column after aggregation with 'cum-sum/count' (metabase#13634)", () => {
@@ -365,9 +314,6 @@ describe("scenarios > question > custom columns", () => {
         },
       },
     }).then(({ body: { id: QUESTION_ID } }) => {
-      cy.server();
-      cy.route("POST", "/api/dataset").as("dataset");
-
       cy.visit(`/question/${QUESTION_ID}/notebook`);
     });
 
@@ -390,92 +336,9 @@ describe("scenarios > question > custom columns", () => {
     cy.contains("37.65");
   });
 
-  describe("data type", () => {
-    it("should understand string functions", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']")
-          .type("concat([Category], [Title])")
-          .blur();
-        cy.findByPlaceholderText("Something nice and descriptive").type(
-          "CategoryTitle",
-        );
-        cy.button("Done").click();
-      });
-      cy.findByText("Filter").click();
-      popover()
-        .findByText("CategoryTitle")
-        .click();
-      cy.findByPlaceholderText("Enter a number").should("not.exist");
-      cy.findByPlaceholderText("Enter some text");
-    });
-
-    it("should relay the type of a date field", () => {
-      openPeopleTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-
-      enterCustomColumnDetails({ formula: "[Birth Date]", name: "DoB" });
-      cy.findByText("Done").click();
-
-      cy.findByText("Filter").click();
-      popover()
-        .findByText("DoB")
-        .click();
-      cy.findByPlaceholderText("Enter a number").should("not.exist");
-      cy.findByText("Previous");
-      cy.findByText("Days");
-    });
-
-    it("should handle CASE", () => {
-      openOrdersTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']")
-          .type("case([Discount] > 0, [Created At], [Product → Created At])")
-          .blur();
-        cy.findByPlaceholderText("Something nice and descriptive").type(
-          "MiscDate",
-        );
-        cy.button("Done").click();
-      });
-      cy.findByText("Filter").click();
-      popover()
-        .findByText("MiscDate")
-        .click();
-      cy.findByPlaceholderText("Enter a number").should("not.exist");
-      cy.findByText("Previous");
-      cy.findByText("Days");
-    });
-
-    it("should handle COALESCE", () => {
-      openOrdersTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']")
-          .type("COALESCE([Product → Created At], [Created At])")
-          .blur();
-        cy.findByPlaceholderText("Something nice and descriptive").type(
-          "MiscDate",
-        );
-        cy.button("Done").click();
-      });
-      cy.findByText("Filter").click();
-      popover()
-        .findByText("MiscDate")
-        .click();
-      cy.findByPlaceholderText("Enter a number").should("not.exist");
-      cy.findByText("Previous");
-      cy.findByText("Days");
-    });
-  });
-
   it("should handle using `case()` when referencing the same column names (metabase#14854)", () => {
     const CC_NAME = "CE with case";
 
-    cy.server();
-    cy.route("POST", "/api/dataset").as("dataset");
-
     visitQuestionAdhoc({
       dataset_query: {
         type: "query",
@@ -546,120 +409,7 @@ describe("scenarios > question > custom columns", () => {
     cy.button("Done").should("not.be.disabled");
   });
 
-  describe("ExpressionEditorTextfield", () => {
-    beforeEach(() => {
-      // This is the default screen size but we need it explicitly set for this test because of the resize later on
-      cy.viewport(1280, 800);
-
-      openOrdersTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-
-      enterCustomColumnDetails({
-        formula: "1+1", // Formula was intentionally written without spaces (important for this repro)!
-        name: "Math",
-      });
-      cy.button("Done").should("not.be.disabled");
-    });
-
-    it("should not accidentally delete Custom Column formula value and/or Custom Column name (metabase#15734)", () => {
-      cy.get("@formula")
-        .click()
-        .type("{movetoend}{leftarrow}{movetostart}{rightarrow}{rightarrow}")
-        .blur();
-      cy.findByDisplayValue("Math");
-      cy.button("Done").should("not.be.disabled");
-    });
-
-    /**
-     * 1. Explanation for `cy.get("@formula").click();`
-     *  - Without it, test runner is too fast and the test results in false positive.
-     *  - This gives it enough time to update the DOM. The same result can be achieved with `cy.wait(1)`
-     */
-    it("should not erase Custom column formula and Custom column name when expression is incomplete (metabase#16126)", () => {
-      cy.get("@formula")
-        .click()
-        .type("{movetoend}{backspace}")
-        .blur();
-      cy.findByText("Expected expression");
-      cy.button("Done").should("be.disabled");
-      cy.get("@formula").click(); /* See comment (1) above */
-      cy.findByDisplayValue("Math");
-    });
-
-    it("should not erase Custom Column formula and Custom Column name on window resize (metabase#16127)", () => {
-      cy.viewport(1260, 800);
-      cy.get("@formula").click(); /* See comment (1) above */
-      cy.findByDisplayValue("Math");
-      cy.button("Done").should("not.be.disabled");
-    });
-  });
-
-  it("should maintain data type (metabase#13122)", () => {
-    openOrdersTable({ mode: "notebook" });
-    cy.findByText("Custom column").click();
-    enterCustomColumnDetails({
-      formula: "case([Discount] > 0, [Created At], [Product → Created At])",
-      name: "13112",
-    });
-    cy.button("Done").click();
-    cy.findByText("Filter").click();
-    popover()
-      .findByText("13112")
-      .click();
-    cy.findByPlaceholderText("Enter a number").should("not.exist");
-  });
-
-  it("filter based on `concat` function should not offer numeric options (metabase#13217)", () => {
-    openPeopleTable({ mode: "notebook" });
-    cy.findByText("Custom column").click();
-    enterCustomColumnDetails({
-      formula: `concat("State: ", [State])`,
-      name: "13217",
-    });
-    cy.button("Done").click();
-    cy.findByText("Filter").click();
-    popover()
-      .findByText("13217")
-      .click();
-    cy.findByPlaceholderText("Enter a number").should("not.exist");
-  });
-
-  it("custom expression helper shouldn't be visible when formula field is not in focus (metabase#15891)", () => {
-    openPeopleTable({ mode: "notebook" });
-    cy.findByText("Custom column").click();
-    popover().within(() => {
-      cy.get("[contenteditable='true']").type(`rou{enter}1.5`, {
-        delay: 100,
-      });
-    });
-    cy.findByText("round([Temperature])");
-    cy.findByText(/Field formula/i).click(); // Click outside of formula field instead of blur
-    cy.findByText("round([Temperature])").should("not.exist");
-
-    // Should also work with escape key
-    popover().within(() => cy.get("[contenteditable='true']").click());
-    cy.findByText("round([Temperature])");
-    popover().within(() => cy.get("[contenteditable='true']").type("{esc}"));
-    cy.findByText("round([Temperature])").should("not.exist");
-  });
-
-  it("custom expression helper shouldn't be hidden when clicked on (metabase#17548)", () => {
-    openPeopleTable({ mode: "notebook" });
-    cy.findByText("Custom column").click();
-    popover().within(() => {
-      cy.get("[contenteditable='true']").type(`rou{enter}`, {
-        delay: 100,
-      });
-    });
-
-    // Shouldn't hide on click
-    cy.findByText("round([Temperature])").click();
-    cy.findByText("round([Temperature])");
-  });
-
   it.skip("should work with `isNull` function (metabase#15922)", () => {
-    cy.intercept("POST", "/api/dataset").as("dataset");
-
     openOrdersTable({ mode: "notebook" });
     cy.findByText("Custom column").click();
     enterCustomColumnDetails({
@@ -676,8 +426,6 @@ describe("scenarios > question > custom columns", () => {
   });
 
   it.skip("should work with relative date filter applied to a custom column (metabase#16273)", () => {
-    cy.intercept("POST", "/api/dataset").as("dataset");
-
     openOrdersTable({ mode: "notebook" });
     cy.findByText("Custom column").click();
     popover().within(() => {
@@ -705,10 +453,3 @@ describe("scenarios > question > custom columns", () => {
     cy.findByText("MiscDate");
   });
 });
-
-function enterCustomColumnDetails({ formula, name } = {}) {
-  cy.get("[contenteditable='true']")
-    .as("formula")
-    .type(formula);
-  cy.findByPlaceholderText("Something nice and descriptive").type(name);
-}
diff --git a/frontend/test/metabase/scenarios/question/reproductions/12445-mysql-cc-apply-substring.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/12445-cc-mysql-apply-substring.cy.spec.js
similarity index 100%
rename from frontend/test/metabase/scenarios/question/reproductions/12445-mysql-cc-apply-substring.cy.spec.js
rename to frontend/test/metabase/scenarios/custom-column/reproductions/12445-cc-mysql-apply-substring.cy.spec.js
diff --git a/frontend/test/metabase/scenarios/custom-column/reproductions/13289-cc-post-aggregation-zoom-in.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/13289-cc-post-aggregation-zoom-in.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cc36e9a3560824fa135f0c77da4d807afeb548d
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/reproductions/13289-cc-post-aggregation-zoom-in.cy.spec.js
@@ -0,0 +1,59 @@
+import {
+  restore,
+  openOrdersTable,
+  popover,
+  enterCustomColumnDetails,
+} from "__support__/e2e/cypress";
+
+const CC_NAME = "Math";
+describe("issue 13289", () => {
+  beforeEach(() => {
+    cy.intercept("POST", "/api/dataset").as("dataset");
+
+    restore();
+    cy.signInAsAdmin();
+
+    openOrdersTable({ mode: "notebook" });
+
+    cy.findByText("Custom column").click();
+
+    // Add custom column that will be used later in summarize (group by)
+    enterCustomColumnDetails({ formula: "1 + 1", name: CC_NAME });
+    cy.button("Done").click();
+  });
+
+  it("should allow 'zoom in' drill-through when grouped by custom column (metabase#13289) (metabase#13289)", () => {
+    cy.findByText("Summarize").click();
+    cy.findByText("Count of rows").click();
+
+    cy.findByText("Pick a column to group by").click();
+
+    popover()
+      .findByText(CC_NAME)
+      .click();
+
+    cy.icon("add")
+      .last()
+      .click();
+
+    popover().within(() => {
+      cy.findByText("Created At").click();
+    });
+
+    cy.button("Visualize").click();
+    cy.wait("@dataset");
+
+    cy.get(".Visualization").within(() => {
+      cy.get("circle")
+        .eq(5) // random circle in the graph (there is no specific reason for this index)
+        .click({ force: true });
+    });
+
+    cy.findByText("Zoom in").click();
+    cy.wait("@dataset");
+
+    cy.findByText("There was a problem with your question").should("not.exist");
+
+    cy.findByText(`${CC_NAME} is equal to 2`);
+  });
+});
diff --git a/frontend/test/metabase/scenarios/question/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js
similarity index 100%
rename from frontend/test/metabase/scenarios/question/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js
rename to frontend/test/metabase/scenarios/custom-column/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js
diff --git a/frontend/test/metabase/scenarios/question/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js
similarity index 100%
rename from frontend/test/metabase/scenarios/question/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js
rename to frontend/test/metabase/scenarios/custom-column/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js
diff --git a/frontend/test/metabase/scenarios/custom-column/reproductions/14843-cc-apply-filter-not-equal-to.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/14843-cc-apply-filter-not-equal-to.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..4651361f06542ef6563249028f1d4bd233fca9b0
--- /dev/null
+++ b/frontend/test/metabase/scenarios/custom-column/reproductions/14843-cc-apply-filter-not-equal-to.cy.spec.js
@@ -0,0 +1,45 @@
+import { restore, popover } from "__support__/e2e/cypress";
+import { SAMPLE_DATASET } from "__support__/e2e/cypress_sample_dataset";
+
+const { PEOPLE, PEOPLE_ID } = SAMPLE_DATASET;
+const CC_NAME = "City Length";
+
+const questionDetails = {
+  name: "14843",
+  query: {
+    "source-table": PEOPLE_ID,
+    expressions: { [CC_NAME]: ["length", ["field", PEOPLE.CITY, null]] },
+  },
+};
+
+describe("issue 14843", () => {
+  beforeEach(() => {
+    cy.intercept("POST", "/api/dataset").as("dataset");
+
+    restore();
+    cy.signInAsAdmin();
+  });
+
+  it("should correctly filter custom column by 'Not equal to' (metabase#14843)", () => {
+    cy.createQuestion(questionDetails, { visitQuestion: true });
+
+    cy.icon("notebook").click();
+    cy.icon("filter").click();
+
+    popover()
+      .findByText(CC_NAME)
+      .click();
+
+    cy.findByText("Equal to").click();
+    cy.findByText("Not equal to").click();
+
+    cy.findByPlaceholderText("Enter a number").type("3");
+    cy.button("Add filter").click();
+
+    cy.button("Visualize").click();
+    cy.wait("@dataset");
+
+    cy.findByText(`${CC_NAME} is not equal to 3`);
+    cy.findByText("Rye").should("not.exist");
+  });
+});
diff --git a/frontend/test/metabase/scenarios/question/reproductions/15714-ce-percentile-accepts-two-params.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/15714-cc-postgres-percentile-accepts-two-params.cy.spec.js
similarity index 100%
rename from frontend/test/metabase/scenarios/question/reproductions/15714-ce-percentile-accepts-two-params.cy.spec.js
rename to frontend/test/metabase/scenarios/custom-column/reproductions/15714-cc-postgres-percentile-accepts-two-params.cy.spec.js
diff --git a/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js b/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js
index 640390f97f0582f1952f81aa0e9ff3f3769a08d4..4c92976c1ab0d7379b424143ecf2ead36d91c325 100644
--- a/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js
+++ b/frontend/test/metabase/scenarios/dashboard/dashboard-drill.cy.spec.js
@@ -777,57 +777,6 @@ describe("scenarios > dashboard > dashboard drill", () => {
     });
   });
 
-  it("should drill-through on chart based on a custom column (metabase#13289)", () => {
-    cy.server();
-    cy.route("POST", "/api/dataset").as("dataset");
-
-    cy.createQuestion({
-      name: "13289Q",
-      display: "line",
-      query: {
-        "source-table": ORDERS_ID,
-        expressions: {
-          two: ["+", 1, 1],
-        },
-        aggregation: [["count"]],
-        breakout: [
-          ["expression", "two"],
-          [
-            "field",
-            ORDERS.CREATED_AT,
-            {
-              "temporal-unit": "month",
-            },
-          ],
-        ],
-      },
-    }).then(({ body: { id: QUESTION_ID } }) => {
-      cy.createDashboard().then(({ body: { id: DASHBOARD_ID } }) => {
-        // Add question to the dashboard
-        cy.request("POST", `/api/dashboard/${DASHBOARD_ID}/cards`, {
-          cardId: QUESTION_ID,
-          row: 0,
-          col: 0,
-          sizeX: 12,
-          sizeY: 8,
-        });
-
-        cy.visit(`/dashboard/${DASHBOARD_ID}`);
-      });
-    });
-
-    cy.get(".Card circle")
-      .eq(1)
-      .click({ force: true });
-
-    cy.findByText("Zoom in").click();
-
-    cy.wait("@dataset");
-
-    cy.findByText("two is equal to 2");
-    cy.findByText("Created At is May, 2016");
-  });
-
   describe("should preserve dashboard filter and apply it to the question on a drill-through (metabase#11503)", () => {
     const ordersIdFilter = {
       name: "Orders ID",
diff --git a/frontend/test/metabase/scenarios/question/filter.cy.spec.js b/frontend/test/metabase/scenarios/question/filter.cy.spec.js
index f001a9700404dc13c4dd0e2ce1d31c755e1e7bba..efae1d23824596ea566907bce137ad14773d9f81 100644
--- a/frontend/test/metabase/scenarios/question/filter.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/filter.cy.spec.js
@@ -16,8 +16,6 @@ const {
   ORDERS_ID,
   PRODUCTS,
   PRODUCTS_ID,
-  PEOPLE,
-  PEOPLE_ID,
   REVIEWS,
   REVIEWS_ID,
 } = SAMPLE_DATASET;
@@ -533,26 +531,6 @@ describe("scenarios > question > filter", () => {
     popover().contains(/Sum of Total/i);
   });
 
-  it("should correctly filter custom column by 'Not equal to' (metabase#14843)", () => {
-    const CC_NAME = "City Length";
-
-    cy.server();
-    cy.route("POST", "/api/card/*/query").as("cardQuery");
-
-    cy.createQuestion({
-      name: "14843",
-      query: {
-        "source-table": PEOPLE_ID,
-        expressions: { [CC_NAME]: ["length", ["field", PEOPLE.CITY, null]] },
-        filter: ["!=", ["expression", CC_NAME], 3],
-      },
-    }).then(({ body: { id: QUESTION_ID } }) => {
-      cy.visit(`/question/${QUESTION_ID}`);
-    });
-    cy.wait("@cardQuery");
-    cy.findByText("Rye").should("not.exist");
-  });
-
   it("should filter using IsNull() and IsEmpty()", () => {
     openReviewsTable({ mode: "notebook" });
     cy.findByText("Filter").click();
diff --git a/frontend/test/metabase/scenarios/question/notebook.cy.spec.js b/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
index b4a073b526b72f0116063ddb7a7dac20da53db55..8c686545a227f3b2dc681ded09bc43d865dca2c2 100644
--- a/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
@@ -108,32 +108,6 @@ describe("scenarios > question > notebook", () => {
     });
   });
 
-  it("should show the correct number of function arguments in a custom expression", () => {
-    openProductsTable({ mode: "notebook" });
-    cy.findByText("Filter").click();
-    cy.findByText("Custom Expression").click();
-    cy.get("[contenteditable='true']")
-      .click()
-      .clear()
-      .type("contains([Category])", { delay: 50 });
-    cy.button("Done")
-      .should("not.be.disabled")
-      .click();
-    cy.contains(/^Function contains expects 2 arguments/i);
-  });
-
-  it("should show the correct number of CASE arguments in a custom expression", () => {
-    openProductsTable({ mode: "notebook" });
-    cy.findByText("Custom column").click();
-    popover().within(() => {
-      cy.get("[contenteditable='true']").type("CASE([Price]>0)");
-      cy.findByPlaceholderText("Something nice and descriptive")
-        .click()
-        .type("Sum Divide");
-      cy.contains(/^CASE expects 2 arguments or more/i);
-    });
-  });
-
   it("should append indexes to duplicate custom expression names (metabase#12104)", () => {
     cy.intercept("POST", "/api/dataset").as("dataset");
     openProductsTable({ mode: "notebook" });
@@ -853,156 +827,6 @@ describe("scenarios > question > notebook", () => {
       });
     });
   });
-
-  describe("error feedback", () => {
-    it("should catch mismatched parentheses", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']").type("FLOOR [Price]/2)");
-        cy.findByPlaceholderText("Something nice and descriptive")
-          .click()
-          .type("Massive Discount");
-        cy.contains(/^Expecting an opening parenthesis after function FLOOR/i);
-      });
-    });
-
-    it("should catch missing parentheses", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']").type("LOWER [Vendor]");
-        cy.findByPlaceholderText("Something nice and descriptive")
-          .click()
-          .type("Massive Discount");
-        cy.contains(/^Expecting an opening parenthesis after function LOWER/i);
-      });
-    });
-
-    it("should catch invalid characters", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']").type("[Price] / #");
-        cy.findByPlaceholderText("Something nice and descriptive")
-          .click()
-          .type("Massive Discount");
-        cy.contains(/^Invalid character: #/i);
-      });
-    });
-
-    it("should catch unterminated string literals", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Filter").click();
-      cy.findByText("Custom Expression").click();
-      cy.get("[contenteditable='true']")
-        .click()
-        .clear()
-        .type('[Category] = "widget', { delay: 50 });
-      cy.button("Done")
-        .should("not.be.disabled")
-        .click();
-      cy.findByText("Missing closing quotes");
-    });
-
-    it("should catch unterminated field reference", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']").type("[Price / 2");
-        cy.findByPlaceholderText("Something nice and descriptive")
-          .click()
-          .type("Massive Discount");
-        cy.contains(/^Missing a closing bracket/i);
-      });
-    });
-
-    it("should catch non-existent field reference", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      popover().within(() => {
-        cy.get("[contenteditable='true']").type("abcdef");
-        cy.findByPlaceholderText("Something nice and descriptive")
-          .click()
-          .type("Non-existent");
-        cy.contains(/^Unknown Field: abcdef/i);
-      });
-    });
-  });
-
-  describe("typing suggestion", () => {
-    it("should not suggest arithmetic operators", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      cy.get("[contenteditable='true']").type("[Price] ");
-      cy.contains("/").should("not.exist");
-    });
-
-    it("should correctly accept the chosen field suggestion", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      cy.get("[contenteditable='true']").type(
-        "[Rating]{leftarrow}{leftarrow}{leftarrow}",
-      );
-
-      // accept the only suggested item, i.e. "[Rating]"
-      cy.get("[contenteditable='true']").type("{enter}");
-
-      // if the replacement is correct -> "[Rating]"
-      // if the replacement is wrong -> "[Rating] ng"
-      cy.get("[contenteditable='true']")
-        .contains("[Rating] ng")
-        .should("not.exist");
-    });
-
-    it("should correctly accept the chosen function suggestion", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      cy.get("[contenteditable='true']").type("LTRIM([Title])");
-
-      // Place the cursor between "is" and "empty"
-      cy.get("[contenteditable='true']").type(
-        Array(13)
-          .fill("{leftarrow}")
-          .join(""),
-      );
-
-      // accept the first suggested function, i.e. "length"
-      cy.get("[contenteditable='true']").type("{enter}");
-
-      cy.get("[contenteditable='true']").contains("length([Title])");
-    });
-  });
-
-  describe("help text", () => {
-    it("should appear while inside a function", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      cy.get("[contenteditable='true']").type("Lower(");
-      cy.findByText("lower(text)");
-    });
-
-    it("should not appear while outside a function", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      cy.get("[contenteditable='true']").type("Lower([Category])");
-      cy.findByText("lower(text)").should("not.exist");
-    });
-
-    it("should appear after a field reference", () => {
-      openProductsTable({ mode: "notebook" });
-      cy.findByText("Custom column").click();
-      cy.get("[contenteditable='true']").type("Lower([Category]");
-      cy.findByText("lower(text)");
-    });
-  });
-
-  it("should correctly insert function suggestion with the opening parenthesis", () => {
-    openProductsTable({ mode: "notebook" });
-    cy.findByText("Custom column").click();
-    cy.get("[contenteditable='true']").type("LOW{enter}");
-    cy.get("[contenteditable='true']").contains("lower(");
-  });
 });
 
 // Extracted repro steps for #13000
diff --git a/frontend/test/metabase/scenarios/smoketest/user.cy.spec.js b/frontend/test/metabase/scenarios/smoketest/user.cy.spec.js
index afab9de136821163c613b5ed115a14f403a5fd04..09e9af460ae3d4eafb515ecf9696b9c4e0298f44 100644
--- a/frontend/test/metabase/scenarios/smoketest/user.cy.spec.js
+++ b/frontend/test/metabase/scenarios/smoketest/user.cy.spec.js
@@ -186,51 +186,6 @@ describe("smoketest > user", () => {
     cy.findAllByText("Created At");
   });
 
-  /**
-   * NOTE: - There is a HIGH chance that there are still references to the old "drill-through"/actions popover
-   *         among the skipped tests. Because of the urgency to fix smoke tests (2020-11-26) there is not enough
-   *         time to fully commit to cleaning skipped tests as well.
-   *
-   *       - In general, all smoke tests need serious refactoring
-   *
-   * TODO: - Once that work starts, make sure to update obsolete references in popover!
-   */
-
-  it.skip("should be able to create custom columns in the notebook editor", () => {
-    cy.icon("notebook").click();
-
-    // Delete last summary
-    cy.findAllByText("Count")
-      .first()
-      .click(70, 20);
-
-    // Switch table from Product to Orders
-
-    cy.findAllByText("Products")
-      .last()
-      .click();
-    cy.findByText("Orders").click();
-
-    // Create custom column
-    cy.icon("add_data").click();
-    cy.findByText("Product → Price").click();
-    cy.findByText("-").click();
-    cy.findByText("Subtotal").click();
-    cy.get(".PopoverBody")
-      .first()
-      .click();
-    cy.get("input[placeholder='Something nice and descriptive']").type(
-      "Demo Column",
-    );
-    cy.findByText("Done").click();
-    cy.button("Visualize").click();
-
-    cy.findByText("ID");
-    cy.icon("table2");
-    cy.wait(1000).findByText("Demo Column");
-    cy.findByText("Products").should("not.exist");
-  });
-
   it.skip("should be able to use all notebook editor functions", () => {
     // Custom JOINs