enqueuer-cucumber
Version:
Plugin to implement cucumber steps as enqueuer requisitions
229 lines • 10.3 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.EnqueuerData = void 0;
var debug_1 = __importDefault(require("debug"));
var _ = __importStar(require("lodash"));
var enqueuer_1 = require("enqueuer");
var requisition_file_pattern_parser_1 = require("enqueuer/js/requisition-runners/requisition-file-pattern-parser");
var cucumber_expressions_1 = require("./cucumber-expressions");
var EnqueuerData = /** @class */ (function () {
function EnqueuerData() {
this.debugger = {
build: debug_1.default('EnqueuerCucumber:EnqueuerData:Build'),
runtime: debug_1.default('EnqueuerCucumber:EnqueuerData')
};
this.requisitionsCache = new Map();
this.publishersCache = new Map();
this.subscriptionsCache = new Map();
this.groupsCache = new Map();
this.cucumberMatcher = new cucumber_expressions_1.CucumberMatcher();
}
EnqueuerData.prototype.initEnqueuer = function () {
this.debugger.build('Initializing enqueuer');
var configuration = enqueuer_1.Configuration.getInstance();
this.requisitionFileParser = new requisition_file_pattern_parser_1.RequisitionFilePatternParser(configuration.getFiles());
var enqueuerRequisitions = this.requisitionFileParser.parse();
this.debugger.build('Enqueuer Requisitions loaded: %J', enqueuerRequisitions);
this.debugger.build('Building cache for enqueuer requisitions');
this.buildRequisitionsCache(enqueuerRequisitions);
if (this.debugger.build.enabled) {
this.debugger.build('Requisitions cache ready: %J', Array.from(this.requisitionsCache.keys()));
this.debugger.build('Publishers cache ready: %J', Array.from(this.publishersCache.keys()));
this.debugger.build('Subscriptions cache ready: %J', Array.from(this.subscriptionsCache.keys()));
this.debugger.build('Groups cache ready: %J', Array.from(this.groupsCache.keys()));
}
};
EnqueuerData.prototype.getRequisitions = function () {
return Array.from(this.requisitionsCache.values());
};
EnqueuerData.prototype.getRequisitionNames = function () {
return Array.from(this.requisitionsCache.keys());
};
EnqueuerData.prototype.getPublishers = function () {
return Array.from(this.publishersCache.values());
};
EnqueuerData.prototype.getPublisherNames = function () {
return Array.from(this.publishersCache.keys());
};
EnqueuerData.prototype.getSubscriptions = function () {
return Array.from(this.subscriptionsCache.values());
};
EnqueuerData.prototype.getSubscriptionNames = function () {
return Array.from(this.subscriptionsCache.keys());
};
EnqueuerData.prototype.getGroups = function () {
return Array.from(this.groupsCache.values());
};
EnqueuerData.prototype.getGroupNames = function () {
return Array.from(this.groupsCache.keys());
};
EnqueuerData.prototype.getRequisitionStep = function (name, createIfNotExist) {
this.debugger.runtime('Searching for a matching requisition step for <<%s>>', name);
var result = {};
result.step = this.cloneStep(this.requisitionsCache.get(name));
if (!result.step) {
for (var _i = 0, _a = this.getRequisitionNames(); _i < _a.length; _i++) {
var reqName = _a[_i];
var values = this.cucumberMatcher.match(reqName, name);
if (values && values.length) {
var requisition = this.requisitionsCache.get(reqName);
if (requisition.variables && requisition.variables.length >= values.length) {
result.step = _.chain(requisition)
.omit('publishers', 'subscriptions', 'requisitions', 'groups')
.clone()
.value();
this.mergeStepVariables(result, values);
}
}
}
}
if (result.step) {
result.step.publishers = [];
result.step.subscriptions = [];
result.step.requisitions = [];
delete result.step.groups;
}
else if (createIfNotExist) {
result.step = this.getDefaultRequisition(name);
}
if (result.step) {
this.debugger.runtime('Requisition Step for <<%s>>: %J', name, result);
}
return result;
};
EnqueuerData.prototype.getPublisherStep = function (name) {
this.debugger.runtime('Searching for a matching publisher step for <<%s>>', name);
var result = {};
result.step = this.cloneStep(this.publishersCache.get(name));
if (!result.step) {
for (var _i = 0, _a = this.getPublisherNames(); _i < _a.length; _i++) {
var pubName = _a[_i];
var values = this.cucumberMatcher.match(pubName, name);
if (values && values.length) {
var publisher = this.publishersCache.get(pubName);
if (publisher.variables && publisher.variables.length >= values.length) {
result.step = _.clone(publisher);
this.mergeStepVariables(result, values);
}
}
}
}
if (result.step) {
this.debugger.runtime('Publisher Step for <<%s>>: %J', name, result);
}
return result;
};
EnqueuerData.prototype.getSubscriptionStep = function (name) {
this.debugger.runtime('Searching for a matching subscription step for <<%s>>', name);
var result = {};
result.step = this.cloneStep(this.subscriptionsCache.get(name));
if (!result.step) {
for (var _i = 0, _a = this.getSubscriptionNames(); _i < _a.length; _i++) {
var subName = _a[_i];
var values = this.cucumberMatcher.match(subName, name);
if (values && values.length) {
var subscription = this.subscriptionsCache.get(subName);
if (subscription.variables && subscription.variables.length >= values.length) {
result.step = _.clone(subscription);
this.mergeStepVariables(result, values);
}
}
}
}
if (result.step) {
this.debugger.runtime('Subscription Step for <<%s>>: %J', name, result);
}
return result;
};
EnqueuerData.prototype.getGroupStep = function (name) {
this.debugger.runtime('Searching for a matching group step for <<%s>>', name);
var result = {};
result.step = this.cloneStep(this.groupsCache.get(name));
if (!result.step) {
for (var _i = 0, _a = this.getGroupNames(); _i < _a.length; _i++) {
var groupName = _a[_i];
var values = this.cucumberMatcher.match(groupName, name);
if (values && values.length) {
var group = this.groupsCache.get(groupName);
if (group.variables && group.variables.length >= values.length) {
result.step = _.clone(group);
this.mergeStepVariables(result, values);
}
}
}
}
if (result.step) {
this.debugger.runtime('Group Step for <<%s>>: %J', name, result);
}
return result;
};
EnqueuerData.prototype.getDefaultRequisition = function (name) {
return _.clone({
name: name,
publishers: [],
requisitions: [],
subscriptions: []
});
};
EnqueuerData.prototype.mergeStepVariables = function (result, values) {
result.variables = {};
values.forEach(function (value, index) {
result.variables[result.step.variables[index]] = value;
});
};
EnqueuerData.prototype.buildRequisitionsCache = function (requisitions) {
var _this = this;
requisitions.forEach(function (requisition) {
_this.requisitionsCache.set(requisition.name, requisition);
if (requisition.publishers) {
requisition.publishers.forEach(function (publisher) {
_this.publishersCache.set(publisher.name, publisher);
});
}
if (requisition.subscriptions) {
requisition.subscriptions.forEach(function (subscription) {
_this.subscriptionsCache.set(subscription.name, subscription);
});
}
if (requisition.groups) {
requisition.groups.forEach(function (group) {
_this.groupsCache.set(group.name, group);
});
}
if (requisition.requisitions) {
_this.buildRequisitionsCache(requisition.requisitions);
}
});
};
EnqueuerData.prototype.cloneStep = function (step) {
if (step) {
return _.clone(step);
}
return null;
};
return EnqueuerData;
}());
exports.EnqueuerData = EnqueuerData;
//# sourceMappingURL=enqueuer-data.js.map