Skip to content
Snippets Groups Projects
Unverified Commit d17d1411 authored by Nemanja Glumac's avatar Nemanja Glumac Committed by GitHub
Browse files

Add QA Mongo DB to the Cypress tests in CI (#13854)

* Add QA Mongo DB to the Cypress tests in CI

* Refactor tests

- Use API to add database
- group all query tests together

* Fix prettier error for bcd4a366
parent 8634e940
No related merge requests found
......@@ -169,11 +169,11 @@ executors:
ACCEPT_EULA: Y
SA_PASSWORD: 'P@ssw0rd'
fe-mongo:
fe-mongo-4:
working_directory: /home/circleci/metabase/metabase/
docker:
- image: circleci/clojure:lein-2.8.1-node-browsers
- image: circleci/mongo:4.0
- image: metabase/qa-databases:mongo-sample-4.0
fe-postgres-12:
working_directory: /home/circleci/metabase/metabase/
......@@ -1057,13 +1057,12 @@ workflows:
<<: *Matrix
- fe-tests-cypress:
name: fe-tests-cypress-mongo-<< matrix.edition >>
name: fe-tests-cypress-mongo-4-<< matrix.edition >>
requires:
- build-uberjar-<< matrix.edition >>
- fe-deps
e: fe-mongo
e: fe-mongo-4
cypress-group: "mongo"
driver: mongo
only-single-database: true
test-files-location: frontend/test/metabase-db/mongo
<<: *Matrix
......
......@@ -200,8 +200,47 @@ export function createBasicAlert({ firstAlert, includeNormal } = {}) {
cy.findByText("Let's set up your alert").should("not.exist");
}
// Functions specific to QA databases that we started supporting recently in CI
/*****************************************
** QA DATABASES **
******************************************/
export function addMongoDatabase(db_display_name = "QA Mongo4") {
// https://hub.docker.com/layers/metabase/qa-databases/mongo-sample-4.0/images/sha256-3f568127248b6c6dba0b114b65dc3b3bf69bf4c804310eb57b4e3de6eda989cf
cy.log("**-- Adding Mongo 4 DB --**");
cy.request("POST", "/api/database", {
engine: "mongo",
name: db_display_name,
details: {
host: "localhost",
dbname: "sample",
port: 27017,
user: "metabase",
pass: "metasample123",
authdb: "admin",
"additional-options": null,
"use-srv": false,
"tunnel-enabled": false,
},
auto_run_queries: true,
is_full_sync: true,
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",
},
},
});
}
export function addPostgresDatabase(db_display_name = "QA Postgres12") {
cy.log("**-- Adding Postgres 12 DB --**");
cy.request("POST", "/api/database", {
engine: "postgres",
name: db_display_name,
......
......@@ -5,23 +5,6 @@ import {
typeAndBlurUsingLabel,
} from "__support__/cypress";
function addMongoDatabase() {
cy.visit("/admin/databases/create");
cy.contains("Database type")
.closest(".Form-field")
.find("a")
.click();
cy.contains("MongoDB").click({ force: true });
cy.contains("Additional Mongo connection");
typeAndBlurUsingLabel("Name", "MongoDB");
typeAndBlurUsingLabel("Database name", "admin");
cy.findByText("Save")
.should("not.be.disabled")
.click();
}
describe("mongodb > admin > add", () => {
beforeEach(() => {
restore();
......@@ -30,12 +13,29 @@ describe("mongodb > admin > add", () => {
});
it("should add a database and redirect to listing", () => {
cy.route({
method: "POST",
url: "/api/database",
}).as("createDatabase");
cy.route("POST", "/api/database").as("createDatabase");
addMongoDatabase();
cy.visit("/admin/databases/create");
cy.contains("Database type")
.closest(".Form-field")
.find("a")
.click();
cy.contains("MongoDB").click({ force: true });
cy.contains("Additional Mongo connection");
typeAndBlurUsingLabel("Name", "QA Mongo4");
typeAndBlurUsingLabel("Host", "localhost");
cy.findByPlaceholderText("27017")
.click()
.type("27017");
typeAndBlurUsingLabel("Database name", "sample");
typeAndBlurUsingLabel("Username", "metabase");
typeAndBlurUsingLabel("Password", "metasample123");
typeAndBlurUsingLabel("Authentication Database", "admin");
cy.findByText("Save")
.should("not.be.disabled")
.click();
cy.wait("@createDatabase");
......@@ -45,14 +45,4 @@ describe("mongodb > admin > add", () => {
.contains("I'm good thanks")
.click();
});
it("can query a Mongo database", () => {
addMongoDatabase();
cy.url().should("match", /\/admin\/databases\?created=\d+$/);
cy.visit("/question/new");
cy.contains("Simple question").click();
cy.contains("MongoDB").click();
cy.contains("Version").click();
cy.contains("featureCompatibilityVersion");
});
});
......@@ -3,42 +3,9 @@ import {
restore,
modal,
signInAsNormalUser,
addMongoDatabase,
} from "__support__/cypress";
function addMongoDatabase() {
cy.request("POST", "/api/database", {
engine: "mongo",
name: "MongoDB",
details: {
host: "localhost",
dbname: "admin",
port: 27017,
user: null,
pass: null,
authdb: null,
"additional-options": null,
"use-srv": false,
"tunnel-enabled": false,
},
auto_run_queries: true,
is_full_sync: true,
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",
},
},
});
}
describe("mongodb > user > query", () => {
before(() => {
restore();
......@@ -46,63 +13,75 @@ describe("mongodb > user > query", () => {
addMongoDatabase();
});
beforeEach(() => {
signInAsNormalUser();
context("as an admin", () => {
it("can query a Mongo database", () => {
queryMongoDB();
});
});
it("can query a Mongo database as a user", () => {
cy.visit("/question/new");
cy.contains("Simple question").click();
cy.contains("MongoDB").click();
cy.contains("Version").click();
cy.contains("featureCompatibilityVersion");
});
context("as a user", () => {
beforeEach(() => {
signInAsNormalUser();
});
it("can query a Mongo database", () => {
queryMongoDB();
});
it.only("can write a native MongoDB query", () => {
cy.visit("/question/new");
cy.contains("Native query").click();
cy.contains("MongoDB").click();
it("can write a native MongoDB query", () => {
cy.visit("/question/new");
cy.contains("Native query").click();
cy.contains("QA Mongo4").click();
cy.get(".ace_content").type(`[ { $count: "Total" } ]`, {
parseSpecialCharSequences: false,
cy.get(".ace_content").type(`[ { $count: "Total" } ]`, {
parseSpecialCharSequences: false,
});
cy.get(".NativeQueryEditor .Icon-play").click();
cy.contains("1");
});
cy.get(".NativeQueryEditor .Icon-play").click();
cy.contains("1");
});
it("can save a native MongoDB query", () => {
cy.server();
cy.route("POST", "/api/card").as("createQuestion");
it("can save a native MongoDB query", () => {
cy.server();
cy.route("POST", "/api/card").as("createQuestion");
cy.visit("/question/new");
cy.contains("Native query").click();
cy.contains("MongoDB").click();
cy.visit("/question/new");
cy.contains("Native query").click();
cy.contains("QA Mongo4").click();
cy.get(".ace_content").type(`[ { $count: "Total" } ]`, {
parseSpecialCharSequences: false,
});
cy.get(".NativeQueryEditor .Icon-play").click();
cy.contains("1");
cy.get(".ace_content").type(`[ { $count: "Total" } ]`, {
parseSpecialCharSequences: false,
});
cy.get(".NativeQueryEditor .Icon-play").click();
cy.contains("1");
// Close the Ace editor because it interferes with the modal for some reason
cy.get(".Icon-contract").click();
// Close the Ace editor because it interferes with the modal for some reason
cy.get(".Icon-contract").click();
cy.contains("Save").click();
modal()
.findByLabelText("Name")
.focus()
.type("mongo count");
modal()
.contains("button", "Save")
.should("not.be.disabled")
.click();
cy.contains("Save").click();
modal()
.findByLabelText("Name")
.focus()
.type("mongo count");
modal()
.contains("button", "Save")
.should("not.be.disabled")
.click();
cy.wait("@createQuestion").then(({ status }) => {
expect(status).to.equal(202);
});
cy.wait("@createQuestion").then(({ status }) => {
expect(status).to.equal(202);
});
cy.findByText("Not now").click();
cy.findByText("Not now").click();
cy.url().should("match", /\/question\/\d+$/);
cy.url().should("match", /\/question\/\d+$/);
});
});
});
function queryMongoDB() {
cy.visit("/question/new");
cy.contains("Simple question").click();
cy.contains("QA Mongo4").click();
cy.contains("Orders").click();
cy.contains("37.65");
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment