84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert";
|
|
import { resolveClient } from "../src/dispatch.js";
|
|
import type { ClientName } from "../src/types.js";
|
|
|
|
describe("resolveClient", () => {
|
|
it('returns "codex" when prompt contains "use codex"', () => {
|
|
const result = resolveClient("use codex to refactor this");
|
|
assert.strictEqual(result, "codex");
|
|
});
|
|
|
|
it('returns "claude" when prompt contains "tell claude to..."', () => {
|
|
const result = resolveClient("tell claude to review my code");
|
|
assert.strictEqual(result, "claude");
|
|
});
|
|
|
|
it('returns "opencode" when prompt contains "run with opencode"', () => {
|
|
const result = resolveClient("run with opencode");
|
|
assert.strictEqual(result, "opencode");
|
|
});
|
|
|
|
it('returns "opencode" when prompt contains "open code"', () => {
|
|
const result = resolveClient("open code this file");
|
|
assert.strictEqual(result, "opencode");
|
|
});
|
|
|
|
it("returns null when no keyword matches and no default is configured", () => {
|
|
const result = resolveClient("hello world");
|
|
assert.strictEqual(result, null);
|
|
});
|
|
|
|
it("returns defaultClient when no keyword matches", () => {
|
|
const result = resolveClient("hello world", { defaultClient: "claude" });
|
|
assert.strictEqual(result, "claude");
|
|
});
|
|
|
|
it("prefers --client flag over keyword parsing", () => {
|
|
const result = resolveClient("use codex for this", { client: "claude" });
|
|
assert.strictEqual(result, "claude");
|
|
});
|
|
|
|
it("prefers --client flag over defaultClient", () => {
|
|
const result = resolveClient("hello world", {
|
|
client: "opencode",
|
|
defaultClient: "codex",
|
|
});
|
|
assert.strictEqual(result, "opencode");
|
|
});
|
|
|
|
it("handles uppercase CODEX", () => {
|
|
const result = resolveClient("Use CODEX please");
|
|
assert.strictEqual(result, "codex");
|
|
});
|
|
|
|
it("handles mixed-case Claude", () => {
|
|
const result = resolveClient("Tell Claude to fix this");
|
|
assert.strictEqual(result, "claude");
|
|
});
|
|
|
|
it("returns first match when multiple clients are mentioned", () => {
|
|
const result = resolveClient("ask claude or codex to help");
|
|
assert.strictEqual(result, "claude");
|
|
});
|
|
|
|
it("returns null for empty prompt with no default", () => {
|
|
const result = resolveClient("");
|
|
assert.strictEqual(result, null);
|
|
});
|
|
|
|
it("returns defaultClient for empty prompt", () => {
|
|
const result = resolveClient("", { defaultClient: "codex" });
|
|
assert.strictEqual(result, "codex");
|
|
});
|
|
|
|
it("validates --client flag value", () => {
|
|
// Invalid client flag should fall back to keyword/default behavior
|
|
const result = resolveClient("use codex", {
|
|
client: "invalid" as ClientName,
|
|
});
|
|
// If client flag is invalid, we should fall back to keyword matching
|
|
assert.strictEqual(result, "codex");
|
|
});
|
|
});
|