A Demo project for MSFT
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

134 lines
3.9 KiB

/*
* Copyright 2023 Adobe Systems Incorporated
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Cypress.Commands.add('AEMForceLogout', function () {
cy.visit('/')
cy.title().then(title => {
if (!title || !title.includes('AEM Sign In')) {
cy.visit('/system/sling/logout.html')
}
})
cy.get('form[name="login"]', {timeout: 3000}).should('exist')
})
Cypress.Commands.add('AEMLogin', function (username, password) {
if (Cypress.config().baseUrl.includes('adobeaemcloud.com') || Cypress.config().baseUrl.includes('adobeaemcloud.net')) {
cy.get('#coral-id-0').click()
}
cy.get('#login').should('have.attr', 'action', '/libs/granite/core/content/login.html/j_security_check')
cy.get('#username').type(username)
cy.get('#password').type(password, {log: false})
cy.get('#submit-button').click()
cy.get('coral-shell-content', {timeout: 5000}).should('exist')
})
Cypress.Commands.add('AEMPathExists', function (baseUrl, path) {
const url = new URL(path, baseUrl)
console.log('COMMAND CALLED - START')
return cy.request({
url: url.href,
failOnStatusCode: false,
})
.then(response => {
return (response.status === 200)
});
})
Cypress.Commands.add('AEMDeleteAsset', function (assetPath) {
const tokenUrl = new URL('/libs/granite/csrf/token.json', Cypress.env('AEM_AUTHOR_URL'))
let csrfToken;
cy.request(tokenUrl.href).then((response) => {
csrfToken = response.body.token
const form = new FormData();
form.append('cmd', 'deletePage');
form.append('path', assetPath);
form.append('force', 'true'),
form.append('_charset_', 'utf-8');
const body = {
cmd: 'deletePage',
path: assetPath,
force: true,
"_charset_": 'utf-8',
}
const url = new URL('/bin/wcmcommand', Cypress.env('AEM_AUTHOR_URL'))
const referrerUrl = new URL(assetPath, Cypress.env('AEM_AUTHOR_URL'))
// application/x-www-form-urlencoded; charset=UTF-8
cy.request({
url: url.href,
method: 'POST',
headers: {
'CSRF-Token': csrfToken,
Referer: referrerUrl,
},
form: true,
body: body,
})
})
})
Cypress.Commands.add('waitUntil', function (innerFunction, options = {}) {
// Determine wait parameters
const errorMsg = options.errorMsg || 'timed out';
const timeout = options.timeout || 3000;
const interval = options.interval || 200;
let retries = Math.floor(timeout / interval)
// Evaluate the result and retry if needed
const checkResult = (result) => {
// Function succeeded, stop
if (result) {
return result
}
// Retries exceeded, fail
if (retries < 1) {
throw new Error(errorMsg)
}
// Wait and trigger a retry
cy.wait(interval, {log: false}).then(() => {
cy.log('Retrying...')
retries--
return callFunction()
})
}
// Call the actual function
const callFunction = () => {
const result = innerFunction()
const isPromise = Boolean(result && result.then)
if (isPromise) {
return result.then(checkResult)
} else {
return checkResult(result)
}
}
return callFunction()
})