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
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() |
|
})
|
|
|