diff --git a/packages/bruno-app/src/components/CodeEditor/index.js b/packages/bruno-app/src/components/CodeEditor/index.js index 168a3b02be..09dea4363d 100644 --- a/packages/bruno-app/src/components/CodeEditor/index.js +++ b/packages/bruno-app/src/components/CodeEditor/index.js @@ -56,6 +56,7 @@ if (!SERVER_RENDERED) { 'req.getTimeout()', 'req.setTimeout(timeout)', 'req.getExecutionMode()', + 'req.getName()', 'bru', 'bru.cwd()', 'bru.getEnvName()', @@ -80,7 +81,8 @@ if (!SERVER_RENDERED) { 'bru.runner', 'bru.runner.setNextRequest(requestName)', 'bru.runner.skipRequest()', - 'bru.runner.stopExecution()' + 'bru.runner.stopExecution()', + 'bru.getCollectionName()' ]; CodeMirror.registerHelper('hint', 'brunoJS', (editor, options) => { const cursor = editor.getCursor(); diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js index 67bda80216..fa83c30e37 100644 --- a/packages/bruno-cli/src/runner/run-single-request.js +++ b/packages/bruno-cli/src/runner/run-single-request.js @@ -52,6 +52,8 @@ const runSingleRequest = async function ( request = prepareRequest(item, collection); request.__bruno__executionMode = 'cli'; + request.__bruno__collectionName = brunoConfig?.name; + request.__bruno__requestName = item?.name; const scriptingConfig = get(brunoConfig, 'scripts', {}); scriptingConfig.runtime = runtime; diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index 1865426e0e..9b15e926a0 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -573,6 +573,8 @@ const registerNetworkIpc = (mainWindow) => { const collectionRoot = get(collection, 'root', {}); const request = prepareRequest(item, collection); request.__bruno__executionMode = 'standalone'; + request.__bruno__collectionName = collection?.name; + request.__bruno__requestName = item?.name; const envVars = getEnvVars(environment); const processEnvVars = getProcessEnvVars(collectionUid); const brunoConfig = getBrunoConfig(collectionUid); @@ -771,6 +773,8 @@ const registerNetworkIpc = (mainWindow) => { const _request = collectionRoot?.request; const request = prepareCollectionRequest(_request, collection, collectionPath); request.__bruno__executionMode = 'standalone'; + request.__bruno__collectionName = collection?.name; + request.__bruno__requestName = item?.name; const envVars = getEnvVars(environment); const processEnvVars = getProcessEnvVars(collectionUid); const brunoConfig = getBrunoConfig(collectionUid); @@ -1033,6 +1037,8 @@ const registerNetworkIpc = (mainWindow) => { const request = prepareRequest(item, collection); request.__bruno__executionMode = 'runner'; + request.__bruno__collectionName = collection?.name; + request.__bruno__requestName = item?.name; const requestUid = uuid(); const processEnvVars = getProcessEnvVars(collectionUid); diff --git a/packages/bruno-js/src/bru.js b/packages/bruno-js/src/bru.js index 9fa9d8f0ce..5872c8c172 100644 --- a/packages/bruno-js/src/bru.js +++ b/packages/bruno-js/src/bru.js @@ -4,7 +4,7 @@ const { interpolate } = require('@usebruno/common'); const variableNameRegex = /^[\w-.]*$/; class Bru { - constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables) { + constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, collectionName) { this.envVariables = envVariables || {}; this.runtimeVariables = runtimeVariables || {}; this.processEnvVars = cloneDeep(processEnvVars || {}); @@ -13,6 +13,7 @@ class Bru { this.requestVariables = requestVariables || {}; this.globalEnvironmentVariables = globalEnvironmentVariables || {}; this.collectionPath = collectionPath; + this.collectionName = collectionName; this.runner = { skipRequest: () => { this.skipRequest = true; @@ -153,6 +154,10 @@ class Bru { sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } + + getCollectionName() { + return this.collectionName; + } } module.exports = Bru; diff --git a/packages/bruno-js/src/bruno-request.js b/packages/bruno-js/src/bruno-request.js index 32e40c19ea..24bbea05df 100644 --- a/packages/bruno-js/src/bruno-request.js +++ b/packages/bruno-js/src/bruno-request.js @@ -177,6 +177,10 @@ class BrunoRequest { getExecutionMode() { return this.req.__bruno__executionMode; } + + getName() { + return this.req.__bruno__requestName; + } } module.exports = BrunoRequest; diff --git a/packages/bruno-js/src/runtime/script-runtime.js b/packages/bruno-js/src/runtime/script-runtime.js index dcde3f27cf..c25ba4f7f9 100644 --- a/packages/bruno-js/src/runtime/script-runtime.js +++ b/packages/bruno-js/src/runtime/script-runtime.js @@ -52,7 +52,8 @@ class ScriptRuntime { const collectionVariables = request?.collectionVariables || {}; const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; - const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables); + const collectionName = request?.__bruno__collectionName; + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, collectionName); const req = new BrunoRequest(request); const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false); const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []); @@ -181,7 +182,8 @@ class ScriptRuntime { const collectionVariables = request?.collectionVariables || {}; const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; - const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables); + const collectionName = request?.__bruno__collectionName; + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, collectionName); const req = new BrunoRequest(request); const res = new BrunoResponse(response); const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false); diff --git a/packages/bruno-js/src/runtime/test-runtime.js b/packages/bruno-js/src/runtime/test-runtime.js index 71db9d83e6..16d2b6bdb3 100644 --- a/packages/bruno-js/src/runtime/test-runtime.js +++ b/packages/bruno-js/src/runtime/test-runtime.js @@ -73,7 +73,8 @@ class TestRuntime { const folderVariables = request?.folderVariables || {}; const requestVariables = request?.requestVariables || {}; const assertionResults = request?.assertionResults || []; - const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables); + const collectionName = request?.__bruno__collectionName; + const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, collectionName); const req = new BrunoRequest(request); const res = new BrunoResponse(response); const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false); diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/bru.js b/packages/bruno-js/src/sandbox/quickjs/shims/bru.js index fa4cbf341d..27cbbd4f92 100644 --- a/packages/bruno-js/src/sandbox/quickjs/shims/bru.js +++ b/packages/bruno-js/src/sandbox/quickjs/shims/bru.js @@ -218,6 +218,12 @@ const addBruShimToContext = (vm, bru) => { }); sleep.consume((handle) => vm.setProp(bruObject, 'sleep', handle)); + let getCollectionName = vm.newFunction('getCollectionName', function () { + return marshallToVm(bru.getCollectionName(), vm); + }); + vm.setProp(bruObject, 'getCollectionName', getCollectionName); + getCollectionName.dispose(); + vm.setProp(bruObject, 'runner', bruRunnerObject); vm.setProp(vm.global, 'bru', bruObject); bruObject.dispose(); diff --git a/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js index e3f364fe71..d98223aff4 100644 --- a/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js +++ b/packages/bruno-js/src/sandbox/quickjs/shims/bruno-request.js @@ -117,6 +117,12 @@ const addBrunoRequestShimToContext = (vm, req) => { vm.setProp(reqObject, 'getExecutionMode', getExecutionMode); getExecutionMode.dispose(); + let getName = vm.newFunction('getName', function () { + return marshallToVm(req.getName(), vm); + }); + vm.setProp(reqObject, 'getName', getName); + getName.dispose(); + vm.setProp(vm.global, 'req', reqObject); reqObject.dispose(); }; diff --git a/packages/bruno-tests/collection/collection.bru b/packages/bruno-tests/collection/collection.bru index 6d84c2abe2..78fe8b4bf8 100644 --- a/packages/bruno-tests/collection/collection.bru +++ b/packages/bruno-tests/collection/collection.bru @@ -24,6 +24,12 @@ script:pre-request { if(shouldTestCollectionScripts) { bru.setVar('collection-var-set-by-collection-script', 'collection-var-value-set-by-collection-script'); } + { + const collectionName = bru.getCollectionName(); + bru.setVar("collectionName-collection-level-scripts", collectionName); + const requestName = req.getName(); + bru.setVar("requestName-collection-level-scripts", requestName); + } } tests { diff --git a/packages/bruno-tests/collection/scripting/api/bru/folder.bru b/packages/bruno-tests/collection/scripting/api/bru/folder.bru index 7cb15610d2..6a46ea817f 100644 --- a/packages/bruno-tests/collection/scripting/api/bru/folder.bru +++ b/packages/bruno-tests/collection/scripting/api/bru/folder.bru @@ -5,3 +5,10 @@ meta { vars:pre-request { folder-var: folder-var-value } + +script:pre-request { + { + const collectionName = bru.getCollectionName(); + bru.setVar("collectionName-folder-level-scripts", collectionName); + } +} diff --git a/packages/bruno-tests/collection/scripting/api/bru/getCollectionName.bru b/packages/bruno-tests/collection/scripting/api/bru/getCollectionName.bru new file mode 100644 index 0000000000..7ab0defd12 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/bru/getCollectionName.bru @@ -0,0 +1,36 @@ +meta { + name: getCollectionName + type: http + seq: 10 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +script:pre-request { + { + const collectionName = bru.getCollectionName(); + bru.setVar("collectionName-request-level-scripts", collectionName); + } + +} + +tests { + test("should get collection name in request-level scripts", function() { + const collectionName = bru.getVar("collectionName-request-level-scripts"); + expect(collectionName).to.equal("bruno-testbench"); + }); + + test("should get collection name in folder-level scripts", function() { + const collectionName = bru.getVar("collectionName-folder-level-scripts"); + expect(collectionName).to.equal("bruno-testbench"); + }); + + test("should get collection name in collection-level scripts", function() { + const collectionName = bru.getVar("collectionName-collection-level-scripts"); + expect(collectionName).to.equal("bruno-testbench"); + }); +} diff --git a/packages/bruno-tests/collection/scripting/api/req/folder.bru b/packages/bruno-tests/collection/scripting/api/req/folder.bru new file mode 100644 index 0000000000..0b17a3fdc2 --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/folder.bru @@ -0,0 +1,10 @@ +meta { + name: req +} + +script:pre-request { + { + const requestName = req.getName(); + bru.setVar("requestName-folder-level-scripts", requestName); + } +} diff --git a/packages/bruno-tests/collection/scripting/api/req/getName.bru b/packages/bruno-tests/collection/scripting/api/req/getName.bru new file mode 100644 index 0000000000..ab25a3853d --- /dev/null +++ b/packages/bruno-tests/collection/scripting/api/req/getName.bru @@ -0,0 +1,41 @@ +meta { + name: getName + type: http + seq: 11 +} + +get { + url: {{host}}/ping + body: none + auth: none +} + +assert { + res.status: eq 200 + res.body: eq pong +} + +script:pre-request { + { + const requestName = req.getName(); + bru.setVar("requestName-request-level-scripts", requestName); + } + +} + +tests { + test("should get request name in request-level scripts", function() { + const requestName = bru.getVar("requestName-request-level-scripts"); + expect(requestName).to.equal("getName"); + }); + + test("should get request name in folder-level scripts", function() { + const requestName = bru.getVar("requestName-folder-level-scripts"); + expect(requestName).to.equal("getName"); + }); + + test("should get request name in collection-level scripts", function() { + const requestName = bru.getVar("requestName-collection-level-scripts"); + expect(requestName).to.equal("getName"); + }); +}