Merge pull request #6138 from Budibase/cypressTests

Refactoring cypress tests
This commit is contained in:
Mihail Hadzhiev 2022-06-01 12:22:36 +03:00 committed by GitHub
commit 75ef7ae60c
6 changed files with 114 additions and 63 deletions

View File

@ -41,7 +41,7 @@ filterTests(['all'], () => {
} }
// Check items have been selected // Check items have been selected
cy.getComponent(componentId) cy.getComponent(componentId)
.find(interact.SPECTRUM_Picker_LABEL) .find(interact.SPECTRUM_PICKER_LABEL)
.contains("(5)") .contains("(5)")
}) })
}) })

View File

@ -1,4 +1,5 @@
import filterTests from "../support/filterTests" import filterTests from "../support/filterTests"
const interact = require('../support/interact')
filterTests(['all'], () => { filterTests(['all'], () => {
context("Publish Application Workflow", () => { context("Publish Application Workflow", () => {
@ -11,49 +12,63 @@ filterTests(['all'], () => {
cy.visit(`${Cypress.config().baseUrl}/builder`) cy.visit(`${Cypress.config().baseUrl}/builder`)
cy.wait(1000) cy.wait(1000)
cy.get(".appTable .app-status").eq(0) cy.get(interact.APP_TABLE_STATUS).eq(0)
.within(() => { .within(() => {
cy.contains("Unpublished") cy.contains("Unpublished")
cy.get("svg[aria-label='GlobeStrike']").should("exist") cy.get(interact.GLOBESTRIKE).should("exist")
}) })
cy.get(".appTable .app-row-actions").eq(0) cy.get(interact.APP_TABLE_ROW_ACTION).eq(0)
.within(() => { .within(() => {
cy.get(".spectrum-Button").contains("View") cy.get(interact.SPECTRUM_BUTTON_TEMPLATE).contains("Preview")
cy.get(".spectrum-Button").contains("Edit").click({ force: true }) cy.get(interact.SPECTRUM_BUTTON_TEMPLATE).contains("Edit").click({ force: true })
}) })
cy.get(".deployment-top-nav svg[aria-label='GlobeStrike']").should("exist") cy.get(interact.DEPLOYMENT_TOP_NAV_GLOBESTRIKE).should("exist")
cy.get(".deployment-top-nav svg[aria-label='Globe']").should("not.exist") cy.get(interact.DEPLOYMENT_TOP_GLOBE).should("not.exist")
}) })
it("Should publish an application and correctly reflect that", () => { it("Should publish an application and correctly reflect that", () => {
//Assuming the previous test was run and the unpublished app is open in edit mode. //Assuming the previous test was run and the unpublished app is open in edit mode.
cy.get(interact.TOPRIGHTNAV_BUTTON_SPECTRUM).contains("Publish").click({ force : true })
cy.publishApp("cypress-tests") cy.get(interact.DEPLOY_APP_MODAL).should("be.visible")
.within(() => {
cy.get(interact.SPECTRUM_BUTTON).contains("Publish").click({ force : true })
cy.wait(1000)
});
//Verify that the app url is presented correctly to the user
cy.get(interact.DEPLOY_APP_MODAL)
.should("be.visible")
.within(() => {
let appUrl = Cypress.config().baseUrl + '/app/cypress-tests'
cy.get(interact.DEPLOY_APP_URL_INPUT).should('have.value', appUrl)
cy.get(interact.SPECTRUM_BUTTON).contains("Done").click({ force: true })
})
cy.visit(`${Cypress.config().baseUrl}/builder`) cy.visit(`${Cypress.config().baseUrl}/builder`)
cy.wait(1000) cy.wait(1000)
cy.get(".appTable .app-status").eq(0) cy.get(interact.APP_TABLE_STATUS).eq(0)
.within(() => { .within(() => {
cy.contains("Published") cy.contains("Published")
cy.get("svg[aria-label='Globe']").should("exist") cy.get(interact.GLOBE).should("exist")
}) })
cy.get(".appTable .app-row-actions").eq(0) cy.get(interact.APP_TABLE_ROW_ACTION).eq(0)
.within(() => { .within(() => {
cy.get(".spectrum-Button").contains("View") cy.get(interact.SPECTRUM_BUTTON).contains("View")
cy.get(".spectrum-Button").contains("Edit").click({ force: true }) cy.get(interact.SPECTRUM_BUTTON).contains("Edit").click({ force: true })
}) })
cy.get(".deployment-top-nav svg[aria-label='Globe']").should("exist").click({ force: true }) cy.get(interact.DEPLOYMENT_TOP_GLOBE).should("exist").click({ force: true })
cy.get("[data-cy='publish-popover-menu']").should("be.visible") cy.get(interact.PUBLISH_POPOVER_MENU).should("be.visible")
.within(() => { .within(() => {
cy.get("[data-cy='publish-popover-action']").should("exist") cy.get(interact.PUBLISH_POPOVER_ACTION).should("exist")
cy.get("button").contains("View").should("exist") cy.get("button").contains("View app").should("exist")
cy.get(".publish-popover-message").should("have.text", "Last published a few seconds ago") cy.get(interact.PUBLISH_POPOVER_MESSAGE).should("have.text", "Last published a few seconds ago")
}) })
}) })
@ -62,36 +77,36 @@ filterTests(['all'], () => {
cy.visit(`${Cypress.config().baseUrl}/builder`) cy.visit(`${Cypress.config().baseUrl}/builder`)
cy.get(".appTable .app-status").eq(0) cy.get(interact.APP_TABLE_STATUS).eq(0)
.within(() => { .within(() => {
cy.contains("Published") cy.contains("Published")
cy.get("svg[aria-label='Globe']").should("exist") cy.get("svg[aria-label='Globe']").should("exist")
}) })
cy.get(".appTable .app-row-actions").eq(0) cy.get(interact.APP_TABLE_ROW_ACTION).eq(0)
.within(() => { .within(() => {
cy.get(".spectrum-Button").contains("View") cy.get(interact.SPECTRUM_BUTTON).contains("View app")
cy.get(".spectrum-Button").contains("Edit").click({ force: true }) cy.get(interact.SPECTRUM_BUTTON).contains("Edit").click({ force: true })
}) })
//The published status //The published status
cy.get(".deployment-top-nav svg[aria-label='Globe']").should("exist") cy.get(interact.DEPLOYMENT_TOP_GLOBE).should("exist")
.click({ force: true }) .click({ force: true })
cy.get("[data-cy='publish-popover-menu']").should("be.visible") cy.get(interact.PUBLISH_POPOVER_MENU).should("be.visible")
cy.get("[data-cy='publish-popover-menu'] [data-cy='publish-popover-action']") cy.get("[data-cy='publish-popover-menu'] [data-cy='publish-popover-action']")
.click({ force : true }) .click({ force : true })
cy.get("[data-cy='unpublish-modal']").should("be.visible") cy.get(interact.UNPUBLISH_MODAL).should("be.visible")
.within(() => { .within(() => {
cy.get(".confirm-wrap button").click({ force: true } cy.get(interact.CONFIRM_WRAP_BUTTON).click({ force: true }
)}) )})
cy.get(".deployment-top-nav svg[aria-label='GlobeStrike']").should("exist") cy.get(interact.DEPLOYMENT_TOP_NAV_GLOBESTRIKE).should("exist")
cy.visit(`${Cypress.config().baseUrl}/builder`) cy.visit(`${Cypress.config().baseUrl}/builder`)
cy.get(".appTable .app-status").eq(0).contains("Unpublished") cy.get(interact.APP_TABLE_STATUS).eq(0).contains("Unpublished")
}) })
}) })

