Refactor cypress to use common app creation functionality and stop cypress deleting all apps

This commit is contained in:
Andrew Kingston 2021-03-05 14:36:38 +00:00
parent 5ce959a164
commit 9fb40759d6
13 changed files with 92 additions and 79 deletions

View File

@ -1,8 +1,8 @@
{ {
"baseUrl": "http://localhost:4005/_builder/", "baseUrl": "http://localhost:4001/_builder/",
"video": true, "video": true,
"projectId": "bmbemn", "projectId": "bmbemn",
"env": { "env": {
"PORT": "4005" "PORT": "4001"
} }
} }

View File

@ -1,12 +1,7 @@
context("Create an Application", () => { context("Create an Application", () => {
beforeEach(() => {
cy.server()
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`)
})
it("should create a new application", () => { it("should create a new application", () => {
cy.createApp("My Cool App", "This is a description") cy.createTestApp()
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) cy.visit(`localhost:${Cypress.env("PORT")}/_builder`)
cy.contains("My Cool App").should("exist") cy.contains("Cypress Tests").should("exist")
}) })
}) })

View File

@ -1,12 +1,6 @@
context("Create a automation", () => { context("Create a automation", () => {
before(() => { before(() => {
cy.server() cy.createTestApp()
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`)
cy.createApp(
"Automation Test App",
"This app is used to test that automations do in fact work!"
)
}) })
// https://on.cypress.io/interacting-with-elements // https://on.cypress.io/interacting-with-elements

View File

@ -1,6 +1,6 @@
context("Create Bindings", () => { context("Create Bindings", () => {
before(() => { before(() => {
cy.createApp("Cypress Tests", "Cypress test app") cy.createTestApp()
cy.navigateToFrontend() cy.navigateToFrontend()
}) })

View File

@ -2,7 +2,7 @@ context("Create Components", () => {
let headlineId let headlineId
before(() => { before(() => {
cy.createApp("Cypress Tests", "Cypress test app") cy.createTestApp()
cy.createTable("dog") cy.createTable("dog")
cy.addColumn("dog", "name", "string") cy.addColumn("dog", "name", "string")
cy.addColumn("dog", "age", "number") cy.addColumn("dog", "age", "number")

View File

@ -0,0 +1,10 @@
context("Screen Tests", () => {
before(() => {
cy.createTestApp()
cy.navigateToFrontend()
})
it("Should successfully create a screen", () => {
cy.createScreen("Test Screen", "/test")
})
})

View File

@ -1,7 +1,6 @@
context("Create a Table", () => { context("Create a Table", () => {
before(() => { before(() => {
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) cy.createTestApp()
cy.createApp("Table App", "Table App Description")
}) })
it("should create a new Table", () => { it("should create a new Table", () => {
@ -26,7 +25,9 @@ context("Create a Table", () => {
.trigger("mouseover") .trigger("mouseover")
.find(".ri-pencil-line") .find(".ri-pencil-line")
.click({ force: true }) .click({ force: true })
cy.get(".actions input").first().type("updated") cy.get(".actions input")
.first()
.type("updated")
// Unset table display column // Unset table display column
cy.contains("display column").click() cy.contains("display column").click()
cy.contains("Save Column").click() cy.contains("Save Column").click()
@ -44,7 +45,9 @@ context("Create a Table", () => {
it("deletes a row", () => { it("deletes a row", () => {
cy.get(".ag-checkbox-input").check({ force: true }) cy.get(".ag-checkbox-input").check({ force: true })
cy.contains("Delete 1 row(s)").click() cy.contains("Delete 1 row(s)").click()
cy.get(".modal").contains("Delete").click() cy.get(".modal")
.contains("Delete")
.click()
cy.contains("RoverUpdated").should("not.exist") cy.contains("RoverUpdated").should("not.exist")
}) })
@ -55,12 +58,16 @@ context("Create a Table", () => {
.click({ force: true }) .click({ force: true })
cy.contains("Delete").click() cy.contains("Delete").click()
cy.wait(50) cy.wait(50)
cy.get(".buttons").contains("Delete").click() cy.get(".buttons")
.contains("Delete")
.click()
cy.contains("nameupdated").should("not.exist") cy.contains("nameupdated").should("not.exist")
}) })
it("deletes a table", () => { it("deletes a table", () => {
cy.get(".ri-more-line").first().click({ force: true }) cy.get(".ri-more-line")
.first()
.click({ force: true })
cy.get("[data-cy=delete-table]").click() cy.get("[data-cy=delete-table]").click()
cy.contains("Delete Table").click() cy.contains("Delete Table").click()
cy.contains("dog").should("not.exist") cy.contains("dog").should("not.exist")

View File

@ -1,17 +1,10 @@
context('Create a User', () => { context("Create a User", () => {
before(() => {
cy.createTestApp()
})
before(() => { it("should create a user", () => {
cy.server() cy.createUser("bbuser@test.com", "test", "ADMIN")
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) cy.contains("bbuser").should("be.visible")
// https://on.cypress.io/type })
cy.createApp('User App', 'This app is used to test user creation')
})
// https://on.cypress.io/interacting-with-elements
it('should create a user', () => {
cy.createUser("bbuser@test.com", "test", "ADMIN")
// // Check to make sure user was created!
cy.contains("bbuser").should('be.visible')
})
}) })

View File

@ -1,15 +1,6 @@
function removeSpacing(headers) {
let newHeaders = []
for (let header of headers) {
newHeaders.push(header.replace(/\s\s+/g, " "))
}
return newHeaders
}
context("Create a View", () => { context("Create a View", () => {
before(() => { before(() => {
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) cy.createTestApp()
cy.createApp("View App", "View App Description")
cy.createTable("data") cy.createTable("data")
cy.addColumn("data", "group", "Text") cy.addColumn("data", "group", "Text")
cy.addColumn("data", "age", "Number") cy.addColumn("data", "age", "Number")
@ -36,16 +27,28 @@ context("Create a View", () => {
const headers = Array.from($headers).map(header => const headers = Array.from($headers).map(header =>
header.textContent.trim() header.textContent.trim()
) )
expect(removeSpacing(headers)).to.deep.eq([ "rating Number", "age Number", "group Text" ]) expect(removeSpacing(headers)).to.deep.eq([
"rating Number",
"age Number",
"group Text",
])
}) })
}) })
it("filters the view by age over 10", () => { it("filters the view by age over 10", () => {
cy.contains("Filter").click() cy.contains("Filter").click()
cy.contains("Add Filter").click() cy.contains("Add Filter").click()
cy.get(".menu-container").find("select").first().select("age") cy.get(".menu-container")
cy.get(".menu-container").find("select").eq(1).select("More Than") .find("select")
cy.get(".menu-container").find("input").type(18) .first()
.select("age")
cy.get(".menu-container")
.find("select")
.eq(1)
.select("More Than")
cy.get(".menu-container")
.find("input")
.type(18)
cy.contains("Save").click() cy.contains("Save").click()
cy.get("[role=rowgroup] .ag-row").get($values => { cy.get("[role=rowgroup] .ag-row").get($values => {
expect($values).to.have.length(5) expect($values).to.have.length(5)
@ -57,9 +60,15 @@ context("Create a View", () => {
cy.viewport("macbook-15") cy.viewport("macbook-15")
cy.contains("Calculate").click() cy.contains("Calculate").click()
cy.get(".menu-container").find("select").eq(0).select("Statistics") cy.get(".menu-container")
.find("select")
.eq(0)
.select("Statistics")
cy.wait(50) cy.wait(50)
cy.get(".menu-container").find("select").eq(1).select("age") cy.get(".menu-container")
.find("select")
.eq(1)
.select("age")
cy.contains("Save").click() cy.contains("Save").click()
cy.wait(100) cy.wait(100)
cy.get(".ag-center-cols-viewport").scrollTo("100%") cy.get(".ag-center-cols-viewport").scrollTo("100%")
@ -68,19 +77,19 @@ context("Create a View", () => {
const headers = Array.from($headers).map(header => const headers = Array.from($headers).map(header =>
header.textContent.trim() header.textContent.trim()
) )
expect(removeSpacing(headers)).to.deep.eq([ "avg Number", expect(removeSpacing(headers)).to.deep.eq([
"avg Number",
"sumsqr Number", "sumsqr Number",
"count Number", "count Number",
"max Number", "max Number",
"min Number", "min Number",
"sum Number", "sum Number",
"field Text" ]) "field Text",
])
}) })
cy.get(".ag-cell").then($values => { cy.get(".ag-cell").then($values => {
let values = Array.from($values).map(header => let values = Array.from($values).map(header => header.textContent.trim())
header.textContent.trim() expect(values).to.deep.eq(["31", "5347", "5", "49", "20", "155", "age"])
)
expect(values).to.deep.eq([ "31", "5347", "5", "49", "20", "155", "age" ])
}) })
}) })
@ -99,7 +108,15 @@ context("Create a View", () => {
.find(".ag-cell") .find(".ag-cell")
.then($values => { .then($values => {
const values = Array.from($values).map(value => value.textContent) const values = Array.from($values).map(value => value.textContent)
expect(values).to.deep.eq([ "Students", "23.333333333333332", "1650", "3", "25", "20", "70" ]) expect(values).to.deep.eq([
"Students",
"23.333333333333332",
"1650",
"3",
"25",
"20",
"70",
])
}) })
}) })
@ -124,3 +141,11 @@ context("Create a View", () => {
cy.contains("TestView Updated").should("not.be.visible") cy.contains("TestView Updated").should("not.be.visible")
}) })
}) })
function removeSpacing(headers) {
let newHeaders = []
for (let header of headers) {
newHeaders.push(header.replace(/\s\s+/g, " "))
}
return newHeaders
}

View File

@ -1,13 +0,0 @@
context('Screen Tests', () => {
before(() => {
cy.server()
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`)
cy.createApp('Conor Cy App', 'Table App Description')
cy.navigateToFrontend()
})
it('Should successfully create a screen', () => {
cy.createScreen("test Screen", "/test")
})
})

View File

@ -3,15 +3,12 @@
// 2. Initialises using `.budibase` // 2. Initialises using `.budibase`
// 3. Runs the server using said folder // 3. Runs the server using said folder
const rimraf = require("rimraf")
const { join, resolve } = require("path") const { join, resolve } = require("path")
const initialiseBudibase = require("../../server/src/utilities/initialiseBudibase") const initialiseBudibase = require("../../server/src/utilities/initialiseBudibase")
const cypressConfig = require("../cypress.json") const cypressConfig = require("../cypress.json")
const homedir = join(require("os").homedir(), ".budibase") const homedir = join(require("os").homedir(), ".budibase")
rimraf.sync(homedir)
process.env.BUDIBASE_API_KEY = "6BE826CB-6B30-4AEC-8777-2E90464633DE" process.env.BUDIBASE_API_KEY = "6BE826CB-6B30-4AEC-8777-2E90464633DE"
process.env.NODE_ENV = "cypress" process.env.NODE_ENV = "cypress"
process.env.ENABLE_ANALYTICS = "false" process.env.ENABLE_ANALYTICS = "false"

View File

@ -25,7 +25,6 @@
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
Cypress.Commands.add("createApp", name => { Cypress.Commands.add("createApp", name => {
cy.deleteApp(name)
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) cy.visit(`localhost:${Cypress.env("PORT")}/_builder`)
cy.contains("Create New Web App").click() cy.contains("Create New Web App").click()
cy.get("body") cy.get("body")
@ -72,6 +71,12 @@ Cypress.Commands.add("deleteApp", name => {
}) })
}) })
Cypress.Commands.add("createTestApp", () => {
const appName = "Cypress Tests"
cy.deleteApp(appName)
cy.createApp(appName, "This app is used for Cypress testing.")
})
Cypress.Commands.add("createTestTableWithData", () => { Cypress.Commands.add("createTestTableWithData", () => {
cy.createTable("dog") cy.createTable("dog")
cy.addColumn("dog", "name", "Text") cy.addColumn("dog", "name", "Text")