Files
diegosouzapw--omniroute/tests/unit/cli-environment-helpers.test.ts
2026-07-13 13:39:12 +08:00

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");
});