Simon Priet e69a613a37 feat: Created a mini nodeJS server with NewMan for testing without PostMan GUI.
This will mimic a run in a CD/CI environment or docker container.
2021-09-08 14:01:19 +02:00

86 lines
2.9 KiB
JavaScript

const _ = require('lodash'),
sdk = require('postman-collection'),
PROPERTY = {
REQUEST: 'request',
SCRIPT: 'script',
DATA: 'data',
COOKIES: 'cookies',
RESPONSE: 'response'
},
TARGETS_WITH_REQUEST = {
test: true,
prerequest: true
},
TARGETS_WITH_RESPONSE = {
test: true
},
CONTEXT_VARIABLE_SCOPES = ['_variables', 'environment', 'collectionVariables', 'globals'],
trackingOptions = { autoCompact: true };
class Execution {
constructor (id, event, context, options) {
this.id = id;
this.target = event.listen || PROPERTY.SCRIPT;
this.legacy = options.legacy || {};
this.cursor = _.isObject(options.cursor) ? options.cursor : {};
this.data = _.get(context, PROPERTY.DATA, {});
this.cookies = new sdk.CookieList(null, context.cookies);
CONTEXT_VARIABLE_SCOPES.forEach((variableScope) => {
// normalize variable scope instances
this[variableScope] = sdk.VariableScope.isVariableScope(context[variableScope]) ?
context[variableScope] : new sdk.VariableScope(context[variableScope]);
// enable change tracking
this[variableScope].enableTracking(trackingOptions);
});
if (TARGETS_WITH_REQUEST[this.target] || _.has(context, PROPERTY.REQUEST)) {
/**
* @note:
* this reference is passed on as `pm.request`, pm api adds helper functions like `to` to `pm.request`
* sandbox overrides collection Request.prototype.toJSON to remove helpers before toJSON, see `purse.js`
*/
this.request = sdk.Request.isRequest(context.request) ? context.request : new sdk.Request(context.request);
}
if (TARGETS_WITH_RESPONSE[this.target] || _.has(context, PROPERTY.RESPONSE)) {
/**
* @note:
* this reference is passed on as `pm.response`, pm api adds helper functions like `to` to `pm.response`
* sandbox overrides collection Response.prototype.toJSON to remove helpers before toJSON, see `purse.js`
*/
this.response = sdk.Response.isResponse(context.response) ?
context.response : new sdk.Response(context.response);
}
/**
* @typedef {Object} Return
*
* @property {Boolean} async - true if the executed script was async, false otherwise
* @property {Visualizer} visualizer - visualizer data
* @property {*} nextRequest - next request to send
*/
this.return = {};
}
toJSON () {
return _.mapValues(this, function (value) {
// if there is no specific json serialiser, return the raw value
if (!_.isFunction(value && value.toJSON)) {
return value;
}
return value.toJSON();
});
}
}
module.exports = Execution;