feat: making request and response scripts work

This commit is contained in:
Anoop M D
2023-02-06 23:00:50 +05:30
parent 60c96f7d27
commit 22a14aa67a
15 changed files with 153 additions and 86 deletions

View File

@ -1,40 +1,10 @@
// Inbuilt Library Support
const atob = require('atob');
const btoa = require('btoa');
const _ = require('lodash');
const moment = require('moment');
const uuid = require('uuid');
const nanoid = require('nanoid');
const CryptoJS = require('crypto-js');
class Bru {
constructor(environment, collectionVariables) {
this._environment = environment;
this._collectionVariables = collectionVariables;
}
require(module) {
switch(module) {
case 'atob':
return atob;
case 'btoa':
return btoa;
case 'lodash':
return _;
case 'moment':
return moment;
case 'uuid':
return uuid;
case 'nanoid':
return nanoid;
case 'crypto-js':
return CryptoJS;
default:
throw new Error(`Module ${module} is not supported`);
}
}
getEnvVar(key) {
return this._environment[key];
}

View File

@ -35,11 +35,11 @@ class BrunoRequest {
this._request.headers[name] = value;
}
getData() {
getBody() {
return this._request.data;
}
setData(data) {
setBody(data) {
this._request.data = data;
}
}

View File

@ -1,6 +1,10 @@
class BrunoResponse {
constructor(response) {
this._response = response;
this.status = response.status;
this.statusText = response.statusText;
this.headers = response.headers;
this.body = response.data;
}
getStatus() {
@ -15,7 +19,7 @@ class BrunoResponse {
return this._response.headers;
}
getData() {
getBody() {
return this._response.data;
}
}

View File

@ -4,24 +4,42 @@ const Bru = require('./bru');
const BrunoRequest = require('./bruno-request');
const BrunoResponse = require('./bruno-response');
// Inbuilt Library Support
const atob = require('atob');
const btoa = require('btoa');
const lodash = require('lodash');
const moment = require('moment');
const uuid = require('uuid');
const nanoid = require('nanoid');
const CryptoJS = require('crypto-js');
class ScriptRuntime {
constructor() {
}
runRequestScript(script, request, environment, collectionVariables, collectionPath) {
const bru = new Bru(environment, collectionVariables);
const __brunoRequest = new BrunoRequest(request);
const $bru = new Bru(environment, collectionVariables);
const $req = new BrunoRequest(request);
const context = {
bru,
__brunoRequest
$bru,
$req
};
const vm = new NodeVM({
sandbox: context,
require: {
context: 'sandbox',
external: true,
root: [collectionPath]
root: [collectionPath],
mock: {
atob,
btoa,
lodash,
moment,
uuid,
nanoid,
'crypto-js': CryptoJS
}
}
});
@ -35,19 +53,28 @@ class ScriptRuntime {
}
runResponseScript(script, response, environment, collectionVariables, collectionPath) {
const bru = new Bru(environment, collectionVariables);
const __brunoResponse = new BrunoResponse(response);
const $bru = new Bru(environment, collectionVariables);
const $res = new BrunoResponse(response);
const context = {
bru,
__brunoResponse
$bru,
$res
};
const vm = new NodeVM({
sandbox: context,
require: {
context: 'sandbox',
external: true,
root: [collectionPath]
root: [collectionPath],
mock: {
atob,
btoa,
lodash,
moment,
uuid,
nanoid,
'crypto-js': CryptoJS
}
}
});

View File

@ -7,23 +7,32 @@ const BrunoResponse = require('./bruno-response');
const Test = require('./test');
const TestResults = require('./test-results');
// Inbuilt Library Support
const atob = require('atob');
const btoa = require('btoa');
const lodash = require('lodash');
const moment = require('moment');
const uuid = require('uuid');
const nanoid = require('nanoid');
const CryptoJS = require('crypto-js');
class TestRuntime {
constructor() {
}
runTests(testsFile, request, response, environment, collectionVariables, collectionPath) {
const bru = new Bru(environment, collectionVariables);
const req = new BrunoRequest(request);
const res = new BrunoResponse(response);
const $bru = new Bru(environment, collectionVariables);
const $req = new BrunoRequest(request);
const $res = new BrunoResponse(response);
const __brunoTestResults = new TestResults();
const test = Test(__brunoTestResults, chai);
const context = {
bru,
req,
res,
test,
$bru,
$req,
$res,
expect: chai.expect,
assert: chai.assert,
__brunoTestResults: __brunoTestResults
@ -34,7 +43,16 @@ class TestRuntime {
require: {
context: 'sandbox',
external: true,
root: [collectionPath]
root: [collectionPath],
mock: {
atob,
btoa,
lodash,
moment,
uuid,
nanoid,
'crypto-js': CryptoJS
}
}
});