codex-flows/apps/discord-bridge/test/config.test.ts
2026-05-12 15:15:09 +00:00

223 lines
5.1 KiB
TypeScript

import os from "node:os";
import path from "node:path";
import { describe, expect, test } from "bun:test";
import { parseConfig } from "../src/config.ts";
describe("parseConfig", () => {
test("resolves --dir relative to the home directory", () => {
const parsed = parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--dir",
"projects/demo",
],
{},
);
expect(parsed.type).toBe("run");
if (parsed.type === "run") {
expect(parsed.config.cwd).toBe(path.join(os.homedir(), "projects/demo"));
}
});
test("expands tilde dir paths from the home directory", () => {
const parsed = parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--dir",
"~/projects/demo",
],
{},
);
expect(parsed.type).toBe("run");
if (parsed.type === "run") {
expect(parsed.config.cwd).toBe(path.join(os.homedir(), "projects/demo"));
}
});
test("accepts one positional directory for root script usage", () => {
const parsed = parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--local-app-server",
"~/game-protocol-workspace",
],
{ CODEX_DISCORD_DIR: "env-dir" },
);
expect(parsed.type).toBe("run");
if (parsed.type === "run") {
expect(parsed.localAppServer).toBe(true);
expect(parsed.config.cwd).toBe(
path.join(os.homedir(), "game-protocol-workspace"),
);
}
});
test("rejects multiple directory arguments", () => {
expect(() =>
parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"one",
"two",
],
{},
)
).toThrow("Unexpected argument: two");
expect(() =>
parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--dir",
"one",
"two",
],
{},
)
).toThrow("Cannot set both positional directory and --dir/--cwd.");
});
test("prefers CODEX_DISCORD_DIR over legacy cwd env", () => {
const parsed = parseConfig(
["--token", "discord-token", "--allowed-user-ids", "user-1"],
{
CODEX_DISCORD_DIR: "current",
CODEX_DISCORD_CWD: "/legacy",
},
);
expect(parsed.type).toBe("run");
if (parsed.type === "run") {
expect(parsed.config.cwd).toBe(path.join(os.homedir(), "current"));
}
});
test("enables debug logging from flag or environment", () => {
const fromFlag = parseConfig(
["--token", "discord-token", "--allowed-user-ids", "user-1", "--debug"],
{},
);
const fromEnv = parseConfig(
["--token", "discord-token", "--allowed-user-ids", "user-1"],
{ CODEX_DISCORD_DEBUG: "true" },
);
expect(fromFlag.type).toBe("run");
expect(fromEnv.type).toBe("run");
if (fromFlag.type === "run" && fromEnv.type === "run") {
expect(fromFlag.config.debug).toBe(true);
expect(fromEnv.config.debug).toBe(true);
}
});
test("parses progress mode from flag or environment", () => {
const fromFlag = parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--progress-mode",
"commentary",
],
{},
);
const fromEnv = parseConfig(
["--token", "discord-token", "--allowed-user-ids", "user-1"],
{ CODEX_DISCORD_PROGRESS_MODE: "none" },
);
expect(fromFlag.type).toBe("run");
expect(fromEnv.type).toBe("run");
if (fromFlag.type === "run" && fromEnv.type === "run") {
expect(fromFlag.config.progressMode).toBe("commentary");
expect(fromEnv.config.progressMode).toBe("none");
}
});
test("parses console output and log level from flag or environment", () => {
const fromFlag = parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--console-output",
"messages",
"--log-level",
"warn",
],
{},
);
const fromEnv = parseConfig(
["--token", "discord-token", "--allowed-user-ids", "user-1"],
{
CODEX_DISCORD_CONSOLE_OUTPUT: "none",
CODEX_DISCORD_LOG_LEVEL: "silent",
},
);
expect(fromFlag.type).toBe("run");
expect(fromEnv.type).toBe("run");
if (fromFlag.type === "run" && fromEnv.type === "run") {
expect(fromFlag.config.consoleOutput).toBe("messages");
expect(fromFlag.config.logLevel).toBe("warn");
expect(fromEnv.config.consoleOutput).toBe("none");
expect(fromEnv.config.logLevel).toBe("silent");
}
});
test("can force a local app-server even when workspace URL env is set", () => {
const parsed = parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--local-app-server",
],
{ CODEX_WORKSPACE_APP_SERVER_WS_URL: "ws://127.0.0.1:9999" },
);
expect(parsed.type).toBe("run");
if (parsed.type === "run") {
expect(parsed.localAppServer).toBe(true);
expect(parsed.appServerUrl).toBeUndefined();
}
});
test("rejects mixing local and explicit external app-server modes", () => {
expect(() =>
parseConfig(
[
"--token",
"discord-token",
"--allowed-user-ids",
"user-1",
"--local-app-server",
"--app-server-url",
"ws://127.0.0.1:9999",
],
{},
)
).toThrow("Cannot set both --local-app-server and --app-server-url.");
});
});