enqueuer-cucumber
Version:
Plugin to implement cucumber steps as enqueuer requisitions
173 lines • 8.07 kB
JavaScript
'use strict';
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (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 });
exports.CucumberStepsBuilder = void 0;
var assert = require("assert");
var cucumber_1 = require("@cucumber/cucumber");
var _ = __importStar(require("lodash"));
var debug_1 = __importDefault(require("debug"));
var CucumberStepsBuilder = /** @class */ (function () {
function CucumberStepsBuilder() {
this.debugger = {
build: debug_1.default('EnqueuerCucumber:Steps:Build'),
runtime: debug_1.default('EnqueuerCucumber:Steps')
};
}
CucumberStepsBuilder.prototype.createGivenStep = function (requisition) {
var self = this;
this.debugger.build('Creating Given Step for requisition <<%s>>', requisition.name);
cucumber_1.Given(requisition.name, this.createCucumberHook(requisition, function () {
self.checkRequisitionExecution(this.testReport, requisition);
}));
};
CucumberStepsBuilder.prototype.createWhenStep = function (publisher) {
var self = this;
this.debugger.build('Creating When Step for publisher <<%s>>', publisher.name);
cucumber_1.When(publisher.name, this.createCucumberHook(publisher, function () {
self.checkPublisherExecution(this.testReport, publisher);
}));
};
CucumberStepsBuilder.prototype.createThenStep = function (subscription) {
var self = this;
this.debugger.build('Creating Then Step for subscription <<%s>>', subscription.name);
cucumber_1.Then(subscription.name, this.createCucumberHook(subscription, function () {
self.checkSubscriptionExecution(this.testReport, subscription);
}));
};
CucumberStepsBuilder.prototype.createGroupStep = function (group) {
var step = this.getCucumberStepFunction(group.step);
var self = this;
this.debugger.build('Creating <<%s>> Step for group <<%s>>', group.step, group.name);
step(group.name, this.createCucumberHook(group, function () {
var _this = this;
if (group.subscriptions) {
group.subscriptions.forEach(function (subscription) { return self.checkSubscriptionExecution(_this.testReport, subscription); });
}
if (group.publishers) {
group.publishers.forEach(function (publisher) { return self.checkPublisherExecution(_this.testReport, publisher); });
}
if (group.requisitions) {
group.requisitions.forEach(function (requisition) { return self.checkRequisitionExecution(_this.testReport, requisition); });
}
}));
};
CucumberStepsBuilder.prototype.checkRequisitionExecution = function (testReport, requisition) {
var requisitionReport = this.findRequisitionReport(testReport, requisition.name);
this.checkTests(requisition, requisitionReport);
};
CucumberStepsBuilder.prototype.checkSubscriptionExecution = function (testReport, subscription) {
var subscriptionReport = this.findSubscriptionReport(testReport, subscription.name);
this.checkTests(subscription, subscriptionReport);
};
CucumberStepsBuilder.prototype.checkPublisherExecution = function (testReport, publisher) {
var publisherReport = this.findPublisherReport(testReport, publisher.name);
this.checkTests(publisher, publisherReport);
};
CucumberStepsBuilder.prototype.checkTests = function (step, testReport) {
this.debugger.runtime('Enqueuer report for <<%s>>: %J', step.name, testReport);
if (testReport && testReport.hooks) {
_.values(testReport.hooks).forEach(function (hook) {
hook.tests.forEach(function (test) {
assert(test.valid, test.description);
});
});
}
};
CucumberStepsBuilder.prototype.getCucumberStepFunction = function (name) {
if (name) {
if (name.toLowerCase() === 'then') {
return cucumber_1.Then;
}
if (name.toLowerCase() === 'when') {
return cucumber_1.When;
}
if (name.toLowerCase() === 'given') {
return cucumber_1.Given;
}
}
return cucumber_1.Then;
};
CucumberStepsBuilder.prototype.findSubscriptionReport = function (requisitions, name) {
if (!requisitions) {
return null;
}
var subscriptionReport = null;
for (var _i = 0, requisitions_1 = requisitions; _i < requisitions_1.length; _i++) {
var requisition = requisitions_1[_i];
var subscriptions = requisition.subscriptions || [];
subscriptionReport = subscriptions.find(function (sub) { return name === sub.name; });
if (subscriptionReport) {
return subscriptionReport;
}
subscriptionReport = this.findSubscriptionReport(requisition.requisitions, name);
if (subscriptionReport) {
return subscriptionReport;
}
}
return subscriptionReport;
};
CucumberStepsBuilder.prototype.findPublisherReport = function (requisitions, name) {
if (!requisitions) {
return null;
}
var publisherReport = null;
for (var _i = 0, requisitions_2 = requisitions; _i < requisitions_2.length; _i++) {
var requisition = requisitions_2[_i];
var publishers = requisition.publishers || [];
publisherReport = publishers.find(function (pub) { return name === pub.name; });
if (publisherReport) {
return publisherReport;
}
publisherReport = this.findPublisherReport(requisition.requisitions, name);
if (publisherReport) {
return publisherReport;
}
}
return publisherReport;
};
CucumberStepsBuilder.prototype.findRequisitionReport = function (requisitions, name) {
if (!requisitions) {
return null;
}
var requisitionReport = requisitions.find(function (req) { return name === req.name; });
if (!requisitionReport) {
for (var _i = 0, requisitions_3 = requisitions; _i < requisitions_3.length; _i++) {
var requisition = requisitions_3[_i];
requisitionReport = this.findRequisitionReport(requisition.requisitions, name);
if (requisitionReport) {
return requisitionReport;
}
}
}
return requisitionReport;
};
CucumberStepsBuilder.prototype.createCucumberHook = function (step, stepDefinition) {
var params = (step.variables || []).join(',');
// tslint:disable-next-line:no-eval
return eval("(function(){ return function(" + params + ") {return stepDefinition.apply(this);}})();");
};
return CucumberStepsBuilder;
}());
exports.CucumberStepsBuilder = CucumberStepsBuilder;
//# sourceMappingURL=cucumber-steps.js.map