Merge pull request #3846 from cdr/jsjoeio-test-should-enable-proxy
feat: add tests for shouldEnableProxy
This commit is contained in:
commit
6d928a0666
@ -62,7 +62,7 @@ function newProxyAgent(inVSCode: boolean): http.Agent {
|
|||||||
|
|
||||||
// If they have $NO_PROXY set to example.com then this check won't work!
|
// If they have $NO_PROXY set to example.com then this check won't work!
|
||||||
// But that's drastically unlikely.
|
// But that's drastically unlikely.
|
||||||
function shouldEnableProxy(): boolean {
|
export function shouldEnableProxy(): boolean {
|
||||||
let shouldEnable = false
|
let shouldEnable = false
|
||||||
|
|
||||||
const httpProxy = proxyFromEnv.getProxyForUrl(`http://example.com`)
|
const httpProxy = proxyFromEnv.getProxyForUrl(`http://example.com`)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { promises as fs } from "fs"
|
import { promises as fs } from "fs"
|
||||||
import { tmpdir } from "../../test/utils/helpers"
|
import { tmpdir, useEnv } from "../../test/utils/helpers"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is for testing test helpers (not core code).
|
* This file is for testing test helpers (not core code).
|
||||||
@ -12,3 +12,30 @@ describe("test helpers", () => {
|
|||||||
expect(fs.access(pathToTempDir)).resolves.toStrictEqual(undefined)
|
expect(fs.access(pathToTempDir)).resolves.toStrictEqual(undefined)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("useEnv", () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
jest.resetModules()
|
||||||
|
process.env.TEST_USE_ENV = "test environment variable"
|
||||||
|
})
|
||||||
|
afterAll(() => {
|
||||||
|
delete process.env.TEST_USE_ENV
|
||||||
|
})
|
||||||
|
it("should set and reset the env var", () => {
|
||||||
|
const envKey = "TEST_ENV_VAR"
|
||||||
|
const [setValue, resetValue] = useEnv(envKey)
|
||||||
|
setValue("hello-world")
|
||||||
|
expect(process.env[envKey]).toEqual("hello-world")
|
||||||
|
resetValue()
|
||||||
|
expect(process.env[envKey]).toEqual(undefined)
|
||||||
|
})
|
||||||
|
it("should set and reset the env var where a value was already set", () => {
|
||||||
|
const envKey = "TEST_USE_ENV"
|
||||||
|
expect(process.env[envKey]).toEqual("test environment variable")
|
||||||
|
const [setValue, resetValue] = useEnv(envKey)
|
||||||
|
setValue("hello there")
|
||||||
|
expect(process.env[envKey]).toEqual("hello there")
|
||||||
|
resetValue()
|
||||||
|
expect(process.env[envKey]).toEqual("test environment variable")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
39
test/unit/node/proxy_agent.test.ts
Normal file
39
test/unit/node/proxy_agent.test.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import { shouldEnableProxy } from "../../../src/node/proxy_agent"
|
||||||
|
import { useEnv } from "../../utils/helpers"
|
||||||
|
|
||||||
|
describe("shouldEnableProxy", () => {
|
||||||
|
const [setHTTPProxy, resetHTTPProxy] = useEnv("HTTP_PROXY")
|
||||||
|
const [setHTTPSProxy, resetHTTPSProxy] = useEnv("HTTPS_PROXY")
|
||||||
|
const [setNoProxy, resetNoProxy] = useEnv("NO_PROXY")
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules() // Most important - it clears the cache
|
||||||
|
resetHTTPProxy()
|
||||||
|
resetNoProxy()
|
||||||
|
resetHTTPSProxy()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns true when HTTP_PROXY is set", () => {
|
||||||
|
setHTTPProxy("http://proxy.example.com")
|
||||||
|
expect(shouldEnableProxy()).toBe(true)
|
||||||
|
})
|
||||||
|
it("returns true when HTTPS_PROXY is set", () => {
|
||||||
|
setHTTPSProxy("https://proxy.example.com")
|
||||||
|
expect(shouldEnableProxy()).toBe(true)
|
||||||
|
})
|
||||||
|
it("returns false when NO_PROXY is set", () => {
|
||||||
|
setNoProxy("*")
|
||||||
|
expect(shouldEnableProxy()).toBe(false)
|
||||||
|
})
|
||||||
|
it("should return false when neither HTTP_PROXY nor HTTPS_PROXY is set", () => {
|
||||||
|
expect(shouldEnableProxy()).toBe(false)
|
||||||
|
})
|
||||||
|
it("should return false when NO_PROXY is set to https://example.com", () => {
|
||||||
|
setNoProxy("https://example.com")
|
||||||
|
expect(shouldEnableProxy()).toBe(false)
|
||||||
|
})
|
||||||
|
it("should return false when NO_PROXY is set to http://example.com", () => {
|
||||||
|
setNoProxy("http://example.com")
|
||||||
|
expect(shouldEnableProxy()).toBe(false)
|
||||||
|
})
|
||||||
|
})
|
@ -37,3 +37,27 @@ export async function tmpdir(testName: string): Promise<string> {
|
|||||||
|
|
||||||
return await fs.mkdtemp(path.join(dir, `${testName}-`), { encoding: "utf8" })
|
return await fs.mkdtemp(path.join(dir, `${testName}-`), { encoding: "utf8" })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description Helper function to use an environment variable.
|
||||||
|
*
|
||||||
|
* @returns an array (similar to useState in React) with a function
|
||||||
|
* to set the value and reset the value
|
||||||
|
*/
|
||||||
|
export function useEnv(key: string): [(nextValue: string | undefined) => string | undefined, () => void] {
|
||||||
|
const initialValue = process.env[key]
|
||||||
|
const setValue = (nextValue: string | undefined) => (process.env[key] = nextValue)
|
||||||
|
// Node automatically converts undefined to string 'undefined'
|
||||||
|
// when assigning an environment variable.
|
||||||
|
// which is why we need to delete it if it's supposed to be undefined
|
||||||
|
// Source: https://stackoverflow.com/a/60147167
|
||||||
|
const resetValue = () => {
|
||||||
|
if (initialValue !== undefined) {
|
||||||
|
process.env[key] = initialValue
|
||||||
|
} else {
|
||||||
|
delete process.env[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [setValue, resetValue]
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user