View File

@ -1,4 +1,5 @@
import filterTests from "../support/filterTests" import filterTests from "../support/filterTests"
const interact = require('../support/interact')
filterTests(['smoke', 'all'], () => { filterTests(['smoke', 'all'], () => {
context("Auto Screens UI", () => { context("Auto Screens UI", () => {
@ -12,10 +13,10 @@ filterTests(['smoke', 'all'], () => {
cy.closeModal(); cy.closeModal();
cy.contains("Design").click() cy.contains("Design").click()
cy.get("[aria-label=AddCircle]").click() cy.get(interact.LABEL_ADD_CIRCLE).click()
cy.get(".spectrum-Modal").within(() => { cy.get(interact.SPECTRUM_MODAL).within(() => {
cy.get(".item.disabled").contains("Autogenerated screens") cy.get(interact.ITEM_DISABLED).contains("Autogenerated screens")
cy.get(".confirm-wrap .spectrum-Button").should('be.disabled') cy.get(interact.CONFIRM_WRAP_SPE_BUTTON).should('be.disabled')
}) })
cy.deleteAllApps() cy.deleteAllApps()
@ -26,14 +27,14 @@ filterTests(['smoke', 'all'], () => {
cy.selectExternalDatasource("REST") cy.selectExternalDatasource("REST")
cy.selectExternalDatasource("S3") cy.selectExternalDatasource("S3")
cy.get(".spectrum-Modal").within(() => { cy.get(interact.SPECTRUM_MODAL).within(() => {
cy.get(".spectrum-Button").contains("Save and continue to query").click({ force : true }) cy.get(interact.SPECTRUM_BUTTON).contains("Save and continue to query").click({ force : true })
}) })
cy.navigateToAutogeneratedModal() cy.navigateToAutogeneratedModal()
cy.get('.data-source-entry').should('have.length', 1) cy.get(interact.DATA_SOURCE_ENTRY).should('have.length', 1)
cy.get('.data-source-entry') cy.get(interact.DATA_SOURCE_ENTRY)
cy.deleteAllApps() cy.deleteAllApps()
}); });
@ -43,8 +44,8 @@ filterTests(['smoke', 'all'], () => {
// Create Autogenerated screens from the internal table // Create Autogenerated screens from the internal table
cy.createDatasourceScreen(["Cypress Tests"]) cy.createDatasourceScreen(["Cypress Tests"])
// Confirm screens have been auto generated // Confirm screens have been auto generated
cy.get(".nav-items-container").contains("cypress-tests").click({ force: true }) cy.get(interact.NAV_ITEMS_CONTAINER).contains("cypress-tests").click({ force: true })
cy.get(".nav-items-container").should('contain', 'cypress-tests/:id') cy.get(interact.NAV_ITEMS_CONTAINER).should('contain', 'cypress-tests/:id')
.and('contain', 'cypress-tests/new/row') .and('contain', 'cypress-tests/new/row')
}) })
@ -56,12 +57,12 @@ filterTests(['smoke', 'all'], () => {
// Create Autogenerated screens from the internal tables // Create Autogenerated screens from the internal tables
cy.createDatasourceScreen([initialTable, secondTable]) cy.createDatasourceScreen([initialTable, secondTable])
// Confirm screens have been auto generated // Confirm screens have been auto generated
cy.get(".nav-items-container").contains("cypress-tests").click({ force: true }) cy.get(interact.NAV_ITEMS_CONTAINER).contains("cypress-tests").click({ force: true })
// Previously generated tables are suffixed with numbers - as expected // Previously generated tables are suffixed with numbers - as expected
cy.get(".nav-items-container").should('contain', 'cypress-tests-2/:id') cy.get(interact.NAV_ITEMS_CONTAINER).should('contain', 'cypress-tests-2/:id')
.and('contain', 'cypress-tests-2/new/row') .and('contain', 'cypress-tests-2/new/row')
cy.get(".nav-items-container").contains("table-two").click() cy.get(interact.NAV_ITEMS_CONTAINER).contains("table-two").click()
cy.get(".nav-items-container").should('contain', 'table-two/:id') cy.get(interact.NAV_ITEMS_CONTAINER).should('contain', 'table-two/:id')
.and('contain', 'table-two/new/row') .and('contain', 'table-two/new/row')
}) })
@ -71,17 +72,17 @@ filterTests(['smoke', 'all'], () => {
cy.createTable("Table Four") cy.createTable("Table Four")
cy.createDatasourceScreen(["Table Three", "Table Four"], "Admin") cy.createDatasourceScreen(["Table Three", "Table Four"], "Admin")
cy.get(".nav-items-container").contains("table-three").click() cy.get(interact.NAV_ITEMS_CONTAINER).contains("table-three").click()
cy.get(".nav-items-container").should('contain', 'table-three/:id') cy.get(interact.NAV_ITEMS_CONTAINER).should('contain', 'table-three/:id')
.and('contain', 'table-three/new/row') .and('contain', 'table-three/new/row')
cy.get(".nav-items-container").contains("table-four").click() cy.get(interact.NAV_ITEMS_CONTAINER).contains("table-four").click()
cy.get(".nav-items-container").should('contain', 'table-four/:id') cy.get(interact.NAV_ITEMS_CONTAINER).should('contain', 'table-four/:id')
.and('contain', 'table-four/new/row') .and('contain', 'table-four/new/row')
//The access level should now be set to admin. Previous screens should be filtered. //The access level should now be set to admin. Previous screens should be filtered.
cy.get(".nav-items-container").contains("table-two").should('not.exist') cy.get(interact.NAV_ITEMS_CONTAINER).contains("table-two").should('not.exist')
cy.get(".nav-items-container").contains("cypress-tests").should('not.exist') cy.get(interact.NAV_ITEMS_CONTAINER).contains("cypress-tests").should('not.exist')
}) })
if (Cypress.env("TEST_ENV")) { if (Cypress.env("TEST_ENV")) {
@ -94,8 +95,8 @@ filterTests(['smoke', 'all'], () => {
// Create Autogenerated screens from a MySQL table - MySQL contains books table // Create Autogenerated screens from a MySQL table - MySQL contains books table
cy.createDatasourceScreen(["books"]) cy.createDatasourceScreen(["books"])
cy.get(".nav-items-container").contains("books").click() cy.get(interact.NAV_ITEMS_CONTAINER).contains("books").click()
cy.get(".nav-items-container").should('contain', 'books/:id') cy.get(interact.NAV_ITEMS_CONTAINER).should('contain', 'books/:id')
.and('contain', 'books/new/row') .and('contain', 'books/new/row')
}) })
} }

