From 0f54f772edbd23a9ce60525d6279c3df84029fea Mon Sep 17 00:00:00 2001
From: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
Date: Fri, 6 Oct 2023 14:40:04 +0200
Subject: [PATCH] Remove and disallow H2 from E2E tests (#34364)

* Make it easy to add SQLite database

* Replace H2 with SQLite in E2E tests

* Remove long unused E2E reproduction

It's been sufficiently covered with backend tests.

* Remove H2 database helper from E2E tests
---
 e2e/support/commands.js                       |  2 +-
 .../commands/database/addH2SampleDatabase.js  | 16 -----
 .../commands/database/addSQLiteDatabase.js    | 27 ++++++++
 .../database-prompt-banner.cy.spec.js         |  2 +-
 .../reproductions/14145.cy.spec.js            | 68 -------------------
 ...n-before-it-is-possible-to-save.cy.spec.js |  4 +-
 .../onboarding/home/homepage.cy.spec.js       | 10 +--
 .../onboarding/reference/databases.cy.spec.js |  2 +-
 e2e/test/scenarios/question/new.cy.spec.js    |  2 +-
 9 files changed, 38 insertions(+), 95 deletions(-)
 delete mode 100644 e2e/support/commands/database/addH2SampleDatabase.js
 create mode 100644 e2e/support/commands/database/addSQLiteDatabase.js
 delete mode 100644 e2e/test/scenarios/native-filters/reproductions/14145.cy.spec.js

diff --git a/e2e/support/commands.js b/e2e/support/commands.js
index 2a070cb4f5a..9ee7e01d14b 100644
--- a/e2e/support/commands.js
+++ b/e2e/support/commands.js
@@ -23,7 +23,7 @@ import "./commands/user/authentication";
 import "./commands/permissions/updatePermissions";
 import "./commands/permissions/sandboxTable";
 
-import "./commands/database/addH2SampleDatabase";
+import "./commands/database/addSQLiteDatabase";
 
 import "./commands/visibility/isVisibleInPopover";
 import "./commands/visibility/findByTextEnsureVisible";
diff --git a/e2e/support/commands/database/addH2SampleDatabase.js b/e2e/support/commands/database/addH2SampleDatabase.js
deleted file mode 100644
index 2f957bd1e29..00000000000
--- a/e2e/support/commands/database/addH2SampleDatabase.js
+++ /dev/null
@@ -1,16 +0,0 @@
-Cypress.Commands.add(
-  "addH2SampleDatabase",
-  ({ name, auto_run_queries = false, is_full_sync = false } = {}) => {
-    cy.log(`Add another H2 sample database DB called "${name}"`);
-    cy.request("POST", "/api/database", {
-      engine: "h2",
-      name,
-      details: {
-        db: "zip:./target/uberjar/metabase.jar!/sample-database.db;USER=GUEST;PASSWORD=guest",
-      },
-      auto_run_queries,
-      is_full_sync,
-      schedules: {},
-    });
-  },
-);
diff --git a/e2e/support/commands/database/addSQLiteDatabase.js b/e2e/support/commands/database/addSQLiteDatabase.js
new file mode 100644
index 00000000000..69f20e1fbdb
--- /dev/null
+++ b/e2e/support/commands/database/addSQLiteDatabase.js
@@ -0,0 +1,27 @@
+Cypress.Commands.add(
+  "addSQLiteDatabase",
+  ({ name = "sqlite", auto_run_queries = true, is_full_sync = true } = {}) => {
+    cy.log(`Add SQLite database DB called "${name}"`);
+    cy.request("POST", "/api/database", {
+      engine: "sqlite",
+      name,
+      details: { db: "./resources/sqlite-fixture.db" },
+      auto_run_queries,
+      is_full_sync,
+      schedules: {
+        cache_field_values: {
+          schedule_day: null,
+          schedule_frame: null,
+          schedule_hour: 0,
+          schedule_type: "daily",
+        },
+        metadata_sync: {
+          schedule_day: null,
+          schedule_frame: null,
+          schedule_hour: null,
+          schedule_type: "hourly",
+        },
+      },
+    });
+  },
+);
diff --git a/e2e/test/scenarios/admin/databases/database-prompt-banner.cy.spec.js b/e2e/test/scenarios/admin/databases/database-prompt-banner.cy.spec.js
index a63c16d0475..5528e9b40df 100644
--- a/e2e/test/scenarios/admin/databases/database-prompt-banner.cy.spec.js
+++ b/e2e/test/scenarios/admin/databases/database-prompt-banner.cy.spec.js
@@ -105,7 +105,7 @@ describeEE("database prompt banner", () => {
 
       it("should not render for any other condition", () => {
         // Adding a second database should prevent the database prompt
-        cy.addH2SampleDatabase({ name: "H2 DB" });
+        cy.addSQLiteDatabase();
 
         visitFullAppEmbeddingUrl({
           url: "/",
diff --git a/e2e/test/scenarios/native-filters/reproductions/14145.cy.spec.js b/e2e/test/scenarios/native-filters/reproductions/14145.cy.spec.js
deleted file mode 100644
index 98826fb928a..00000000000
--- a/e2e/test/scenarios/native-filters/reproductions/14145.cy.spec.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import { restore } from "e2e/support/helpers";
-import { SAMPLE_DATABASE } from "e2e/support/cypress_sample_database";
-
-const { PRODUCTS } = SAMPLE_DATABASE;
-
-const filter = {
-  id: "774521fb-e03f-3df1-f2ae-e952c97035e3",
-  name: "FILTER",
-  "display-name": "Filter",
-  type: "dimension",
-  dimension: ["field-id", PRODUCTS.CATEGORY],
-  "widget-type": "category",
-  default: null,
-};
-
-const nativeQuery = {
-  name: "14145",
-  native: {
-    query: "SELECT COUNT(*) FROM products WHERE {{filter}}",
-    "template-tags": {
-      filter,
-    },
-  },
-};
-
-describe.skip("issue 14145", () => {
-  beforeEach(() => {
-    cy.intercept("POST", "/api/dataset").as("dataset");
-
-    restore();
-    cy.signInAsAdmin();
-
-    cy.addH2SampleDatabase({
-      name: "Sample2",
-      auto_run_queries: true,
-      is_full_sync: true,
-    });
-
-    cy.createNativeQuestion(nativeQuery, { visitQuestion: true });
-  });
-
-  it("`field-id` should update when database source is changed (metabase#14145)", () => {
-    // Change the source from "Sample Database" to the other database
-    // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
-    cy.findByText(/Open Editor/i).click();
-
-    cy.get(".GuiBuilder-data").as("source").contains("Sample Database").click();
-    // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
-    cy.findByText("Sample2").click();
-
-    // First assert on the UI
-    cy.icon("variable").click();
-    // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
-    cy.findByText(/Field to map to/)
-      .siblings("a")
-      .contains("Category");
-
-    // Rerun the query and assert on the dimension (field-id) that didn't change
-    cy.findByTestId("native-query-editor-container").icon("play").click();
-
-    cy.wait("@dataset").then(xhr => {
-      const { dimension } =
-        xhr.response.body.json_query.native["template-tags"].FILTER;
-
-      expect(dimension).not.to.contain(PRODUCTS.CATEGORY);
-    });
-  });
-});
diff --git a/e2e/test/scenarios/native/reproductions/18148-save-button-before-it-is-possible-to-save.cy.spec.js b/e2e/test/scenarios/native/reproductions/18148-save-button-before-it-is-possible-to-save.cy.spec.js
index 175e5f591f7..edf7e19a594 100644
--- a/e2e/test/scenarios/native/reproductions/18148-save-button-before-it-is-possible-to-save.cy.spec.js
+++ b/e2e/test/scenarios/native/reproductions/18148-save-button-before-it-is-possible-to-save.cy.spec.js
@@ -1,13 +1,13 @@
 import { restore, openNativeEditor } from "e2e/support/helpers";
 
-const dbName = "Sample2";
+const dbName = "sqlite";
 
 describe("issue 18148", () => {
   beforeEach(() => {
     restore();
     cy.signInAsAdmin();
 
-    cy.addH2SampleDatabase({
+    cy.addSQLiteDatabase({
       name: dbName,
     });
 
diff --git a/e2e/test/scenarios/onboarding/home/homepage.cy.spec.js b/e2e/test/scenarios/onboarding/home/homepage.cy.spec.js
index 4143633a5f6..3d3082bb4f4 100644
--- a/e2e/test/scenarios/onboarding/home/homepage.cy.spec.js
+++ b/e2e/test/scenarios/onboarding/home/homepage.cy.spec.js
@@ -53,15 +53,15 @@ describe("scenarios > home > homepage", () => {
 
     it("should display x-rays for a user database", () => {
       cy.signInAsAdmin();
-      cy.addH2SampleDatabase({ name: "H2" });
+      cy.addSQLiteDatabase();
 
       cy.visit("/");
       cy.wait("@getXrayCandidates");
       // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
       cy.findByText("Here are some explorations of");
-      cy.findAllByRole("link").contains("H2");
+      cy.findAllByRole("link").contains("sqlite");
       // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
-      cy.findByText("Orders").click();
+      cy.findByText("Number With Nulls").click();
 
       cy.wait("@getXrayDashboard");
       // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
@@ -70,7 +70,7 @@ describe("scenarios > home > homepage", () => {
 
     it("should allow switching between multiple schemas for x-rays", () => {
       cy.signInAsAdmin();
-      cy.addH2SampleDatabase({ name: "H2" });
+      cy.addSQLiteDatabase({ name: "sqlite" });
       cy.intercept("/api/automagic-*/database/**", getXrayCandidates());
 
       cy.visit("/");
@@ -78,7 +78,7 @@ describe("scenarios > home > homepage", () => {
       cy.findByText(/Here are some explorations of the/);
       // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
       cy.findByText("public");
-      cy.findAllByRole("link").contains("H2");
+      cy.findAllByRole("link").contains("sqlite");
       // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
       cy.findByText("Orders");
       // eslint-disable-next-line no-unscoped-text-selectors -- deprecated usage
diff --git a/e2e/test/scenarios/onboarding/reference/databases.cy.spec.js b/e2e/test/scenarios/onboarding/reference/databases.cy.spec.js
index ab907a01a27..2b7c0d71b2d 100644
--- a/e2e/test/scenarios/onboarding/reference/databases.cy.spec.js
+++ b/e2e/test/scenarios/onboarding/reference/databases.cy.spec.js
@@ -66,7 +66,7 @@ describe("scenarios > reference > databases", () => {
   describe("multiple databases sorting order", () => {
     beforeEach(() => {
       ["d", "b", "a", "c"].forEach(name => {
-        cy.addH2SampleDatabase({ name });
+        cy.addSQLiteDatabase({ name });
       });
     });
 
diff --git a/e2e/test/scenarios/question/new.cy.spec.js b/e2e/test/scenarios/question/new.cy.spec.js
index cb31ec259e4..e6c9bb7c6de 100644
--- a/e2e/test/scenarios/question/new.cy.spec.js
+++ b/e2e/test/scenarios/question/new.cy.spec.js
@@ -35,7 +35,7 @@ describe("scenarios > question > new", () => {
     it("data selector popover should not be too small (metabase#15591)", () => {
       // Add 10 more databases
       for (let i = 0; i < 10; i++) {
-        cy.addH2SampleDatabase({ name: "Sample" + i });
+        cy.addSQLiteDatabase({ name: "Sample" + i });
       }
 
       startNewQuestion();
-- 
GitLab