From cf9e3180c93bda059aca76396916fa5e62f9fb25 Mon Sep 17 00:00:00 2001 From: Cristina Jalba Date: Fri, 10 Jul 2020 15:08:37 +0300 Subject: [PATCH] Copy screenshots to env (#1508) * add screenshots * Fix protractor file * make 1 test to fail * remove method * fix build number * add log * fix folder path * fix test * fix test * Move saving screenshots to separate file * Remove failing tests --- e2e/e2e-config/hooks/after-launch.js | 21 ++++++++ e2e/e2e-config/utils/build-number.js | 10 ++++ e2e/e2e-config/utils/upload-output.js | 69 +++++++++++++++++++++++++++ protractor.conf.js | 5 +- 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 e2e/e2e-config/hooks/after-launch.js create mode 100644 e2e/e2e-config/utils/build-number.js create mode 100644 e2e/e2e-config/utils/upload-output.js diff --git a/e2e/e2e-config/hooks/after-launch.js b/e2e/e2e-config/hooks/after-launch.js new file mode 100644 index 000000000..1931aeba8 --- /dev/null +++ b/e2e/e2e-config/hooks/after-launch.js @@ -0,0 +1,21 @@ +const uploadOutput = require('../utils/upload-output'); + +const SAVE_SCREENSHOT = process.env.SAVE_SCREENSHOT === 'true'; + +async function afterLaunch(statusCode) { + + if (SAVE_SCREENSHOT) { + console.log(`Save screenshot is ${SAVE_SCREENSHOT}, trying to save screenshots.`); + + try { + await uploadOutput(); + console.log('Screenshots saved successfully.'); + } catch (e) { + console.log('Error happened while trying to upload screenshots and test reports: ', e); + } + } else { + console.log(`Save screenshot is ${SAVE_SCREENSHOT}, no need to save screenshots.`); + } +} + +module.exports = afterLaunch; diff --git a/e2e/e2e-config/utils/build-number.js b/e2e/e2e-config/utils/build-number.js new file mode 100644 index 000000000..0b2cb9f57 --- /dev/null +++ b/e2e/e2e-config/utils/build-number.js @@ -0,0 +1,10 @@ +const buildNumber = () => { + let buildNumber = process.env.TRAVIS_BUILD_NUMBER; + if (!buildNumber) { + process.env.TRAVIS_BUILD_NUMBER = Date.now(); + } + + return process.env.TRAVIS_BUILD_NUMBER; +} + +module.exports = buildNumber; diff --git a/e2e/e2e-config/utils/upload-output.js b/e2e/e2e-config/utils/upload-output.js new file mode 100644 index 000000000..5c3eed1a8 --- /dev/null +++ b/e2e/e2e-config/utils/upload-output.js @@ -0,0 +1,69 @@ +const path = require('path'); +const fs = require('fs'); +const AlfrescoApi = require('@alfresco/js-api').AlfrescoApiCompatibility; +const buildNumber = require('./build-number'); +const configScreenshotsPath = path.join(`${path.resolve(__dirname)}/../../../e2e-output/report/screenshots/`); +const rimraf = require('rimraf'); + +uploadOutput = async function() { + + let alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: process.env.SCREENSHOT_URL }); + alfrescoJsApi.login(process.env.SCREENSHOT_USERNAME, process.env.SCREENSHOT_PASSWORD); + + await saveScreenshots(alfrescoJsApi); + + rimraf(configScreenshotsPath, function () { + console.log('done delete screenshot'); + }); +} + +async function saveScreenshots(alfrescoJsApi) { + let files = fs.readdirSync(configScreenshotsPath); + + if (files && files.length > 0) { + + let folder; + + try { + folder = await alfrescoJsApi.nodes.addNode('-my-', { + 'name': `screenshot`, + 'relativePath': `Builds/ACA-${buildNumber()}`, + 'nodeType': 'cm:folder' + }, {}, { + 'overwrite': true + }); + } catch (error) { + folder = await alfrescoJsApi.nodes.getNode('-my-', { + 'relativePath': `Builds/ACA-${buildNumber()}/screenshot`, + 'nodeType': 'cm:folder' + }, {}, { + 'overwrite': true + }); + } + + for (const fileName of files) { + let pathFile = path.join(configScreenshotsPath, 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); + } + } + } +}; + +module.exports = uploadOutput; diff --git a/protractor.conf.js b/protractor.conf.js index 10b922d18..4ab725d53 100755 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -1,9 +1,11 @@ // Protractor configuration file, see link for more information // https://github.com/angular/protractor/blob/master/lib/config.ts +const AlfrescoApi = require('@alfresco/js-api').AlfrescoApiCompatibility; const path = require('path'); const { SpecReporter } = require('jasmine-spec-reporter'); const CDP = require('chrome-remote-interface'); +const afterLaunch = require('./e2e/e2e-config/hooks/after-launch'); const fs = require('fs'); require('dotenv').config(); @@ -198,5 +200,6 @@ exports.config = { .catch(err => { console.log(err); }); - } + }, + afterLaunch };