feat(M1): Project Scaffold

This commit is contained in:
2026-05-18 17:45:27 -05:00
parent 949bd05420
commit 4629fe17de
2 changed files with 218 additions and 0 deletions
+66
View File
@@ -0,0 +1,66 @@
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
);
});
});