Files
OmniRoute/tests/unit/cli-environment-helpers.test.ts
diegosouzapw 7a2682efb5 feat(cli): fase 8.1/8.6/8.14 — spinner, open, clipboard e environment helpers
- spinner.mjs: withSpinner/shouldUseSpinner com suporte a quiet/output/CI/NO_COLOR
- open.mjs: comando `open` com 16 recursos, respeita ambientes restritos
- environment.mjs: detectRestrictedEnvironment/getEnvBanner (codespaces/wsl/gitpod/replit/ci)
- clipboard.mjs: copyToClipboard/isClipboardSupported (pbcopy/clip/xclip/xsel/wl-copy)
- check-env-doc-sync: vars de plataforma/OS adicionadas ao IGNORE_FROM_CODE
2026-05-15 03:00:52 -03: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");
});