feat: request vars, bru.getRequestVar function (#2541)

This commit is contained in:
lohit
2024-07-01 14:15:25 +05:30
committed by GitHub
parent 45ff36d394
commit c895d7f357
9 changed files with 35 additions and 26 deletions

View File

@ -4,10 +4,11 @@ const { interpolate } = require('@usebruno/common');
const variableNameRegex = /^[\w-.]*$/;
class Bru {
constructor(envVariables, collectionVariables, processEnvVars, collectionPath) {
constructor(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables) {
this.envVariables = envVariables || {};
this.collectionVariables = collectionVariables || {};
this.processEnvVars = cloneDeep(processEnvVars || {});
this.requestVariables = requestVariables || {};
this.collectionPath = collectionPath;
}
@ -18,6 +19,7 @@ class Bru {
const combinedVars = {
...this.envVariables,
...this.requestVariables,
...this.collectionVariables,
process: {
env: {
@ -79,6 +81,10 @@ class Bru {
return this._interpolate(this.collectionVariables[key]);
}
getRequestVar(key) {
return this._interpolate(this.requestVariables[key]);
}
setNextRequest(nextRequest) {
this.nextRequest = nextRequest;
}

View File

@ -1,12 +1,16 @@
const { interpolate } = require('@usebruno/common');
const interpolateString = (str, { envVariables = {}, collectionVariables = {}, processEnvVars = {} }) => {
const interpolateString = (
str,
{ envVariables = {}, collectionVariables = {}, processEnvVars = {}, requestVariables = {} }
) => {
if (!str || !str.length || typeof str !== 'string') {
return str;
}
const combinedVars = {
...envVariables,
...requestVariables,
...collectionVariables,
process: {
env: {

View File

@ -167,6 +167,7 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => {
}
const interpolationContext = {
requestVariables: context.bru.requestVariables,
collectionVariables: context.bru.collectionVariables,
envVariables: context.bru.envVariables,
processEnvVars: context.bru.processEnvVars
@ -204,12 +205,13 @@ const evaluateRhsOperand = (rhsOperand, operator, context) => {
class AssertRuntime {
runAssertions(assertions, request, response, envVariables, collectionVariables, processEnvVars) {
const requestVariables = request?.requestVariables || {};
const enabledAssertions = _.filter(assertions, (a) => a.enabled);
if (!enabledAssertions.length) {
return [];
}
const bru = new Bru(envVariables, collectionVariables, processEnvVars);
const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables);
const req = new BrunoRequest(request);
const res = createResponseParser(response);
@ -221,6 +223,7 @@ class AssertRuntime {
const context = {
...envVariables,
...requestVariables,
...collectionVariables,
...processEnvVars,
...bruContext

View File

@ -44,7 +44,8 @@ class ScriptRuntime {
processEnvVars,
scriptingConfig
) {
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
const requestVariables = request?.requestVariables || {};
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
const req = new BrunoRequest(request);
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
@ -141,7 +142,8 @@ class ScriptRuntime {
processEnvVars,
scriptingConfig
) {
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
const requestVariables = request?.requestVariables || {};
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
const req = new BrunoRequest(request);
const res = new BrunoResponse(response);
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);

View File

@ -45,7 +45,8 @@ class TestRuntime {
processEnvVars,
scriptingConfig
) {
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath);
const requestVariables = request?.requestVariables || {};
const bru = new Bru(envVariables, collectionVariables, processEnvVars, collectionPath, requestVariables);
const req = new BrunoRequest(request);
const res = new BrunoResponse(response);
const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);

View File

@ -5,6 +5,9 @@ const { evaluateJsTemplateLiteral, evaluateJsExpression, createResponseParser }
class VarsRuntime {
runPreRequestVars(vars, request, envVariables, collectionVariables, collectionPath, processEnvVars) {
if (!request?.requestVariables) {
request.requestVariables = {};
}
const enabledVars = _.filter(vars, (v) => v.enabled);
if (!enabledVars.length) {
return;
@ -26,21 +29,18 @@ class VarsRuntime {
_.each(enabledVars, (v) => {
const value = evaluateJsTemplateLiteral(v.value, context);
bru.setVar(v.name, value);
request?.requestVariables && (request.requestVariables[v.name] = value);
});
return {
collectionVariables
};
}
runPostResponseVars(vars, request, response, envVariables, collectionVariables, collectionPath, processEnvVars) {
const requestVariables = request?.requestVariables || {};
const enabledVars = _.filter(vars, (v) => v.enabled);
if (!enabledVars.length) {
return;
}
const bru = new Bru(envVariables, collectionVariables, processEnvVars);
const bru = new Bru(envVariables, collectionVariables, processEnvVars, undefined, requestVariables);
const req = new BrunoRequest(request);
const res = createResponseParser(response);