Files
OmniRoute/tests/unit/runtime-env.test.ts
diegosouzapw f3b944a55a refactor(scripts): organize into build/dev/check/docs/i18n/ad-hoc subfolders
Reorganizes the 29 active scripts under scripts/ into purpose-driven
subfolders:

- scripts/build/    (11) — Build, install, publish, runtime env
- scripts/dev/      (13) — Dev servers, test runners, healthchecks
- scripts/check/    (10) — Lint/validation/coverage checks
- scripts/docs/      (2) — Docs index and provider reference generation
- scripts/i18n/     (+3) — Adds Python translation utilities (check/validate/autotranslate)
- scripts/ad-hoc/    (4) — One-shot maintenance utilities

Updates all references in package.json, electron/package.json,
.husky/pre-commit, .github/workflows/ci.yml, Dockerfile, src/,
tests/, scripts/ internal cross-imports, playwright.config.ts,
and English docs (CODEBASE_DOCUMENTATION, ENVIRONMENT, FEATURES,
RELEASE_CHECKLIST, COVERAGE_PLAN, ELECTRON_GUIDE, I18N, GEMINI).

Also patches scripts/build/pack-artifact-policy.ts so the npm pack
allowlist mirrors the new layout.

Validates with:
- npm run lint            (exit 0 — pre-existing minified-bundle errors only)
- npm run typecheck:core  (exit 0)
- npm run check:docs-all  (exit 0)
- unit tests for moved scripts (57 tests pass)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 10:14:25 -03:00

104 lines
3.0 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import path from "node:path";
import { EventEmitter } from "node:events";
import { createRequire, syncBuiltinESMExports } from "node:module";
import { pathToFileURL } from "node:url";
const require = createRequire(import.meta.url);
const childProcess = require("node:child_process");
const modulePath = path.join(process.cwd(), "scripts/build/runtime-env.mjs");
const originalSpawn = childProcess.spawn;
const originalProcessOn = process.on;
const originalProcessExit = process.exit;
const originalProcessKill = process.kill;
async function loadRuntimeEnv(label) {
return import(`${pathToFileURL(modulePath).href}?case=${label}-${Date.now()}`);
}
test.afterEach(() => {
childProcess.spawn = originalSpawn;
process.on = originalProcessOn;
process.exit = originalProcessExit;
process.kill = originalProcessKill;
syncBuiltinESMExports();
});
test("runtime env helpers normalize runtime ports and conflicting color flags", async () => {
const runtimeEnv = await loadRuntimeEnv("helpers");
assert.deepEqual(
runtimeEnv.withRuntimePortEnv(
{ NODE_ENV: "test" },
{ basePort: 20128, apiPort: 21128, dashboardPort: 22128 }
),
{
NODE_ENV: "test",
OMNIROUTE_PORT: "20128",
PORT: "22128",
DASHBOARD_PORT: "22128",
API_PORT: "21128",
}
);
assert.deepEqual(
runtimeEnv.sanitizeColorEnv({ FORCE_COLOR: "1", NO_COLOR: "1", TERM: "xterm-256color" }),
{ NO_COLOR: "1", TERM: "xterm-256color" }
);
assert.deepEqual(runtimeEnv.sanitizeColorEnv({ FORCE_COLOR: "1" }), { FORCE_COLOR: "1" });
});
test("spawnWithForwardedSignals forwards process signals and exit status", async () => {
const signalHandlers = new Map();
const childKillSignals = [];
const processKills = [];
const processExits = [];
const spawnCalls = [];
let child;
childProcess.spawn = (command, args, options) => {
spawnCalls.push({ command, args, options });
child = new EventEmitter();
child.kill = (signal) => childKillSignals.push(signal);
return child;
};
process.on = (signal, handler) => {
signalHandlers.set(signal, handler);
return process;
};
process.exit = (code) => {
processExits.push(code);
};
process.kill = (pid, signal) => {
processKills.push({ pid, signal });
return true;
};
syncBuiltinESMExports();
const runtimeEnv = await loadRuntimeEnv("spawn");
const returnedChild = runtimeEnv.spawnWithForwardedSignals("node", ["server.js"], {
stdio: "inherit",
});
assert.equal(returnedChild, child);
assert.deepEqual(spawnCalls, [
{
command: "node",
args: ["server.js"],
options: { stdio: "inherit" },
},
]);
signalHandlers.get("SIGINT")();
signalHandlers.get("SIGTERM")();
assert.deepEqual(childKillSignals, ["SIGINT", "SIGTERM"]);
child.emit("exit", 3, null);
child.emit("exit", null, "SIGTERM");
assert.deepEqual(processExits, [3]);
assert.deepEqual(processKills, [{ pid: process.pid, signal: "SIGTERM" }]);
});