import { describe, expect, it } from "vitest"; import { buildSpawnRequest, type SpawnFormValues } from "./spawnForm.js"; const base: SpawnFormValues = { command: "claude", cwd: "/home/user/project", name: "amber-fox", worktreeEnabled: false, worktreeBranch: "", worktreeBranchMode: "new", worktreeBranchEdited: false, }; describe("buildSpawnRequest", () => { it("builds a plain request with the picked cwd and command", () => { const res = buildSpawnRequest(base, null); expect(res).toEqual({ req: { cwd: "/home/user/project", command: "claude", metadata: { name: "amber-fox" } }, }); }); it("omits metadata.name when the name is blank", () => { const res = buildSpawnRequest({ ...base, name: " " }, null); expect(res).toEqual({ req: { cwd: base.cwd, command: base.command, metadata: {} } }); }); it("attaches a trimmed branch when worktree is enabled, and always cleans up", () => { const res = buildSpawnRequest( { ...base, worktreeEnabled: true, worktreeBranch: " feat/foo " }, "/home/user/project", ); expect(res).toEqual({ req: { cwd: base.cwd, command: base.command, metadata: { name: "amber-fox" }, worktree: { base_repo: "/home/user/project", branch: "feat/foo", cleanup_on_kill: true, create_branch: true, }, }, }); }); it("checks out an existing branch when the mode is existing (#61)", () => { const res = buildSpawnRequest( { ...base, worktreeEnabled: true, worktreeBranch: "spawn-v2", worktreeBranchMode: "existing", }, "/home/user/project", ); expect(res).toEqual({ req: { cwd: base.cwd, command: base.command, metadata: { name: "amber-fox" }, worktree: { base_repo: "/home/user/project", branch: "spawn-v2", cleanup_on_kill: true, create_branch: false, }, }, }); }); it("rejects an existing-mode worktree with no branch picked", () => { expect( buildSpawnRequest( { ...base, worktreeEnabled: true, worktreeBranch: "", worktreeBranchMode: "existing" }, "/repo", ), ).toHaveProperty("error"); }); it("rejects a missing working directory", () => { expect(buildSpawnRequest({ ...base, cwd: "" }, null)).toHaveProperty("error"); }); it("rejects a missing command", () => { expect(buildSpawnRequest({ ...base, command: "" }, null)).toHaveProperty("error"); }); it("rejects a worktree without an inferred base repo", () => { expect(buildSpawnRequest({ ...base, worktreeEnabled: true, worktreeBranch: "b" }, null)) .toHaveProperty("error"); }); it("rejects a worktree without a branch name", () => { expect(buildSpawnRequest({ ...base, worktreeEnabled: true, worktreeBranch: " " }, "/repo")) .toHaveProperty("error"); }); });