mirror of
https://github.com/OpenNebula/one.git
synced 2024-12-23 17:33:56 +03:00
Co-authored-by: Jorge Lobo <jlobo@opennebula.systems>
This commit is contained in:
parent
3220ba29d2
commit
eca0414f74
16
src/fireedge/cypress.json
Normal file
16
src/fireedge/cypress.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"port": 2617,
|
||||
"numTestsKeptInMemory": 20,
|
||||
"env":{},
|
||||
"video": false,
|
||||
"viewportHeight": 720,
|
||||
"viewportWidth": 1280,
|
||||
"baseUrl": "http://localhost:2616",
|
||||
"reporter": "mochawesome",
|
||||
"reporterOptions": {
|
||||
"reportDir": "cypress/results",
|
||||
"overwrite": false,
|
||||
"html": false,
|
||||
"json": true
|
||||
}
|
||||
}
|
110
src/fireedge/cypress/command/index.js
Normal file
110
src/fireedge/cypress/command/index.js
Normal file
@ -0,0 +1,110 @@
|
||||
const cypress = require('cypress')
|
||||
const marge = require('mochawesome-report-generator')
|
||||
const { merge } = require('mochawesome-merge')
|
||||
const { existsSync, mkdirsSync, readFileSync, writeFileSync, removeSync } = require('fs-extra')
|
||||
const { dirname } = require('path')
|
||||
|
||||
const config = {
|
||||
browser: 'chrome',
|
||||
headless: true,
|
||||
spec: 'cypress/integration/**/*.spec.js'
|
||||
}
|
||||
|
||||
const generateReport = (options = {
|
||||
reportDir: 'cypress/results',
|
||||
reportFilename: 'merge-results',
|
||||
saveJson: true,
|
||||
saveHtml: false,
|
||||
files: [
|
||||
'./cypress/results/*.json'
|
||||
]
|
||||
}) => {
|
||||
return merge(options).then(report => marge.create(report, options))
|
||||
}
|
||||
|
||||
const parseReport = (dataReport = '') => {
|
||||
if (dataReport && Array.isArray(dataReport) && dataReport.slice(-1).pop()) {
|
||||
const pathMergeJson = dataReport.slice(-1).pop()
|
||||
const bsname = dirname(pathMergeJson)
|
||||
const fileData = readFileSync(pathMergeJson, 'utf8')
|
||||
if (fileData) {
|
||||
const dataJSON = JSON.parse(fileData)
|
||||
const parsedJSON = {}
|
||||
|
||||
// version
|
||||
parsedJSON.version = dataJSON.meta.mochawesome.version
|
||||
|
||||
// examples
|
||||
const examples = []
|
||||
// results -19
|
||||
if (dataJSON.results) {
|
||||
dataJSON.results.forEach(results => {
|
||||
const pathTest = results.fullFile
|
||||
// results.suites -28
|
||||
if (results && results.suites && Array.isArray(results.suites)) {
|
||||
results.suites.forEach(suites => {
|
||||
// result.suites.tests -36
|
||||
if (suites && suites.tests && Array.isArray(suites.tests)) {
|
||||
suites.tests.forEach(test => {
|
||||
const parsedTest = {}
|
||||
parsedTest.id = pathTest
|
||||
parsedTest.description = test.title || null
|
||||
parsedTest.full_description = test.fullTitle || null
|
||||
parsedTest.status = test.pass ? 'passed' : 'failed'
|
||||
parsedTest.file_path = pathTest
|
||||
parsedTest.line_number = null
|
||||
parsedTest.run_time = test.duration || null
|
||||
parsedTest.pending_message = null
|
||||
|
||||
if (test.fail && test.code && test.code.length) {
|
||||
parsedTest.exception = {
|
||||
class: test.err.message,
|
||||
backtrace: test.err.estack && [test.err.estack],
|
||||
message: test.code
|
||||
}
|
||||
}
|
||||
examples.push(parsedTest)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
parsedJSON.examples = examples
|
||||
|
||||
// summary
|
||||
parsedJSON.summary = {
|
||||
duration: dataJSON.stats.duration,
|
||||
example_count: dataJSON.stats.tests,
|
||||
failure_count: dataJSON.stats.failures,
|
||||
pending_count: dataJSON.stats.pending,
|
||||
errors_outside_of_examples_count: dataJSON.stats.other
|
||||
}
|
||||
|
||||
// summary_line
|
||||
parsedJSON.summary_line = `${dataJSON.stats.testsRegistered} examples, ${dataJSON.stats.failures} failures`
|
||||
|
||||
// clear results folder
|
||||
removeSync(bsname)
|
||||
|
||||
// create path
|
||||
if (!existsSync(bsname)) {
|
||||
mkdirsSync(bsname)
|
||||
}
|
||||
|
||||
// create JSON file
|
||||
writeFileSync(`${bsname}/results.json`, JSON.stringify(parsedJSON))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cypress.run(config).then(
|
||||
() => {
|
||||
generateReport().then(parseReport)
|
||||
},
|
||||
error => {
|
||||
generateReport().then(parseReport)
|
||||
console.error(error)
|
||||
process.exit(1)
|
||||
}
|
||||
)
|
27
src/fireedge/cypress/fixtures/defaults.json
Normal file
27
src/fireedge/cypress/fixtures/defaults.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"auth": {
|
||||
"jwtName": "FireedgeToken",
|
||||
"username": "oneadmin",
|
||||
"password": "opennebula"
|
||||
},
|
||||
"endpoints": {
|
||||
"login": "/api/auth/",
|
||||
"userInfo": "/api/user/info"
|
||||
},
|
||||
"provision": {
|
||||
"provision": "hybrid+",
|
||||
"provider": "aws",
|
||||
"nameProvider": "aws-frankfurt",
|
||||
"descriptionProvider": "Elastic cluster on AWS in Frakfurt",
|
||||
"descriptionProviderEdited": "Elastic cluster on AWS in Frakfurt Edited!",
|
||||
"descriptionProvision": "Provision description",
|
||||
"key": "access key",
|
||||
"keyEdited": "access key Edited!",
|
||||
"secretKey": "secret access key",
|
||||
"secretKeyEdited": "secret access key Edited!",
|
||||
"nameProvision": "aws-cluster",
|
||||
"numberInstances": "1",
|
||||
"amiImage": "ami-0b793c1e0d1dc4d28",
|
||||
"instanceType": "i3-metal"
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
// / <reference types="Cypress" />
|
||||
|
||||
context('Dashboard', () => {
|
||||
before(() => {
|
||||
cy.visit('/')
|
||||
cy.login()
|
||||
})
|
||||
|
||||
after(() => {
|
||||
cy.logout()
|
||||
})
|
||||
|
||||
it('validate items', () => {
|
||||
|
||||
})
|
||||
})
|
@ -0,0 +1,31 @@
|
||||
// const { internalLog } = require('../../../support/utils')
|
||||
// / <reference types="Cypress" />
|
||||
context('Login', () => {
|
||||
before(() => {
|
||||
cy.goToIndex(__dirname, () => {
|
||||
cy.login()
|
||||
})
|
||||
})
|
||||
|
||||
after(() => {
|
||||
cy.logout()
|
||||
})
|
||||
|
||||
it('has successfull login', () => {
|
||||
cy.getJWT((JWT) => {
|
||||
if (JWT && cy.wrap(JWT).should('exist')) {
|
||||
cy.get('[data-cy=header]').should('be.visible')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('has username on header', () => {
|
||||
cy.get('[data-cy=header-user-button]').click()
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
cy.get('[data-cy=header-username]').should(
|
||||
'have.text',
|
||||
defaults.auth.username
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
@ -0,0 +1,218 @@
|
||||
const { createIntercept, waitIntercept } = require('../../../support/utils')
|
||||
const testType = 'Provider'
|
||||
|
||||
const reloadProviderComponent = () => {
|
||||
// for reload the provider react-component this update the provider list
|
||||
cy.navigateMenu('dashboard')
|
||||
}
|
||||
|
||||
const interceptList = {
|
||||
method: 'GET',
|
||||
url: '/provider/list'
|
||||
}
|
||||
const interceptCreate = {
|
||||
method: 'POST',
|
||||
url: '/provider/create'
|
||||
}
|
||||
const interceptConfigure = {
|
||||
method: 'PUT',
|
||||
url: '/provider/update'
|
||||
}
|
||||
const interceptDelete = {
|
||||
method: 'DELETE',
|
||||
url: '/provider/delete'
|
||||
}
|
||||
|
||||
let defaultSettings = {}
|
||||
|
||||
context(testType, () => {
|
||||
before(() => {
|
||||
// fill settings
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
defaultSettings = defaults.provision
|
||||
})
|
||||
|
||||
// go to index app
|
||||
cy.visit('/')
|
||||
cy.login()
|
||||
})
|
||||
|
||||
after(() => {
|
||||
cy.logout()
|
||||
})
|
||||
|
||||
it('Create a Provider', () => {
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
cy.get('[data-cy=create-provider]').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
cy.get('[data-cy=select-provision-type]').select(defaultSettings.provision || '')
|
||||
cy.get('[data-cy=select-provider-type]').select(defaultSettings.provider || '')
|
||||
let brk = true
|
||||
|
||||
// expect test
|
||||
const validateTest = request => {
|
||||
expect(request).to.be.a('object')
|
||||
expect(request).to.nested.include({ 'response.body.id': 200 })
|
||||
}
|
||||
|
||||
// fill form "Configure Connection" tab
|
||||
const fillFormConfigureConnection = () => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.get('[data-cy=form-provider-access_key]').clear().type(defaultSettings.key || '')
|
||||
cy.get('[data-cy=form-provider-secret_key]').clear().type(defaultSettings.secretKey || '')
|
||||
const intercept = createIntercept(interceptCreate)
|
||||
cy.wrap($button).click({ force: true })
|
||||
waitIntercept(intercept, validateTest)
|
||||
})
|
||||
}
|
||||
|
||||
// fill form "Provider Overview" tab
|
||||
const fillFormProviderOverview = () => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.get('[data-cy=form-provider-name]').clear().type(defaultSettings.nameProvider || '')
|
||||
cy.get('[data-cy=form-provider-description]').clear().type(defaultSettings.descriptionProvider || '')
|
||||
cy.wrap($button).click({ force: true })
|
||||
fillFormConfigureConnection()
|
||||
})
|
||||
}
|
||||
|
||||
// select template in "Provider template" tab
|
||||
const selectTemplate = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('>button').click({ force: true }).then(() => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.wrap($button).click({ force: true })
|
||||
fillFormProviderOverview()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// find provider template in "Provider template" tab
|
||||
cy.get('[data-cy=providers-templates]').find('[data-cy=provider-template-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvider && $el.find('[data-cy=provider-template-card-title]').text() === defaultSettings.nameProvider) {
|
||||
selectTemplate($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Check information a Provider', () => {
|
||||
reloadProviderComponent()
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
let brk = true
|
||||
|
||||
// select provider
|
||||
const selectProvider = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('>button').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptList), info => {
|
||||
cy.get('[data-cy=provider-name]').should('have.text', defaultSettings.nameProvider)
|
||||
cy.get('[data-cy=provider-description]').should('have.text', defaultSettings.descriptionProvider)
|
||||
cy.get('[data-cy=provider-type]').should('have.text', defaultSettings.provider)
|
||||
cy.get('[data-cy=provider-access_key]').should('have.text', defaultSettings.key)
|
||||
cy.get('[data-cy=provider-secret_key]').should('have.text', defaultSettings.secretKey)
|
||||
cy.get('[data-cy=dg-cancel-button]').click({ force: true })
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// find provider
|
||||
cy.get('[data-cy=providers]').find('[data-cy=provider-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvider && $el.find('[data-cy=provider-card-title]').text() === defaultSettings.nameProvider) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Configure', () => {
|
||||
reloadProviderComponent()
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
let brk = true
|
||||
|
||||
// expect test
|
||||
const validateTest = request => {
|
||||
expect(request).to.be.a('object')
|
||||
expect(request).to.nested.include({ 'response.body.id': 200 })
|
||||
}
|
||||
|
||||
// fill "Configure connection" tab
|
||||
const fillConfigureConnection = $button => {
|
||||
const intercept = createIntercept(interceptConfigure)
|
||||
cy.get('[data-cy=form-provider-access_key]').clear().type(defaultSettings.keyEdited || '')
|
||||
cy.get('[data-cy=form-provider-secret_key]').clear().type(defaultSettings.secretKeyEdited || '')
|
||||
cy.wrap($button).click({ force: true })
|
||||
waitIntercept(intercept, validateTest)
|
||||
}
|
||||
|
||||
// fill "Provider overview" tab
|
||||
const fillProviderOverview = $button => {
|
||||
cy.get('[data-cy=form-provider-description]').clear().type(defaultSettings.descriptionProviderEdited || '')
|
||||
cy.wrap($button).click({ force: true })
|
||||
cy.get('[data-cy=stepper-next-button]').then(fillConfigureConnection)
|
||||
}
|
||||
|
||||
// select provider
|
||||
const selectProvider = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('[data-cy=provider-edit]').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
cy.get('[data-cy=stepper-next-button]').then(fillProviderOverview)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// find provider
|
||||
cy.get('[data-cy=providers]').find('[data-cy=provider-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvider && $el.find('[data-cy=provider-card-title]').text() === defaultSettings.nameProvider) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Delete', () => {
|
||||
reloadProviderComponent()
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
let brk = true
|
||||
|
||||
// expect test
|
||||
const validateTest = request => {
|
||||
expect(request).to.be.a('object')
|
||||
expect(request).to.nested.include({ 'response.body.id': 202 })
|
||||
}
|
||||
|
||||
// select provider
|
||||
const selectProvider = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('[data-cy=provider-delete]').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
const intercept = createIntercept(interceptDelete)
|
||||
cy.get('[data-cy=dg-accept-button]').click({ force: true }).then(() => {
|
||||
waitIntercept(intercept, validateTest)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// find provider
|
||||
cy.get('[data-cy=providers]').find('[data-cy=provider-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvider && $el.find('[data-cy=provider-card-title]').text() === defaultSettings.nameProvider) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
@ -0,0 +1,221 @@
|
||||
const { createIntercept, waitIntercept } = require('../../../support/utils')
|
||||
const testType = 'Provision'
|
||||
|
||||
const reloadProvisionComponent = () => {
|
||||
// for reload the provision react-component this update the provider list
|
||||
cy.navigateMenu('dashboard')
|
||||
}
|
||||
|
||||
const interceptProviderList = {
|
||||
method: 'GET',
|
||||
url: '/provider/list'
|
||||
}
|
||||
const interceptList = {
|
||||
method: 'GET',
|
||||
url: '/provision/list'
|
||||
}
|
||||
const interceptCreate = {
|
||||
method: 'POST',
|
||||
url: '/provision/create'
|
||||
}
|
||||
const interceptConfigure = {
|
||||
method: 'PUT',
|
||||
url: '/provision/configure'
|
||||
}
|
||||
const interceptDelete = {
|
||||
method: 'DELETE',
|
||||
url: '/provision/delete'
|
||||
}
|
||||
let defaultSettings = {}
|
||||
|
||||
context(testType, () => {
|
||||
before(() => {
|
||||
// fill settings
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
defaultSettings = defaults.provision
|
||||
})
|
||||
|
||||
//go to index app
|
||||
cy.visit('/')
|
||||
cy.login()
|
||||
})
|
||||
|
||||
after(() => {
|
||||
cy.logout()
|
||||
})
|
||||
|
||||
it('Create', () => {
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
cy.get('[data-cy=create-provision]').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptProviderList), () => {
|
||||
cy.get('[data-cy=select-provision-type]').select(defaultSettings.provision || '')
|
||||
cy.get('[data-cy=select-provider-type]').select(defaultSettings.provider || '')
|
||||
let brkProvisionTemplate = true
|
||||
let brkProvider = true
|
||||
|
||||
// expect test
|
||||
const validateTest = request => {
|
||||
expect(request).to.be.a('object')
|
||||
expect(request).to.nested.include({ 'response.body.id': 202 })
|
||||
}
|
||||
|
||||
// fill form "Configure inputs" tab
|
||||
const fillFormConfigureInputs = () => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.get('[data-cy=form-provision-number_hosts]').clear().type(defaultSettings.numberInstances || '')
|
||||
const intercept = createIntercept(interceptCreate)
|
||||
cy.wrap($button).click({ force: true })
|
||||
waitIntercept(intercept, validateTest)
|
||||
})
|
||||
}
|
||||
|
||||
// fill form "Provider overview" tab
|
||||
const fillFormProvision = () => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.get('[data-cy=form-provision-name]').clear().type(defaultSettings.nameProvision || '')
|
||||
cy.get('[data-cy=form-provision-description]').clear().type(defaultSettings.descriptionProvision || '')
|
||||
cy.wrap($button).click({ force: true })
|
||||
fillFormConfigureInputs()
|
||||
})
|
||||
}
|
||||
|
||||
// find provider in "Provider" tab
|
||||
const selectProvider = $el => {
|
||||
brkProvider = false
|
||||
cy.wrap($el).find('>button').click({ force: true }).then(() => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.wrap($button).click({ force: true })
|
||||
fillFormProvision()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// find provider in "Provider" tab
|
||||
const findProvider = () => {
|
||||
cy.get('[data-cy=stepper-next-button]').then($button => {
|
||||
cy.wrap($button).click({ force: true })
|
||||
cy.get('[data-cy=providers]').find('[data-cy=provider-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvision && $el.find('[data-cy=provider-card-title]').text().includes(defaultSettings.nameProvider)) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brkProvider
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// select provision template in "Provision template" tab
|
||||
const selectProvisionTemplate = $el => {
|
||||
brkProvisionTemplate = false
|
||||
cy.wrap($el).find('>button').click({ force: true }).then(findProvider)
|
||||
}
|
||||
|
||||
// find provision template in "Provision template" tab
|
||||
cy.get('[data-cy=provisions-templates]').find('[data-cy=provision-template-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvision && $el.find('[data-cy=provision-template-card-title]').text() === defaultSettings.nameProvision) {
|
||||
selectProvisionTemplate($el)
|
||||
}
|
||||
return brkProvisionTemplate
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Check information', () => {
|
||||
reloadProvisionComponent()
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
let brk = true
|
||||
|
||||
//select provider
|
||||
const selectProvider = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('>button').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptList), info => {
|
||||
cy.get('[data-cy=provision-name]').should('have.text', defaultSettings.nameProvision)
|
||||
cy.get('[data-cy=provision-description]').should('have.text', defaultSettings.descriptionProvision)
|
||||
cy.get('[data-cy=provider-provider-name]').should('have.text', defaultSettings.nameProvider)
|
||||
cy.get('[data-cy=provider-cluster]').should('contain', defaultSettings.nameProvision)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
//find provider
|
||||
cy.get('[data-cy=provisions]').find('[data-cy=provision-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvider && $el.find('[data-cy=provision-card-title]').text() === defaultSettings.nameProvision) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Configure', () => {
|
||||
reloadProvisionComponent()
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
let brk = true
|
||||
|
||||
// expect test
|
||||
const validateTest = request => {
|
||||
expect(request).to.be.a('object')
|
||||
expect(request).to.nested.include({ 'response.body.id': 202})
|
||||
}
|
||||
|
||||
// select provider
|
||||
const selectProvider = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('[data-cy=provision-configure]').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptConfigure), validateTest)
|
||||
})
|
||||
}
|
||||
|
||||
// find provider
|
||||
cy.get('[data-cy=provisions]').find('[data-cy=provision-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvision && $el.find('[data-cy=provision-card-title]').text() === defaultSettings.nameProvision) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Delete', () => {
|
||||
reloadProvisionComponent()
|
||||
cy.navigateMenu(`${testType}s`, () => {
|
||||
waitIntercept(createIntercept(interceptList), () => {
|
||||
let brk = true
|
||||
|
||||
// expect test
|
||||
const validateTest = request => {
|
||||
expect(request).to.be.a('object')
|
||||
expect(request).to.nested.include({ 'response.body.id': 202})
|
||||
}
|
||||
|
||||
// select provider
|
||||
const selectProvider = $el => {
|
||||
brk = false
|
||||
cy.wrap($el).find('[data-cy=provision-delete]').click({ force: true }).then(() => {
|
||||
waitIntercept(createIntercept(interceptList), ()=>{
|
||||
const intercept = createIntercept(interceptDelete)
|
||||
cy.get('[data-cy=dg-accept-button]').click({force:true}).then(()=>{
|
||||
waitIntercept(intercept, validateTest)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// find provider
|
||||
cy.get('[data-cy=provisions]').find('[data-cy=provision-card]').each($el => {
|
||||
if (defaultSettings && defaultSettings.nameProvision && $el.find('[data-cy=provision-card-title]').text() === defaultSettings.nameProvision) {
|
||||
selectProvider($el)
|
||||
}
|
||||
return brk
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
})
|
89
src/fireedge/cypress/support/commands.js
Normal file
89
src/fireedge/cypress/support/commands.js
Normal file
@ -0,0 +1,89 @@
|
||||
const { internalLog } = require('./utils')
|
||||
const { sep } = require('path')
|
||||
|
||||
Cypress.Commands.add('login', () => {
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
cy.get('[data-cy=login-user]').clear().type(defaults.auth.username)
|
||||
cy.get('[data-cy=login-token]').clear().type(defaults.auth.password)
|
||||
})
|
||||
cy.get('[data-cy=login-button]').then(($btn) => {
|
||||
cy.wrap($btn).click()
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('openUserModal', (callback = () => undefined) => {
|
||||
cy.get('[data-cy=header-user-button]').then(($btn) => {
|
||||
if ($btn) {
|
||||
cy.wrap($btn).click({ force: true })
|
||||
}
|
||||
callback()
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('logout', () => {
|
||||
cy.openUserModal(
|
||||
() => {
|
||||
cy.get('[data-cy=header-logout-button]').then(($btn) => {
|
||||
if ($btn) {
|
||||
cy.wrap($btn).click({ force: true })
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
cy.window().its('sessionStorage').invoke('removeItem', defaults.auth.jwtName)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
Cypress.Commands.add('getJWT', (callback = () => undefined) => {
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
cy.window().then(win => {
|
||||
callback(win.sessionStorage.getItem(defaults.auth.jwtName))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('navigateMenu', (contentText = '', callback = () => undefined) => {
|
||||
if (contentText) {
|
||||
let rtn = true
|
||||
cy.get('[data-cy=main-menu]').find('li').each($li => {
|
||||
if ($li && $li.text && typeof $li.text === 'function' && $li.text().toLowerCase() === contentText.toLowerCase()) {
|
||||
rtn = false
|
||||
cy.wrap($li).click({ force: true }).then(() => {
|
||||
callback()
|
||||
})
|
||||
}
|
||||
return rtn
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
Cypress.Commands.add('goToIndex', (path = '', callback = () => undefined) => {
|
||||
if (expect(path).to.not.be.empty) {
|
||||
const folders = path.split(sep)
|
||||
cy.fixture('defaults').then(defaults => {
|
||||
if (expect(defaults.apps).to.be.a('object')) {
|
||||
const apps = Object.keys(defaults.apps)
|
||||
let selectApp = ''
|
||||
apps.forEach(app => {
|
||||
if (folders.includes(app)) {
|
||||
selectApp = app
|
||||
}
|
||||
})
|
||||
if (expect(apps).to.be.a('array') && expect(apps).to.include(selectApp)) {
|
||||
cy.visit(`/${selectApp}`, { timeout: 30000 })
|
||||
cy.getJWT((JWT) => {
|
||||
if (!JWT) {
|
||||
cy.get('[data-cy=opennebula-logo]').then($window => {
|
||||
if ($window) {
|
||||
cy.wait(1500)
|
||||
}
|
||||
})
|
||||
}
|
||||
callback()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
41
src/fireedge/cypress/support/utils.js
Normal file
41
src/fireedge/cypress/support/utils.js
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
const { v4 } = require('uuid')
|
||||
|
||||
const createIntercept = (data = {}) => {
|
||||
const uuidv4 = v4()
|
||||
cy.intercept({
|
||||
method: data.method || 'GET',
|
||||
url: data.url || ''
|
||||
}).as(uuidv4)
|
||||
return uuidv4
|
||||
}
|
||||
|
||||
const waitIntercept = (intercept = '', callback = () => undefined) => {
|
||||
if (intercept) {
|
||||
cy.wait(`@${intercept}`).then(interception => {
|
||||
if (interception && interception.state && interception.state === 'Complete' && typeof callback === 'function') {
|
||||
callback(interception)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const internalLog = (command = '', message = '') => {
|
||||
Cypress.log({
|
||||
name: command,
|
||||
displayName: command,
|
||||
consoleProps: () => {
|
||||
return {
|
||||
error: message
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const utils = {
|
||||
internalLog,
|
||||
createIntercept,
|
||||
waitIntercept
|
||||
}
|
||||
|
||||
module.exports = utils
|
@ -9,6 +9,8 @@
|
||||
"build-server": "rimraf dist/index.js && rimraf dist/fireedge-server.conf && webpack --config ./webpack.config.prod.server.js",
|
||||
"build": "npm run build-front && npm run build-server",
|
||||
"start": "cross-env NODE_ENV=production babel-node ./dist/index.js",
|
||||
"cypress:open": "cypress open",
|
||||
"cypress:run": "rimraf cypress/results/* && node cypress/command/index.js",
|
||||
"pot": "node potfile.js",
|
||||
"po2json": "node po2json.js",
|
||||
"lint": "eslint ./src/client/",
|
||||
@ -39,6 +41,9 @@
|
||||
"eslint-plugin-standard": "^4.0.1",
|
||||
"fireedge-genpotfile": "^1.0.0",
|
||||
"fireedge-pojson": "^1.0.2",
|
||||
"mochawesome": "^6.2.1",
|
||||
"mochawesome-merge": "^4.2.0",
|
||||
"mochawesome-report-generator": "^5.1.0",
|
||||
"react-hot-loader": "^4.13.0",
|
||||
"webpack-dev-middleware": "^3.7.2",
|
||||
"webpack-hot-middleware": "^2.25.0"
|
||||
|
Loading…
Reference in New Issue
Block a user