skutter
Version:
Skutter: Opinionated BDD Browser based test framework
64 lines (63 loc) • 2.17 kB
JavaScript
"use strict";
const Lazy = require("lazy.js");
const result_types_1 = require("./result-types");
const step_statuses_1 = require("./step-statuses");
const step_result_1 = require("./step-result");
class ScenarioResult {
constructor(sourceScenario) {
this._skipped = false;
this.beginLog = [];
this.endLog = [];
this._scenario = sourceScenario;
this.steps = new Map();
this.stepIndex = 0;
for (let step of sourceScenario.steps) {
this.appendStep(step);
}
}
appendStep(sourceStep) {
this.steps.set(sourceStep.id, new step_result_1.StepResult(sourceStep, this.stepIndex++));
}
setSkipped() {
this._skipped = true;
}
findStepResult(id) {
return this.steps.get(id);
}
appendStartupLog(lines) {
this.beginLog.push(...lines);
}
appendTeardownLog(lines) {
this.endLog.push(...lines);
}
get result() {
if (this._skipped) {
return result_types_1.ResultTypes.Skipped;
}
if (this.steps.size === 0) {
throw new Error("Scenario appears to have no steps.");
}
let stepResults = [];
this.steps.forEach((value, key, map) => {
stepResults.push(value.result);
});
let results = Lazy(stepResults).uniq();
if (results.some((status) => { return status === step_statuses_1.StepStatuses.Errored; })) {
return result_types_1.ResultTypes.Errored;
}
if (results.some((status) => { return status === step_statuses_1.StepStatuses.Failed; })) {
return result_types_1.ResultTypes.Failed;
}
if (results.some((status) => { return status === step_statuses_1.StepStatuses.Pending; })) {
return result_types_1.ResultTypes.Errored;
}
if (results.some((status) => { return status === step_statuses_1.StepStatuses.Passed; })) {
return result_types_1.ResultTypes.Passed;
}
return result_types_1.ResultTypes.Skipped;
}
get scenario() {
return this._scenario;
}
}
exports.ScenarioResult = ScenarioResult;