import { describe, it } from "node:test"; import assert from "node:assert"; import { main, discoverClients, execClient } from "../src/cli.js"; import { ClientNotFoundError } from "../src/types.js"; describe("discoverClients", () => { it("returns all three configured clients", () => { const clients = discoverClients(); assert.strictEqual(clients.length, 3); const names = clients.map((c) => c.name); assert.deepStrictEqual(names, ["codex", "claude", "opencode"]); }); it("returns ClientInfo with found boolean", () => { const clients = discoverClients(); for (const c of clients) { assert.strictEqual(typeof c.found, "boolean"); } }); }); describe("main", () => { it("returns 0 for --help", async () => { const code = await main(["node", "cli.ts", "--help"]); assert.strictEqual(code, 0); }); it("returns 0 for list", async () => { const code = await main(["node", "cli.ts", "list"]); assert.strictEqual(code, 0); }); it("returns 0 for list --json", async () => { const code = await main(["node", "cli.ts", "list", "--json"]); assert.strictEqual(code, 0); }); it("returns 1 for exec without --client", async () => { const code = await main(["node", "cli.ts", "exec", "--prompt", "hello"]); assert.strictEqual(code, 1); }); it("returns 1 for exec without --prompt", async () => { const code = await main(["node", "cli.ts", "exec", "--client", "codex"]); assert.strictEqual(code, 1); }); it("returns 1 for unknown command", async () => { const code = await main(["node", "cli.ts", "bogus"]); assert.strictEqual(code, 1); }); it("returns 1 when no command is given", async () => { const code = await main(["node", "cli.ts"]); assert.strictEqual(code, 1); }); }); describe("execClient", () => { it("throws ClientNotFoundError when client path is empty", () => { assert.throws( () => execClient("codex", "test prompt", ""), (err: unknown) => err instanceof ClientNotFoundError ); }); });