forked from tsai/budibase
committed by
GitHub
17 changed files with 274 additions and 171 deletions
@ -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" |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -1,18 +1,7 @@ |
|||||
context('Create an Application', () => { |
context("Create an Application", () => { |
||||
|
it("should create a new application", () => { |
||||
beforeEach(() => { |
cy.createTestApp() |
||||
cy.server() |
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) |
||||
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) |
cy.contains("Cypress Tests").should("exist") |
||||
}) |
}) |
||||
|
|
||||
// https://on.cypress.io/interacting-with-elements
|
|
||||
|
|
||||
it('should create a new application', () => { |
|
||||
// https://on.cypress.io/type
|
|
||||
cy.createApp('My Cool App', 'This is a description') |
|
||||
|
|
||||
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) |
|
||||
|
|
||||
cy.contains('My Cool App').should('exist') |
|
||||
}) |
|
||||
}) |
}) |
||||
|
|||||
@ -1,18 +1,59 @@ |
|||||
xcontext('Create a Binding', () => { |
context("Create Bindings", () => { |
||||
before(() => { |
before(() => { |
||||
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) |
cy.createTestApp() |
||||
cy.createApp('Binding App', 'Binding App Description') |
cy.navigateToFrontend() |
||||
cy.navigateToFrontend() |
}) |
||||
|
|
||||
|
it("should add a current user binding", () => { |
||||
|
cy.addComponent("Elements", "Paragraph").then(componentId => { |
||||
|
addSettingBinding("text", "Current User._id") |
||||
|
cy.getComponent(componentId).should( |
||||
|
"have.text", |
||||
|
`ro_ta_users_us_test@test.com` |
||||
|
) |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
|
it("should handle an invalid binding", () => { |
||||
|
cy.addComponent("Elements", "Paragraph").then(componentId => { |
||||
|
// Cypress needs to escape curly brackets
|
||||
|
cy.get("[data-cy=setting-text] input") |
||||
|
.type("{{}{{}{{} Current User._id {}}{}}") |
||||
|
.blur() |
||||
|
cy.getComponent(componentId).should("have.text", "{{{ user._id }}") |
||||
}) |
}) |
||||
|
}) |
||||
|
|
||||
it('add an input binding', () => { |
it("should add a URL param binding", () => { |
||||
cy.get(".nav-items-container").contains('Home').click() |
const paramName = "foo" |
||||
cy.contains("Add").click() |
cy.createScreen("Test Param", `/test/:${paramName}`) |
||||
cy.get("[data-cy=Input]").click() |
cy.addComponent("Elements", "Paragraph").then(componentId => { |
||||
cy.get("[data-cy=Textfield]").click() |
addSettingBinding("text", `URL.${paramName}`) |
||||
cy.contains("Heading").click() |
// The builder preview pages don't have a real URL, so all we can do
|
||||
cy.get("[data-cy=text-binding-button]").click() |
// is check that we were able to bind to the property, and that the
|
||||
cy.get("[data-cy=binding-dropdown-modal]").contains('Input 1').click() |
// component exists on the page
|
||||
cy.get("[data-cy=binding-dropdown-modal] textarea").should('have.value', 'Home{{ Input 1 }}') |
cy.getComponent(componentId).should("have.text", "") |
||||
}) |
}) |
||||
|
}) |
||||
|
|
||||
|
it("should add a binding with a handlebars helper", () => { |
||||
|
cy.addComponent("Elements", "Paragraph").then(componentId => { |
||||
|
// Cypress needs to escape curly brackets
|
||||
|
addSettingBinding("text", "{{}{{} add 1 2 {}}{}}", false) |
||||
|
cy.getComponent(componentId).should("have.text", "3") |
||||
|
}) |
||||
|
}) |
||||
}) |
}) |
||||
|
|
||||
|
const addSettingBinding = (setting, bindingText, clickOption = true) => { |
||||
|
cy.get(`[data-cy="setting-${setting}"] [data-cy=text-binding-button]`).click() |
||||
|
cy.get(".drawer").within(() => { |
||||
|
if (clickOption) { |
||||
|
cy.contains(bindingText).click() |
||||
|
cy.get("textarea").should("have.value", `{{ ${bindingText} }}`) |
||||
|
} else { |
||||
|
cy.get("textarea").type(bindingText) |
||||
|
} |
||||
|
cy.get("button").click() |
||||
|
}) |
||||
|
} |
||||
|
|||||
@ -1,60 +1,90 @@ |
|||||
xcontext("Create Components", () => { |
context("Create Components", () => { |
||||
|
let headlineId |
||||
|
|
||||
before(() => { |
before(() => { |
||||
cy.server() |
cy.createTestApp() |
||||
cy.visit(`localhost:${Cypress.env("PORT")}/_builder`) |
cy.createTable("dog") |
||||
// https://on.cypress.io/type
|
cy.addColumn("dog", "name", "string") |
||||
cy.createApp("Table App", "Table App Description") |
cy.addColumn("dog", "age", "number") |
||||
cy.createTable("dog", "name", "age") |
cy.addColumn("dog", "type", "options") |
||||
cy.addRow("bob", "15") |
cy.navigateToFrontend() |
||||
}) |
}) |
||||
|
|
||||
// https://on.cypress.io/interacting-with-elements
|
|
||||
it("should add a container", () => { |
it("should add a container", () => { |
||||
cy.navigateToFrontend() |
cy.addComponent(null, "Container").then(componentId => { |
||||
cy.get(".switcher > :nth-child(2)").click() |
cy.getComponent(componentId).should("exist") |
||||
cy.contains("Container").click() |
}) |
||||
}) |
}) |
||||
|
|
||||
it("should add a headline", () => { |
it("should add a headline", () => { |
||||
cy.addHeadlineComponent("An Amazing headline!") |
cy.addComponent("Elements", "Headline").then(componentId => { |
||||
|
headlineId = componentId |
||||
|
cy.getComponent(headlineId).should("exist") |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
getIframeBody().contains("An Amazing headline!") |
it("should change the text of the headline", () => { |
||||
|
const text = "Lorem ipsum dolor sit amet." |
||||
|
cy.get("[data-cy=Settings]").click() |
||||
|
cy.get("[data-cy=setting-text] input") |
||||
|
.type(text) |
||||
|
.blur() |
||||
|
cy.getComponent(headlineId).should("have.text", text) |
||||
}) |
}) |
||||
it("change the font size of the headline", () => { |
|
||||
|
it("should change the size of the headline", () => { |
||||
|
cy.get("[data-cy=Design]").click() |
||||
cy.contains("Typography").click() |
cy.contains("Typography").click() |
||||
cy.get("[data-cy=font-size-prop-control]").click() |
cy.get("[data-cy=font-size-prop-control]").click() |
||||
cy.contains("60px").click() |
cy.contains("60px").click() |
||||
cy.contains("Design").click() |
cy.getComponent(headlineId).should("have.css", "font-size", "60px") |
||||
|
|
||||
getIframeBody() |
|
||||
.contains("An Amazing headline!") |
|
||||
.should("have.css", "font-size", "60px") |
|
||||
}) |
}) |
||||
}) |
|
||||
|
|
||||
const getIframeDocument = () => { |
it("should create a form and reset to match schema", () => { |
||||
return ( |
cy.addComponent("Form", "Form").then(() => { |
||||
cy |
cy.get("[data-cy=Settings]").click() |
||||
.get("iframe") |
cy.get("[data-cy=setting-datasource]") |
||||
// Cypress yields jQuery element, which has the real
|
.contains("Choose option") |
||||
// DOM element under property "0".
|
.click() |
||||
// From the real DOM iframe element we can get
|
cy.get(".dropdown") |
||||
// the "document" element, it is stored in "contentDocument" property
|
.contains("dog") |
||||
// Cypress "its" command can access deep properties using dot notation
|
.click() |
||||
// https://on.cypress.io/its
|
cy.addComponent("Form", "Field Group").then(fieldGroupId => { |
||||
.its("0.contentDocument") |
cy.get("[data-cy=Settings]").click() |
||||
.should("exist") |
cy.contains("Update Form Fields").click() |
||||
) |
cy.get(".modal") |
||||
} |
.get("button.primary") |
||||
|
.click() |
||||
|
cy.getComponent(fieldGroupId).within(() => { |
||||
|
cy.contains("name").should("exist") |
||||
|
cy.contains("age").should("exist") |
||||
|
cy.contains("type").should("exist") |
||||
|
}) |
||||
|
cy.getComponent(fieldGroupId) |
||||
|
.find("input") |
||||
|
.should("have.length", 2) |
||||
|
cy.getComponent(fieldGroupId) |
||||
|
.find(".spectrum-Picker") |
||||
|
.should("have.length", 1) |
||||
|
}) |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
const getIframeBody = () => { |
it("deletes a component", () => { |
||||
// get the document
|
cy.addComponent("Elements", "Paragraph").then(componentId => { |
||||
return ( |
cy.get("[data-cy=setting-_instanceName] input") |
||||
getIframeDocument() |
.type(componentId) |
||||
// automatically retries until body is loaded
|
.blur() |
||||
.its("body") |
cy.get(".ui-nav ul .nav-item.selected .ri-more-line").click({ |
||||
.should("not.be.undefined") |
force: true, |
||||
// wraps "body" DOM element to allow
|
}) |
||||
// chaining more Cypress commands, like ".find(...)"
|
cy.get(".dropdown-container") |
||||
.then(cy.wrap) |
.contains("Delete") |
||||
) |
.click() |
||||
} |
cy.get(".modal") |
||||
|
.contains("Delete Component") |
||||
|
.click() |
||||
|
cy.getComponent(componentId).should("not.exist") |
||||
|
}) |
||||
|
}) |
||||
|
}) |
||||
|
|||||
@ -0,0 +1,10 @@ |
|||||
|
context("Screen Tests", () => { |
||||
|
before(() => { |
||||
|
cy.createTestApp() |
||||
|
cy.navigateToFrontend() |
||||
|
}) |
||||
|
|
||||
|
it("Should successfully create a screen", () => { |
||||
|
cy.createScreen("Test Screen", "/test") |
||||
|
}) |
||||
|
}) |
||||
@ -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') |
|
||||
}) |
|
||||
}) |
}) |
||||
|
|||||
@ -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") |
|
||||
}) |
|
||||
}) |
|
||||
Loading…
Reference in new issue