import { describe, it, expect } from "vitest"; import { parseCommaList, formatAgentList } from "../agent.js"; import type { AgentConfig } from "../agent.js"; describe("parseCommaList", () => { it("returns undefined for undefined input", () => { expect(parseCommaList(undefined)).toBe(undefined); }); it("returns undefined for null input", () => { expect(parseCommaList(null)).toBe(undefined); }); it("returns undefined for empty string", () => { expect(parseCommaList("")).toBe(undefined); }); it("returns a single-element array for a single path", () => { expect(parseCommaList("path/a")).toEqual(["path/a"]); }); it("splits a comma-separated string into an array", () => { expect(parseCommaList("path/a, path/b")).toEqual(["path/a", "path/b"]); }); it("trims whitespace from each segment", () => { expect(parseCommaList(" path/a , path/b ")).toEqual(["path/a", "path/b"]); }); it("returns undefined when all segments are empty after filtering", () => { expect(parseCommaList(",")).toBe(undefined); }); it("returns undefined for non-string non-null input", () => { expect(parseCommaList(42)).toBe(undefined); }); }); describe("formatAgentList", () => { const makeAgent = (name: string): AgentConfig => ({ name, description: `${name} description`, systemPrompt: "", source: "user", filePath: `/agents/${name}.md`, }); it("returns 'none' for an empty array", () => { expect(formatAgentList([], 10)).toEqual({ text: "none", remaining: 0 }); }); it("lists all agents when count is below maxItems", () => { const agents = [makeAgent("alpha"), makeAgent("beta")]; const result = formatAgentList(agents, 10); expect(result.remaining).toBe(0); expect(result.text).toContain("alpha (user): alpha description"); expect(result.text).toContain("beta (user): beta description"); }); it("limits output to maxItems and reports remaining count", () => { const agents = [makeAgent("a"), makeAgent("b"), makeAgent("c")]; const result = formatAgentList(agents, 2); expect(result.remaining).toBe(1); expect(result.text).toContain("a (user)"); expect(result.text).toContain("b (user)"); expect(result.text).not.toContain("c (user)"); }); it("formats each agent as 'name (source): description'", () => { const agents = [makeAgent("my-agent")]; const result = formatAgentList(agents, 10); expect(result.text).toBe("my-agent (user): my-agent description"); }); });