/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-namespace */
// Load type definitions that come with Cypress module
///
declare global {
namespace Cypress {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
interface Chainable {
executeGroovy(scriptFile: string, replacements?: { [key: string]: string }, jahiaServer?: JahiaServer): Chainable
}
}
}
type JahiaServer = {
url: string;
username: string;
password: string
}
const serverDefaults = {
url: Cypress.config().baseUrl,
username: 'root',
password: Cypress.env('SUPER_USER_PASSWORD')
};
export const executeGroovy = function (scriptFile: string, replacements?: { [key: string]: string }, jahiaServer: JahiaServer = serverDefaults): void {
let result: any;
let duration: number;
let scriptContent: string;
const startTime = Date.now();
const replacementsLabel = replacements && Object.keys(replacements).length > 0 ?
` — ${JSON.stringify(replacements)}` :
'';
const logger = Cypress.log({
autoEnd: false,
name: 'executeGroovy',
displayName: 'groovy',
message: `${scriptFile}${replacementsLabel}`,
consoleProps: () => ({
Script: scriptFile,
'Script Content': scriptContent ?? '(loading...)',
Replacements: replacements ?? {},
Server: jahiaServer.url,
Duration: duration === undefined ? 'pending' : `${duration}ms`,
Result: result
})
});
cy.fixture(scriptFile, 'utf-8').then((content: string) => {
let processed = content;
if (replacements) {
Object.keys(replacements).forEach(k => {
processed = processed.replaceAll(k, replacements[k]);
});
}
scriptContent = processed;
});
cy.runProvisioningScript({
script: {
fileContent: '- executeScript: "' + scriptFile + '"',
type: 'application/yaml'
},
files: [{
fileName: scriptFile,
replacements,
type: 'text/plain',
encoding: 'utf-8'
}],
jahiaServer,
options: {log: false}
}).then(r => {
result = (r as any)?.[0];
duration = Date.now() - startTime;
const hasFailed = typeof result === 'string' && result.includes('.failed');
const prefix = hasFailed ? '❌ ' : '✅ ';
logger.set('message', `${prefix}${scriptFile}${replacementsLabel}`);
logger?.end();
return result;
});
};