cucumber-html-report-generator
Version:
Generate beautiful cucumberjs html reports for multiple instances (browsers / devices)
221 lines • 10.4 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const CommonFunctions = __importStar(require("../../src/lib/common-functions/common-functions"));
const fs = __importStar(require("fs"));
const fse = __importStar(require("fs-extra"));
const generateReport = __importStar(require("../../src/lib/generate-report/generate-report"));
const os = __importStar(require("os"));
const path = __importStar(require("path"));
const chai_1 = require("chai");
const chai_fs_1 = __importDefault(require("chai-fs"));
const axios_1 = __importDefault(require("axios"));
const sinon_1 = __importDefault(require("sinon"));
(0, chai_1.use)(chai_fs_1.default);
const readDirAsync = fs.promises.readdir;
const statAsync = fs.promises.stat;
describe('GenerateReport.ts', () => {
const getReportPathInTempFolder = async () => {
const tempDir = path.join(os.tmpdir(), 'cucumber-html-report-generator/');
const foldersInTempDir = await readDirAsync(tempDir);
const stats = await Promise.all(foldersInTempDir.map(async (folder) => {
const stat = await statAsync(path.join(tempDir, folder));
return { folder: tempDir + folder, stat };
}));
return stats.sort((firstStats, secondStats) => secondStats.stat.mtime.getTime() - firstStats.stat.mtime.getTime())[0].folder;
};
describe('Happy flows', () => {
it('should create a report from the merged json files with metadata', async () => {
// Given
const reportPath = `${path.resolve('./')}/.tmp/unit/report01`;
await CommonFunctions.emptyFolder(reportPath);
const featuresFolder = path.resolve(reportPath, 'features/');
await fse.mkdir(featuresFolder);
const options = {
openReportInBrowser: false,
reportPath,
showExecutionTime: true,
customStyle: `${path.resolve('./')}/src/resources/templates/css/style-dark-theme.css`,
useCDN: false,
featuresFolder: `${path.resolve('./')}/test/unit/data/features/correct/`,
jsonDir: `${path.resolve('./')}/test/unit/data/cucumber-report-jsons/`,
saveCollectedJSON: true,
saveEnrichedJSON: true,
saveReportInMongoDb: false,
reportMetadataTitle: 'Additional Data',
reportMetadata: [
{ name: 'Project', value: 'custom project' },
{ name: 'Release', value: '1.2.3' },
{ name: 'Cycle', value: '2' },
{ name: 'Execution Start Date', value: '2021-03-26 14:01' },
{ name: 'Execution End Date', value: '2021-03-26 16:05' }
]
};
// When
await generateReport.generate(options);
// Then
(0, chai_1.expect)(await fse.pathExists(path.join(reportPath, 'index.html'))).to.equal(true);
(0, chai_1.expect)(await fse.pathExists(path.join(reportPath, 'merged-output.json'))).to.equal(true);
(0, chai_1.expect)(await fse.pathExists(path.join(reportPath, 'enriched-output.json'))).to.equal(true);
});
it('should create a report from the merged json files without metadata', async () => {
// Given
const options = {
disableLog: true,
navigateToFeatureIfThereIsOnlyOne: true,
showExecutionTime: false,
overrideStyle: `${path.resolve('./')}/src/resources/templates/css/style-dark-theme.css`,
theme: 'Light',
useCDN: true,
saveEnrichedJSON: false,
jsonDir: `${path.resolve('./')}/test/unit/data/no-metadata-jsons`
};
// When
await generateReport.generate(options);
// Then
const reportPath = await getReportPathInTempFolder();
(0, chai_1.expect)((path.join(reportPath, 'index.html'))).to.be.a.file();
sinon_1.default.restore();
});
it('should create a report from a json file without parameters', async () => {
// Given
const jsonFile = path.resolve(path.resolve('./'), './test/unit/data/enriched-joined-cucumber-jsons/enriched-output1.json');
const reportSaved = (await CommonFunctions.readJsonFile(jsonFile));
// When
await generateReport.generateHtmlReport(undefined, reportSaved);
// Then
const reportPath = await getReportPathInTempFolder();
(0, chai_1.expect)((path.join(reportPath, 'index.html'))).to.be.a.file();
});
it('should call to insertReport api', async () => {
// Given
const options = {
disableLog: true,
navigateToFeatureIfThereIsOnlyOne: false,
openReportInBrowser: false,
showExecutionTime: false,
reportTitle: 'New report',
theme: 'Light',
useCDN: true,
saveEnrichedJSON: false,
saveReportInMongoDb: true,
mongooseServerUrl: 'http://localhost:3000',
jsonDir: `${path.resolve('./')}/test/unit/data/cucumber-report-jsons`
};
// When
const spy = sinon_1.default.stub(axios_1.default, 'request').resolves(Promise.resolve({ data: { reportId: '609c40e971b5b53a1965cec1' } }));
await generateReport.generate(options);
// Then
(0, chai_1.expect)(spy.called);
(0, chai_1.expect)(await generateReport.generate(options)).equal('609c40e971b5b53a1965cec1');
sinon_1.default.restore();
});
});
describe('failures', () => {
it('should throw an error when no options are provided', async () => {
// Given
const options = null;
// When
await generateReport.generate(options).catch((error) => {
// Then
(0, chai_1.expect)(error.message).to.equal('Options need to be provided.');
});
});
it('should throw an error when the json dir si not provided', async () => {
// Given
const reportPath = `${path.resolve('./')}/.tmp/unit/reports/report02/`;
const options = {
reportPath,
jsonDir: '',
reportMetadata: [
{ name: 'browser', value: 'chrome 81' }
],
saveEnrichedJSON: false,
saveReportInMongoDb: true
};
// When
await generateReport.generate(options).catch((error) => {
// Then
(0, chai_1.expect)(error.message).to.equal(`The path provided: '${options.jsonDir}' is invalid`);
});
});
it('should throw an error when the report folder is invalid', async () => {
// Given
const reportPath = '/home/user1/test/test2';
const options = {
disableLog: true,
navigateToFeatureIfThereIsOnlyOne: false,
reportPath,
jsonDir: `${path.resolve('./')}/test/unit/data/cucumber-report-jsons`,
reportMetadata: [
{ name: 'browser', value: 'chrome 81' }
],
};
// When
await generateReport.generate(options).catch((error) => {
// Then
(0, chai_1.expect)(error.message).to.equal(`The path provided: '${options.reportPath}' is invalid`);
});
});
it('should throw an error when the features folder is invalid', async () => {
// Given
const featuresFolder = '/home/user1/test/test2';
const options = {
disableLog: true,
navigateToFeatureIfThereIsOnlyOne: false,
featuresFolder,
jsonDir: `${path.resolve('./')}/test/unit/data/cucumber-report-jsons`,
reportMetadata: [
{ name: 'browser', value: 'chrome 81' }
],
};
// When
await generateReport.generate(options).catch((error) => {
// Then
(0, chai_1.expect)(error.message).to.equal(`The path provided: '${options.featuresFolder}' is invalid`);
});
});
it('should throw an error when the json folder does not exist', async () => {
// Given
const options = {
disableLog: true,
navigateToFeatureIfThereIsOnlyOne: false,
jsonDir: './invalid-folder',
reportMetadata: [
{ name: 'browser', value: 'chrome 81' }
],
};
// When
await generateReport.generate(options).catch((error) => {
// Then
(0, chai_1.expect)(error.message).to.equal(`The path provided: '${options.jsonDir}' is invalid`);
});
});
});
});
//# sourceMappingURL=generate-report-spec.js.map