refactor(maestro): extract the spawn form so it can live outside the modal
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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: "",
|
||||
worktreeCleanup: 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 and cleanup flag when worktree is enabled", () => {
|
||||
const res = buildSpawnRequest(
|
||||
{ ...base, worktreeEnabled: true, worktreeBranch: " feat/foo ", worktreeCleanup: true },
|
||||
"/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 },
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
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");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user