mirror of
https://github.com/bendtherules/opencode-multi-model.git
synced 2026-08-18 21:52:11 +00:00
test: add user confirmation handling for cleanup in closeMultiModel
This commit is contained in:
@@ -122,6 +122,46 @@ describe("closeMultiModel", () => {
|
|||||||
expect(result.error).toBe("Cleanup cancelled by user");
|
expect(result.error).toBe("Cleanup cancelled by user");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("user confirms cleanup when not forced", async () => {
|
||||||
|
mockCommandResponses["tmux has-session -t test-session"] = { ok: false, stdout: "", stderr: "" };
|
||||||
|
const worktreePath = "/home/user/.local/share/opencode/multi-model/test-session/model";
|
||||||
|
const worktreeListOutput = `worktree ${worktreePath}\nbranch refs/heads/opencode/test-session/model`;
|
||||||
|
mockCommandResponses["git worktree list --porcelain"] = { ok: true, stdout: worktreeListOutput, stderr: "" };
|
||||||
|
|
||||||
|
// Stub readline to simulate user confirming cleanup (answers "y")
|
||||||
|
const mockInterface = {
|
||||||
|
question: (q: string, cb: (a: string) => void) => cb("y"),
|
||||||
|
close: () => {},
|
||||||
|
} as any;
|
||||||
|
spyOn(readline, "createInterface").mockImplementation(() => mockInterface);
|
||||||
|
|
||||||
|
// Freeze timestamp for deterministic tag name
|
||||||
|
const fixedDate = new Date("2023-01-01T00:00:00.000Z");
|
||||||
|
const OriginalDate = Date;
|
||||||
|
// @ts-ignore
|
||||||
|
global.Date = class extends OriginalDate { constructor() { super(); return fixedDate; } toISOString() { return "2023-01-01T00:00:00.000Z"; } } as any;
|
||||||
|
|
||||||
|
const result = await closeMultiModel({ sessionName: "test-session", cleanupWorktrees: true, force: false });
|
||||||
|
|
||||||
|
// Restore Date after invocation
|
||||||
|
// @ts-ignore
|
||||||
|
global.Date = OriginalDate;
|
||||||
|
|
||||||
|
// Verify result indicates successful cleanup
|
||||||
|
expect(result.success).toBe(true);
|
||||||
|
expect(result.cleanupPerformed).toBe(true);
|
||||||
|
expect(result.worktreesRemoved).toEqual([worktreePath]);
|
||||||
|
expect(result.branchesDeleted).toEqual(["opencode/test-session/model"]);
|
||||||
|
expect(result.tagsCreated?.length).toBe(1);
|
||||||
|
expect(result.warnings).toEqual([]);
|
||||||
|
|
||||||
|
// Verify the expected git commands were executed
|
||||||
|
expect(executedCommands).toContain(`git worktree remove -f ${worktreePath}`);
|
||||||
|
expect(executedCommands).toContain(`git branch -D opencode/test-session/model`);
|
||||||
|
const expectedTagCmd = `git tag archive/opencode/test-session/model-2023-01-01T00-00-00-000Z opencode/test-session/model`;
|
||||||
|
expect(executedCommands).toContain(expectedTagCmd);
|
||||||
|
});
|
||||||
|
|
||||||
test("warning when tag creation fails", async () => {
|
test("warning when tag creation fails", async () => {
|
||||||
mockCommandResponses["tmux has-session -t test-session"] = { ok: false, stdout: "", stderr: "" };
|
mockCommandResponses["tmux has-session -t test-session"] = { ok: false, stdout: "", stderr: "" };
|
||||||
const worktreePath = "/home/user/.local/share/opencode/multi-model/test-session/model";
|
const worktreePath = "/home/user/.local/share/opencode/multi-model/test-session/model";
|
||||||
|
|||||||
Reference in New Issue
Block a user