mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-31 17:38:48 +00:00
split protractor configuration file (#4983)
This commit is contained in:
80
e2e/protractor/fail-fast.js
Normal file
80
e2e/protractor/fail-fast.js
Normal file
@@ -0,0 +1,80 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.init = init;
|
||||
exports.getSpecReferences = getSpecReferences;
|
||||
exports.disableSpecs = disableSpecs;
|
||||
|
||||
var wrap = require('lodash.wrap');
|
||||
|
||||
var refs = undefined;
|
||||
|
||||
function init() {
|
||||
refs = getSpecReferences();
|
||||
|
||||
return {
|
||||
specDone: function specDone(result) {
|
||||
if (result.status === 'failed') {
|
||||
disableSpecs(refs);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Gather references to all jasmine specs and suites, through any (currently hacky) means possible.
|
||||
*
|
||||
* @return {Object} An object with `specs` and `suites` properties, arrays of respective types.
|
||||
*/
|
||||
|
||||
function getSpecReferences() {
|
||||
var specs = [];
|
||||
var suites = [];
|
||||
|
||||
// Use specFilter to gather references to all specs.
|
||||
jasmine.getEnv().specFilter = function (spec) {
|
||||
specs.push(spec);
|
||||
return true;
|
||||
};
|
||||
|
||||
// Wrap jasmine's describe function to gather references to all suites.
|
||||
jasmine.getEnv().describe = wrap(jasmine.getEnv().describe, function (describe) {
|
||||
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
args[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
var suite = describe.apply(null, args);
|
||||
suites.push(suite);
|
||||
return suite;
|
||||
});
|
||||
|
||||
return {
|
||||
specs: specs,
|
||||
suites: suites
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Hacky workaround to facilitate "fail fast". Disable all specs (basically `xit`), then
|
||||
* remove references to all before/after functions, else they'll still run. Disabling the
|
||||
* suites themselves does not appear to have an effect.
|
||||
*/
|
||||
|
||||
function disableSpecs() {
|
||||
if (!refs) {
|
||||
throw new Error('jasmine-fail-fast: Must call init() before calling disableSpecs()!');
|
||||
}
|
||||
|
||||
refs.specs.forEach(function (spec) {
|
||||
return spec.disable();
|
||||
});
|
||||
|
||||
refs.suites.forEach(function (suite) {
|
||||
suite.beforeFns = [];
|
||||
suite.afterFns = [];
|
||||
suite.beforeAllFns = [];
|
||||
suite.afterAllFns = [];
|
||||
});
|
||||
}
|
112
e2e/protractor/override-jasmine.js
Normal file
112
e2e/protractor/override-jasmine.js
Normal file
@@ -0,0 +1,112 @@
|
||||
function beforeAllRewrite() {
|
||||
|
||||
const originalBeforeAll = global.beforeAll;
|
||||
|
||||
// tslint:disable-next-line
|
||||
global.beforeAll = function (beforeAllFunction, timeout) {
|
||||
const wrapClbk = async (done) => {
|
||||
try {
|
||||
await beforeAllFunction(done);
|
||||
} catch (error) {
|
||||
console.log('Error Before all second attempt in 10 sec');
|
||||
sleep(10000);
|
||||
try {
|
||||
await beforeAllFunction(done);
|
||||
} catch (e) {
|
||||
// tslint:disable-next-line:no-console
|
||||
console.log('Error Before all second attempt fail all' + JSON.stringify(error));
|
||||
expect(true).toBe(false);
|
||||
}
|
||||
}
|
||||
|
||||
done();
|
||||
return;
|
||||
};
|
||||
|
||||
originalBeforeAll(wrapClbk, timeout);
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
function afterAllRewrite() {
|
||||
|
||||
const originalAfterAll = global.afterAll;
|
||||
|
||||
// tslint:disable-next-line
|
||||
global.afterAll = function (afterAllFunction, timeout) {
|
||||
const wrapClbk = async (done) => {
|
||||
try {
|
||||
await afterAllFunction(done);
|
||||
} catch (error) {
|
||||
// tslint:disable-next-line:no-console
|
||||
console.log('Error After all' + JSON.stringify(error));
|
||||
}
|
||||
|
||||
done();
|
||||
return;
|
||||
};
|
||||
|
||||
originalAfterAll(wrapClbk, timeout);
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
function beforeEachAllRewrite() {
|
||||
|
||||
const originalBeforeEach = global.beforeEach;
|
||||
|
||||
// tslint:disable-next-line
|
||||
global.beforeEach = function (beforeEachFunction, timeout) {
|
||||
const wrapClbk = async (done) => {
|
||||
try {
|
||||
await beforeEachFunction(done);
|
||||
} catch (error) {
|
||||
// tslint:disable-next-line:no-console
|
||||
console.log('Error before Each' + JSON.stringify(error));
|
||||
expect(true).toBe(false);
|
||||
}
|
||||
|
||||
done();
|
||||
return;
|
||||
};
|
||||
|
||||
originalBeforeEach(wrapClbk, timeout);
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
function afterEachAllRewrite() {
|
||||
|
||||
const originalAfterEach = global.afterEach;
|
||||
|
||||
// tslint:disable-next-line
|
||||
global.afterEach = function (afterEachFunction, timeout) {
|
||||
const wrapClbk = async (done) => {
|
||||
try {
|
||||
await afterEachFunction(done);
|
||||
} catch (error) {
|
||||
// tslint:disable-next-line:no-console
|
||||
console.log('Error After each' + JSON.stringify(error));
|
||||
|
||||
}
|
||||
|
||||
done();
|
||||
return;
|
||||
};
|
||||
|
||||
originalAfterEach(wrapClbk, timeout);
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
function sleep(delay) {
|
||||
var start = new Date().getTime();
|
||||
while (new Date().getTime() < start + delay) ;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
beforeAllRewrite: beforeAllRewrite,
|
||||
afterAllRewrite: afterAllRewrite,
|
||||
beforeEachAllRewrite: beforeEachAllRewrite,
|
||||
afterEachAllRewrite: afterEachAllRewrite
|
||||
};
|
150
e2e/protractor/save-remote.js
Normal file
150
e2e/protractor/save-remote.js
Normal file
@@ -0,0 +1,150 @@
|
||||
const htmlReporter = require('protractor-html-reporter-2');
|
||||
|
||||
function buildNumber() {
|
||||
let buildNumber = process.env.TRAVIS_BUILD_NUMBER;
|
||||
if (!buildNumber) {
|
||||
process.env.TRAVIS_BUILD_NUMBER = Date.now();
|
||||
}
|
||||
|
||||
return process.env.TRAVIS_BUILD_NUMBER;
|
||||
}
|
||||
|
||||
async function uploadScreenshot(alfrescoJsApi, retryCount) {
|
||||
let files = fs.readdirSync(path.join(__dirname, './e2e-output/screenshots'));
|
||||
|
||||
if (files && files.length > 0) {
|
||||
|
||||
let folder;
|
||||
|
||||
try {
|
||||
folder = await alfrescoJsApi.nodes.addNode('-my-', {
|
||||
'name': `retry-${retryCount}`,
|
||||
'relativePath': `Builds/${buildNumber()}/screenshot`,
|
||||
'nodeType': 'cm:folder'
|
||||
}, {}, {
|
||||
'overwrite': true
|
||||
});
|
||||
} catch (error) {
|
||||
folder = await alfrescoJsApi.nodes.getNode('-my-', {
|
||||
'relativePath': `Builds/${buildNumber()}/screenshot/retry-${retryCount}`,
|
||||
'nodeType': 'cm:folder'
|
||||
}, {}, {
|
||||
'overwrite': true
|
||||
});
|
||||
}
|
||||
|
||||
for (const fileName of files) {
|
||||
let pathFile = path.join(__dirname, './e2e-output/screenshots', fileName);
|
||||
let file = fs.createReadStream(pathFile);
|
||||
|
||||
let safeFileName = fileName.replace(new RegExp('"', 'g'), '');
|
||||
|
||||
try {
|
||||
await alfrescoJsApi.upload.uploadFile(
|
||||
file,
|
||||
'',
|
||||
folder.entry.id,
|
||||
null,
|
||||
{
|
||||
'name': safeFileName,
|
||||
'nodeType': 'cm:content',
|
||||
'autoRename': true
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function uploadReport(alfrescoJsApi, filenameReport) {
|
||||
let pathFile = path.join(__dirname, './e2e-output/junit-report/html', filenameReport + '.html');
|
||||
let reportFile = fs.createReadStream(pathFile);
|
||||
|
||||
let reportFolder;
|
||||
|
||||
try {
|
||||
reportFolder = await alfrescoJsApi.nodes.addNode('-my-', {
|
||||
'name': 'report',
|
||||
'relativePath': `Builds/${buildNumber()}`,
|
||||
'nodeType': 'cm:folder'
|
||||
}, {}, {
|
||||
'overwrite': true
|
||||
});
|
||||
} catch (error) {
|
||||
reportFolder = await alfrescoJsApi.nodes.getNode('-my-', {
|
||||
'relativePath': `Builds/${buildNumber()}/report`,
|
||||
'nodeType': 'cm:folder'
|
||||
}, {}, {
|
||||
'overwrite': true
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
await alfrescoJsApi.upload.uploadFile(
|
||||
reportFile,
|
||||
'',
|
||||
reportFolder.entry.id,
|
||||
null,
|
||||
{
|
||||
'name': reportFile.name,
|
||||
'nodeType': 'cm:content',
|
||||
'autoRename': true
|
||||
}
|
||||
);
|
||||
|
||||
} catch (error) {
|
||||
console.log('error' + error);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
async function saveReport(alfrescoJsApi, retryCount) {
|
||||
let filenameReport = `ProtractorTestReport-${FOLDER}-${retryCount}`;
|
||||
|
||||
let output = '';
|
||||
let savePath = `${projectRoot}/e2e-output/junit-report/`;
|
||||
let temporaryHtmlPath = savePath + 'html/temporaryHtml/';
|
||||
let lastFileName = '';
|
||||
|
||||
let files = fs.readdirSync(savePath);
|
||||
|
||||
if (files && files.length > 0) {
|
||||
for (const fileName of files) {
|
||||
const testConfigReport = {
|
||||
reportTitle: 'Protractor Test Execution Report',
|
||||
outputPath: temporaryHtmlPath,
|
||||
outputFilename: Math.random().toString(36).substr(2, 5) + filenameReport,
|
||||
};
|
||||
|
||||
let filePath = `${projectRoot}/e2e-output/junit-report/` + fileName;
|
||||
|
||||
new htmlReporter().from(filePath, testConfigReport);
|
||||
lastFileName = testConfigReport.outputFilename;
|
||||
}
|
||||
}
|
||||
|
||||
let lastHtmlFile = temporaryHtmlPath + lastFileName + '.html';
|
||||
|
||||
if (!(fs.lstatSync(lastHtmlFile).isDirectory())) {
|
||||
output = output + fs.readFileSync(lastHtmlFile);
|
||||
}
|
||||
|
||||
let fileName = savePath + 'html/' + filenameReport + '.html';
|
||||
|
||||
fs.writeFileSync(fileName, output, 'utf8');
|
||||
|
||||
await uploadReport(alfrescoJsApi, filenameReport);
|
||||
|
||||
rimraf(`${projectRoot}/e2e-output/screenshots/`, function () {
|
||||
console.log('done delete screenshot');
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
uploadScreenshot: uploadScreenshot,
|
||||
uploadReport: uploadReport,
|
||||
saveReport: saveReport
|
||||
};
|
Reference in New Issue
Block a user