cucumber-html-report-generator
Version:
Generate beautiful cucumberjs html reports for multiple instances (browsers / devices)
151 lines • 8.59 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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeatureFormatter = void 0;
const CommonFunctions = __importStar(require("../../common-functions/common-functions"));
const Models = __importStar(require("../../models/models"));
const scenario_formatter_1 = require("./scenario-formatter");
class FeatureFormatter {
constructor(gherkinFeature, jsonFeature) {
this.gherkinFeature = gherkinFeature;
this.jsonFeature = jsonFeature;
this.scenarioFormatter = new scenario_formatter_1.ScenarioFormatter(this.gherkinFeature);
this.scenarioOutlines = this.getOutlineScenarios();
}
parseFeature() {
this.initializeFeature();
if (this.jsonFeature.elements?.length) {
this.joinOutlineScenarios();
for (let index = 0; index < this.jsonFeature.elements.length; index++) {
const jsonScenario = this.scenarioFormatter.parseScenario(this.jsonFeature.elements[index], this.jsonFeature.name);
if (jsonScenario !== null && typeof jsonScenario !== 'undefined') {
this.jsonFeature.elements[index] = jsonScenario;
this.updateFeatureStatistics(this.jsonFeature.elements[index]?.results);
const gherkinScenario = this.gherkinFeature?.children.filter(scenario => scenario.scenario?.name === jsonScenario.name)[0]?.scenario;
if (this.isLastScenarioOutlineWithFeature(jsonScenario, index) && gherkinScenario) {
const scenarios = this.addFirstScenarioOutline(this.jsonFeature.elements, jsonScenario, index, gherkinScenario);
this.jsonFeature.elements = scenarios;
index++;
}
}
}
this.jsonFeature.results.overview.durationHHMMSS =
CommonFunctions.convertTimeFromNanoSecondsToHHMMSS(this.jsonFeature.results.overview.duration);
this.jsonFeature.elements = this.jsonFeature.elements.filter(scenario => Object.keys(scenario).length && scenario.steps?.length);
}
return this.jsonFeature;
}
addFirstScenarioOutline(scenarios, jsonScenario, index, gherkinScenario) {
const scenarioName = jsonScenario.name;
const scenarioOutlineLengthWithoutHeaders = this.scenarioOutlines.filter(scenario => scenario.name === scenarioName).length - 1;
const scenarioOutline = this.scenarioFormatter.createNewFirstScenarioOutline(jsonScenario, gherkinScenario, scenarios, index - scenarioOutlineLengthWithoutHeaders);
scenarios.splice(index - scenarioOutlineLengthWithoutHeaders, 0, scenarioOutline);
return scenarios;
}
updateFeatureStatistics(scenarioResults) {
this.jsonFeature.results.scenarios.undefined += scenarioResults.steps.undefined ? 1 : 0;
this.jsonFeature.results.scenarios.failed += !scenarioResults.steps.undefined && scenarioResults.steps.failed ? 1 : 0;
this.jsonFeature.results.scenarios.ambiguous += scenarioResults.steps.ambiguous &&
!scenarioResults.steps.undefined &&
!scenarioResults.steps.failed ? 1 : 0;
this.jsonFeature.results.scenarios.pending += scenarioResults.steps.pending &&
!scenarioResults.steps.failed &&
!scenarioResults.steps.ambiguous &&
!scenarioResults.steps.undefined ? 1 : 0;
this.jsonFeature.results.scenarios.skipped += scenarioResults.steps.skipped &&
!scenarioResults.steps.failed &&
!scenarioResults.steps.ambiguous &&
!scenarioResults.steps.pending &&
!scenarioResults.steps.undefined ? 1 : 0;
this.jsonFeature.results.scenarios.passed +=
scenarioResults.steps.passed &&
!scenarioResults.steps.failed &&
!scenarioResults.steps.skipped &&
!scenarioResults.steps.pending &&
!scenarioResults.steps.ambiguous &&
!scenarioResults.steps.undefined ? 1 : 0;
this.jsonFeature.results.scenarios.total =
this.jsonFeature.results.scenarios.passed +
this.jsonFeature.results.scenarios.skipped +
this.jsonFeature.results.scenarios.pending +
this.jsonFeature.results.scenarios.undefined +
this.jsonFeature.results.scenarios.ambiguous +
this.jsonFeature.results.scenarios.failed;
this.jsonFeature.results.scenarios = CommonFunctions.updatePercentages(this.jsonFeature.results.scenarios);
this.jsonFeature.results.steps = CommonFunctions.updateResultsAndPercentages(this.jsonFeature.results.steps, scenarioResults.steps);
this.jsonFeature.results.overview.result = CommonFunctions.updateStatus(this.jsonFeature.results);
this.jsonFeature.results.overview.duration += scenarioResults.overview.duration;
}
initializeFeature() {
this.jsonFeature.description = typeof this.jsonFeature.description === 'undefined' ? '' : this.jsonFeature.description;
this.jsonFeature.elements = this.jsonFeature.elements === null || typeof this.jsonFeature.elements === 'undefined' ? [] : this.jsonFeature.elements;
this.jsonFeature.results = Models.featureResultsInitializer();
this.jsonFeature.tags = typeof this.jsonFeature.tags === 'undefined' ? [] : this.jsonFeature.tags;
this.jsonFeature.metadataTitle = this.jsonFeature.metadataTitle ?? 'Custom Data';
this.jsonFeature.metadata = CommonFunctions.isMetadata(this.jsonFeature.metadata) ? this.jsonFeature.metadata : [];
this.jsonFeature.line = this.jsonFeature.line ?? 0;
this.joinOutlineScenarios();
}
joinOutlineScenarios() {
const scenarioOutlines = [];
this.jsonFeature.elements?.forEach(scenario => {
if (this.scenarioFormatter.isOutlineScenario(scenario)) {
scenarioOutlines.push({
index: parseInt(`${(this.jsonFeature.elements).indexOf(scenario)}`, 10),
name: `${scenario.name}`
});
}
});
const scenarioOutlineNames = [...new Set(scenarioOutlines.map(item => item.name))];
scenarioOutlineNames.forEach(name => {
const scenarioOutlineElements = scenarioOutlines.filter(scenario => scenario.name === name);
const firstScenarioIndex = scenarioOutlineElements[0].index;
scenarioOutlineElements.forEach((scenarioOutlineElement, index) => {
CommonFunctions.moveArray(this.jsonFeature.elements, scenarioOutlineElement.index, firstScenarioIndex + index);
});
});
}
isLastScenarioOutlineWithFeature(scenario, index) {
const occurrences = this.scenarioOutlines.filter(scenarioElement => scenarioElement.name === scenario.name);
if (occurrences[occurrences.length - 1]?.index === index) {
return true;
}
return false;
}
getOutlineScenarios() {
const scenarioOutlines = [];
this.jsonFeature.elements?.forEach(scenario => {
if (this.scenarioFormatter.isOutlineScenario(scenario)) {
scenarioOutlines.push({
index: parseInt(`${(this.jsonFeature.elements).indexOf(scenario)}`, 10),
name: `${scenario.name}`
});
}
});
return scenarioOutlines;
}
}
exports.FeatureFormatter = FeatureFormatter;
//# sourceMappingURL=feature-formatter.js.map