107 lines
3.8 KiB
TypeScript
107 lines
3.8 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
function withEnv(vars: Record<string, string | undefined>, fn: () => void) {
|
|
const saved: Record<string, string | undefined> = {};
|
|
for (const [k, v] of Object.entries(vars)) {
|
|
saved[k] = process.env[k];
|
|
if (v === undefined) delete process.env[k];
|
|
else process.env[k] = v;
|
|
}
|
|
try {
|
|
fn();
|
|
} finally {
|
|
for (const [k, v] of Object.entries(saved)) {
|
|
if (v === undefined) delete process.env[k];
|
|
else process.env[k] = v;
|
|
}
|
|
}
|
|
}
|
|
|
|
test("detectRestrictedEnvironment retorna github-codespaces quando CODESPACES=true", async () => {
|
|
const { detectRestrictedEnvironment } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv({ CODESPACES: "true" }, () => {
|
|
const env = detectRestrictedEnvironment();
|
|
assert.equal(env.type, "github-codespaces");
|
|
assert.equal(env.canOpenBrowser, false);
|
|
assert.equal(env.canUseTray, false);
|
|
});
|
|
});
|
|
|
|
test("detectRestrictedEnvironment retorna wsl com hint", async () => {
|
|
const { detectRestrictedEnvironment } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv({ WSL_DISTRO_NAME: "Ubuntu-22.04" }, () => {
|
|
const env = detectRestrictedEnvironment();
|
|
assert.equal(env.type, "wsl");
|
|
assert.equal(env.canOpenBrowser, true);
|
|
assert.equal(env.canUseTray, false);
|
|
assert.ok(env.hint?.includes("Windows"));
|
|
});
|
|
});
|
|
|
|
test("detectRestrictedEnvironment retorna gitpod quando GITPOD_WORKSPACE_ID set", async () => {
|
|
const { detectRestrictedEnvironment } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv({ GITPOD_WORKSPACE_ID: "ws-abc123" }, () => {
|
|
const env = detectRestrictedEnvironment();
|
|
assert.equal(env.type, "gitpod");
|
|
assert.equal(env.canOpenBrowser, false);
|
|
});
|
|
});
|
|
|
|
test("detectRestrictedEnvironment retorna ci quando CI=1", async () => {
|
|
const { detectRestrictedEnvironment } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv(
|
|
{ CI: "1", CODESPACES: undefined, WSL_DISTRO_NAME: undefined, GITPOD_WORKSPACE_ID: undefined },
|
|
() => {
|
|
const env = detectRestrictedEnvironment();
|
|
assert.equal(env.type, "ci");
|
|
assert.equal(env.canOpenBrowser, false);
|
|
}
|
|
);
|
|
});
|
|
|
|
test("detectRestrictedEnvironment retorna replit quando REPL_ID set", async () => {
|
|
const { detectRestrictedEnvironment } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv({ REPL_ID: "repl-123", CI: undefined, CODESPACES: undefined }, () => {
|
|
const env = detectRestrictedEnvironment();
|
|
assert.equal(env.type, "replit");
|
|
assert.equal(env.canOpenBrowser, false);
|
|
});
|
|
});
|
|
|
|
test("getEnvBanner retorna null para desktop", async () => {
|
|
const { getEnvBanner } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv(
|
|
{
|
|
CODESPACES: undefined,
|
|
WSL_DISTRO_NAME: undefined,
|
|
WSL_INTEROP: undefined,
|
|
GITPOD_WORKSPACE_ID: undefined,
|
|
REPL_ID: undefined,
|
|
REPL_SLUG: undefined,
|
|
CI: undefined,
|
|
},
|
|
() => {
|
|
// Non-TTY stdin will return non-interactive, not null
|
|
// So we just test the function exists and returns a string or null
|
|
const banner = getEnvBanner();
|
|
assert.ok(banner === null || typeof banner === "string");
|
|
}
|
|
);
|
|
});
|
|
|
|
test("getEnvBanner retorna string com tipo para Codespaces", async () => {
|
|
const { getEnvBanner } = await import("../../bin/cli/utils/environment.mjs");
|
|
withEnv({ CODESPACES: "true" }, () => {
|
|
const banner = getEnvBanner();
|
|
assert.ok(typeof banner === "string");
|
|
assert.ok(banner!.includes("github-codespaces"));
|
|
});
|
|
});
|
|
|
|
test("environment.mjs pode ser importado sem erro", async () => {
|
|
const mod = await import("../../bin/cli/utils/environment.mjs");
|
|
assert.equal(typeof mod.detectRestrictedEnvironment, "function");
|
|
assert.equal(typeof mod.getEnvBanner, "function");
|
|
});
|