Initial codex-flows monorepo
This commit is contained in:
commit
3c446b11a4
642 changed files with 19676 additions and 0 deletions
223
apps/discord-bridge/test/config.test.ts
Normal file
223
apps/discord-bridge/test/config.test.ts
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
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.");
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue