From ba610daca32e83edc2de3b0923d446ddeadedb95 Mon Sep 17 00:00:00 2001 From: Hexxa Date: Mon, 22 Apr 2024 16:57:36 +0800 Subject: [PATCH] fix: insomnia.environment.name is missing (#7289) --- .../insomnia-sdk/src/objects/environments.ts | 10 ++++++++-- packages/insomnia-sdk/src/objects/insomnia.ts | 11 ++++++----- packages/insomnia-sdk/src/objects/interfaces.ts | 2 ++ .../fixtures/pre-request-collection.yaml | 7 +++++++ .../smoke/pre-request-script-features.test.ts | 3 +++ packages/insomnia/src/network/network.ts | 2 ++ .../editors/pre-request-script-editor.tsx | 16 ++++++++-------- 7 files changed, 36 insertions(+), 15 deletions(-) diff --git a/packages/insomnia-sdk/src/objects/environments.ts b/packages/insomnia-sdk/src/objects/environments.ts index a98afab399..e0c74843f9 100644 --- a/packages/insomnia-sdk/src/objects/environments.ts +++ b/packages/insomnia-sdk/src/objects/environments.ts @@ -1,11 +1,17 @@ import { getIntepolator } from './interpolator'; export class Environment { + private _name: string; private kvs = new Map(); - constructor(jsonObject: object | undefined) { + constructor(name: string, jsonObject: object | undefined) { + this._name = name; this.kvs = new Map(Object.entries(jsonObject || {})); } + get name() { + return this._name; + } + has = (variableName: string) => { return this.kvs.has(variableName); }; @@ -55,7 +61,7 @@ export class Variables { this.collection = args.collection; this.environment = args.environment; this.data = args.data; - this.local = new Environment({}); + this.local = new Environment('__local', {}); } has = (variableName: string) => { diff --git a/packages/insomnia-sdk/src/objects/insomnia.ts b/packages/insomnia-sdk/src/objects/insomnia.ts index 1f1fa11da2..e99e46fc27 100644 --- a/packages/insomnia-sdk/src/objects/insomnia.ts +++ b/packages/insomnia-sdk/src/objects/insomnia.ts @@ -116,11 +116,12 @@ export function initInsomniaObject( rawObj: RequestContext, log: (...args: any[]) => void, ) { - const globals = new Environment(rawObj.globals); - const environment = new Environment(rawObj.environment); - const baseEnvironment = new Environment(rawObj.baseEnvironment); - const iterationData = new Environment(rawObj.iterationData); - const collectionVariables = new Environment(rawObj.collectionVariables); + const globals = new Environment('globals', rawObj.globals); + const environment = new Environment(rawObj.environmentName || '', rawObj.environment); + const baseEnvironment = new Environment(rawObj.baseEnvironmentName || '', rawObj.baseEnvironment); + // TODO: update "iterationData" name when it is supported + const iterationData = new Environment('iterationData', rawObj.iterationData); + const collectionVariables = new Environment(rawObj.baseEnvironmentName || '', rawObj.collectionVariables); const cookies = new CookieObject(rawObj.cookieJar); // TODO: update follows when post-request script and iterating are introduced const requestInfo = new RequestInfo({ diff --git a/packages/insomnia-sdk/src/objects/interfaces.ts b/packages/insomnia-sdk/src/objects/interfaces.ts index 94cd54ac77..badb395a84 100644 --- a/packages/insomnia-sdk/src/objects/interfaces.ts +++ b/packages/insomnia-sdk/src/objects/interfaces.ts @@ -7,7 +7,9 @@ export interface RequestContext { request: Request; timelinePath: string; environment?: object; + environmentName?: string; baseEnvironment?: object; + baseEnvironmentName?: string; collectionVariables?: object; globals?: object; iterationData?: object; diff --git a/packages/insomnia-smoke-test/fixtures/pre-request-collection.yaml b/packages/insomnia-smoke-test/fixtures/pre-request-collection.yaml index 875563ee2f..af541d9d0e 100644 --- a/packages/insomnia-smoke-test/fixtures/pre-request-collection.yaml +++ b/packages/insomnia-smoke-test/fixtures/pre-request-collection.yaml @@ -315,6 +315,10 @@ resources: settingRebuildPath: true settingFollowRedirects: global preRequestScript: |- + insomnia.environment.set("environmentName", insomnia.environment.name); + insomnia.environment.set("baseEnvironmentName", insomnia.baseEnvironment.name); + insomnia.environment.set("collectionVariablesName", insomnia.collectionVariables.name); + // manipulation insomnia.baseEnvironment.set('fromBaseEnv', 'baseEnv'); insomnia.baseEnvironment.set('scriptValue', 'fromBase'); insomnia.environment.set('scriptValue', 'fromEnv'); @@ -328,6 +332,9 @@ resources: mimeType: "application/json" text: |- { + "environmentName": "{{ _.environmentName }}", + "baseEnvironmentName": "{{ _.baseEnvironmentName }}", + "collectionVariablesName": "{{ _.collectionVariablesName }}", "fromBaseEnv": "{{ _.fromBaseEnv }}", "scriptValue": "{{ _.scriptValue }}", "preDefinedValue": "{{ _.preDefinedValue }}", diff --git a/packages/insomnia-smoke-test/tests/smoke/pre-request-script-features.test.ts b/packages/insomnia-smoke-test/tests/smoke/pre-request-script-features.test.ts index 23d50b1338..2f2abc877d 100644 --- a/packages/insomnia-smoke-test/tests/smoke/pre-request-script-features.test.ts +++ b/packages/insomnia-smoke-test/tests/smoke/pre-request-script-features.test.ts @@ -26,6 +26,9 @@ test.describe('pre-request features tests', async () => { { name: 'environments setting and overriding', expectedBody: { + environmentName: '', + baseEnvironmentName: 'Base Environment', + collectionVariablesName: 'Base Environment', fromBaseEnv: 'baseEnv', scriptValue: 'fromEnv', preDefinedValue: 'fromScript', diff --git a/packages/insomnia/src/network/network.ts b/packages/insomnia/src/network/network.ts index 45506d80a1..ffc3871c01 100644 --- a/packages/insomnia/src/network/network.ts +++ b/packages/insomnia/src/network/network.ts @@ -109,7 +109,9 @@ export const tryToExecutePreRequestScript = async ( // it inputs empty environment data when active environment is the base environment // this is more deterministic and avoids that script accidently manipulates baseEnvironment instead of environment environment: environment._id === baseEnvironment._id ? {} : (environment?.data || {}), + environmentName: environment._id === baseEnvironment._id ? '' : (environment?.name || ''), baseEnvironment: baseEnvironment?.data || {}, + baseEnvironmentName: baseEnvironment?.name || '', clientCertificates, settings, cookieJar, diff --git a/packages/insomnia/src/ui/components/editors/pre-request-script-editor.tsx b/packages/insomnia/src/ui/components/editors/pre-request-script-editor.tsx index 08dc833c94..c0d50acdc4 100644 --- a/packages/insomnia/src/ui/components/editors/pre-request-script-editor.tsx +++ b/packages/insomnia/src/ui/components/editors/pre-request-script-editor.tsx @@ -156,15 +156,15 @@ export const PreRequestScriptEditor: FC = ({ // TODO(george): Add more to this object to provide improved autocomplete const preRequestScriptSnippets = getPreRequestScriptSnippets( new InsomniaObject({ - globals: new Environment({}), - iterationData: new Environment({}), - environment: new Environment({}), - baseEnvironment: new Environment({}), + globals: new Environment('globals', {}), + iterationData: new Environment('iterationData', {}), + environment: new Environment('environment', {}), + baseEnvironment: new Environment('baseEnvironment', {}), variables: new Variables({ - globals: new Environment({}), - environment: new Environment({}), - collection: new Environment({}), - data: new Environment({}), + globals: new Environment('globals', {}), + environment: new Environment('environment', {}), + collection: new Environment('collection', {}), + data: new Environment('data', {}), }), request: new ScriptRequest({ url: new Url('http://placeholder.com'),