View File

@ -30,7 +30,7 @@ filterTests(['smoke', 'all'], () => {
.its("body") .its("body")
.then(val => { .then(val => {
if (val.length > 0) { if (val.length > 0) {
cy.get(interact.SPECTRUM_BUTTON_TEMPLATE).contains("Templates").click({force: true}) cy.get(interact.SPECTRUM_BUTTON).contains("Templates").click({force: true})
} }
}) })

View File

@ -1,6 +1,7 @@
// TODO for now components are skipped, might not be good to keep doing this // TODO for now components are skipped, might not be good to keep doing this
import filterTests from "../support/filterTests" import filterTests from "../support/filterTests"
const interact = require('../support/interact')
filterTests(['all'], () => { filterTests(['all'], () => {
xcontext("Create Components", () => { xcontext("Create Components", () => {
@ -31,32 +32,32 @@ filterTests(['all'], () => {
it("should change the text of the headline", () => { it("should change the text of the headline", () => {
const text = "Lorem ipsum dolor sit amet." const text = "Lorem ipsum dolor sit amet."
cy.get("[data-cy=Settings]").click() cy.get(interact.SETTINGS).click()
cy.get("[data-cy=setting-text] input") cy.get(interact.SETTINGS_INPUT)
.type(text) .type(text)
.blur() .blur()
cy.getComponent(headlineId).should("have.text", text) cy.getComponent(headlineId).should("have.text", text)
}) })
it("should change the size of the headline", () => { it("should change the size of the headline", () => {
cy.get("[data-cy=Design]").click() cy.get(interact.DESIGN).click()
cy.contains("Typography").click() cy.contains("Typography").click()
cy.get("[data-cy=font-size-prop-control]").click() cy.get(interact.FONT_SIZE_PROP_CONTROL).click()
cy.contains("60px").click() cy.contains("60px").click()
cy.getComponent(headlineId).should("have.css", "font-size", "60px") cy.getComponent(headlineId).should("have.css", "font-size", "60px")
}) })
it("should create a form and reset to match schema", () => { it("should create a form and reset to match schema", () => {
cy.addComponent("Form", "Form").then(() => { cy.addComponent("Form", "Form").then(() => {
cy.get("[data-cy=Settings]").click() cy.get(interact.SETTINGS).click()
cy.get("[data-cy=setting-dataSource]") cy.get(interact.DATA_CY_DATASOURCE)
.contains("Choose option") .contains("Choose option")
.click() .click()
cy.get(".dropdown") cy.get(interact.DROPDOWN)
.contains("dog") .contains("dog")
.click() .click()
cy.addComponent("Form", "Field Group").then(fieldGroupId => { cy.addComponent("Form", "Field Group").then(fieldGroupId => {
cy.get("[data-cy=Settings]").click() cy.get(interact.SETTINGS).click()
cy.contains("Update Form Fields").click() cy.contains("Update Form Fields").click()
cy.get(".modal") cy.get(".modal")
.get("button.primary") .get("button.primary")
@ -70,7 +71,7 @@ filterTests(['all'], () => {
.find("input") .find("input")
.should("have.length", 2) .should("have.length", 2)
cy.getComponent(fieldGroupId) cy.getComponent(fieldGroupId)
.find(".spectrum-Picker") .find(interact.SPECTRUM_PICKER)
.should("have.length", 1) .should("have.length", 1)
}) })
}) })
@ -84,7 +85,7 @@ filterTests(['all'], () => {
cy.get(".ui-nav ul .nav-item.selected .ri-more-line").click({ cy.get(".ui-nav ul .nav-item.selected .ri-more-line").click({
force: true, force: true,
}) })
cy.get(".dropdown-container") cy.get(interact.DROPDOWN_CONTAINER)
.contains("Delete") .contains("Delete")
.click() .click()
cy.get(".modal") cy.get(".modal")

View File

@ -17,10 +17,44 @@ export const CATEGORY_DATA = '[data-cy="category-Data"]'
export const COMPONENT_DATA_PROVIDER = '[data-cy="component-Data Provider"]' export const COMPONENT_DATA_PROVIDER = '[data-cy="component-Data Provider"]'
export const DATASOURCE_PROP_CONTROL = '[data-cy="dataSource-prop-control"]' export const DATASOURCE_PROP_CONTROL = '[data-cy="dataSource-prop-control"]'
export const DROPDOWN = ".dropdown" export const DROPDOWN = ".dropdown"
export const SPECTRUM_Picker_LABEL = ".spectrum-Picker-label" export const SPECTRUM_PICKER_LABEL = ".spectrum-Picker-label"
export const DATASOURCE_FIELD_CONTROL = '[data-cy="field-prop-control"]' export const DATASOURCE_FIELD_CONTROL = '[data-cy="field-prop-control"]'
export const OPTION_TYPE_PROP_CONTROL = '[data-cy="optionsType-prop-control' export const OPTION_TYPE_PROP_CONTROL = '[data-cy="optionsType-prop-control'
//AddRadioButtons //AddRadioButtons
export const SPECTRUM_POPOVER = ".spectrum-Popover" export const SPECTRUM_POPOVER = ".spectrum-Popover"
export const OPTION_SOURCE_PROP_CONROL = '[data-cy="optionsSource-prop-control' export const OPTION_SOURCE_PROP_CONROL = '[data-cy="optionsSource-prop-control'
export const APP_TABLE_STATUS = ".appTable .app-status"
export const APP_TABLE_ROW_ACTION = ".appTable .app-row-actions"
export const DEPLOYMENT_TOP_NAV_GLOBESTRIKE =
".deployment-top-nav svg[aria-label=GlobeStrike]"
export const DEPLOYMENT_TOP_GLOBE = ".deployment-top-nav svg[aria-label=Globe]"
export const PUBLISH_POPOVER_MENU = '[data-cy="publish-popover-menu"]'
export const PUBLISH_POPOVER_ACTION = '[data-cy="publish-popover-action"]'
export const PUBLISH_POPOVER_MESSAGE = ".publish-popover-message"
export const SPECTRUM_BUTTON = ".spectrum-Button"
export const TOPRIGHTNAV_BUTTON_SPECTRUM = ".toprightnav button.spectrum-Button"
//createComponents
export const SETTINGS = "[data-cy=Settings]"
export const SETTINGS_INPUT = "[data-cy=setting-text] input"
export const DESIGN = "[data-cy=Design]"
export const FONT_SIZE_PROP_CONTRO = "[data-cy=font-size-prop-control]"
export const DATA_CY_DATASOURCE = "[data-cy=setting-dataSource]"
export const DROPDOWN_CONTAINER = ".dropdown-container"
export const SPECTRUM_PICKER = ".spectrum-Picker"
//autoScreens
export const LABEL_ADD_CIRCLE = "[aria-label=AddCircle]"
export const ITEM_DISABLED = ".item.disabled"
export const CONFIRM_WRAP_SPE_BUTTON = ".confirm-wrap .spectrum-Button"
export const DATA_SOURCE_ENTRY = ".data-source-entry"
export const NAV_ITEMS_CONTAINER = ".nav-items-container"
//publishWorkFlow
export const DEPLOY_APP_MODAL = ".spectrum-Modal [data-cy=deploy-app-modal]"
export const DEPLOY_APP_URL_INPUT = "[data-cy=deployed-app-url] input"
export const GLOBESTRIKE = "svg[aria-label=GlobeStrike]"
export const GLOBE = "svg[aria-label=Globe]"
export const UNPUBLISH_MODAL = "[data-cy=unpublish-modal]"
export const CONFIRM_WRAP_BUTTON = ".confirm-wrap button"