From 687e7bb243e47d3cde4e876f2bb83ede80f3671d Mon Sep 17 00:00:00 2001 From: "GeonWoo Jeon (Jay)" Date: Thu, 9 Apr 2026 12:09:09 +0900 Subject: [PATCH] fix(test): align zombie pane tmux mocks --- .../tmux-subagent/zombie-pane.test.ts | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/features/tmux-subagent/zombie-pane.test.ts b/src/features/tmux-subagent/zombie-pane.test.ts index 42fcfb760..82ebb9f9c 100644 --- a/src/features/tmux-subagent/zombie-pane.test.ts +++ b/src/features/tmux-subagent/zombie-pane.test.ts @@ -1,3 +1,4 @@ +/// import { beforeEach, describe, expect, mock, test, afterAll } from "bun:test" import type { TmuxConfig } from "../../config/schema" import type { ActionResult, ExecuteContext, ExecuteActionsResult } from "./action-executor" @@ -25,6 +26,9 @@ const mockExecuteActions = mock<( results: [], })) +const mockSpawnTmuxWindow = mock(async () => ({ success: true, paneId: "%window" })) +const mockSpawnTmuxSession = mock(async () => ({ success: true, paneId: "%session" })) + const mockIsInsideTmux = mock<() => boolean>(() => true) const mockGetCurrentPaneId = mock<() => string | undefined>(() => "%0") @@ -44,6 +48,8 @@ mock.module("../../shared/tmux", () => ({ SESSION_READY_POLL_INTERVAL_MS: 10, SESSION_READY_TIMEOUT_MS: 50, SESSION_MISSING_GRACE_MS: 1_000, + spawnTmuxWindow: mockSpawnTmuxWindow, + spawnTmuxSession: mockSpawnTmuxSession, })) afterAll(() => { mock.restore() }) @@ -56,6 +62,7 @@ const mockTmuxDeps: TmuxUtilDeps = { function createConfig(): TmuxConfig { return { enabled: true, + isolation: "inline", layout: "main-vertical", main_pane_size: 60, main_pane_min_width: 80, @@ -156,6 +163,8 @@ describe("TmuxSessionManager zombie pane handling", () => { mockQueryWindowState.mockClear() mockExecuteAction.mockClear() mockExecuteActions.mockClear() + mockSpawnTmuxWindow.mockClear() + mockSpawnTmuxSession.mockClear() mockIsInsideTmux.mockClear() mockGetCurrentPaneId.mockClear() @@ -171,6 +180,8 @@ describe("TmuxSessionManager zombie pane handling", () => { spawnedPaneId: "%1", results: [], })) + mockSpawnTmuxWindow.mockImplementation(async () => ({ success: true, paneId: "%window" })) + mockSpawnTmuxSession.mockImplementation(async () => ({ success: true, paneId: "%session" })) mockIsInsideTmux.mockReturnValue(true) mockGetCurrentPaneId.mockReturnValue("%0") }) @@ -259,9 +270,15 @@ describe("TmuxSessionManager zombie pane handling", () => { "ses_pending", createTrackedSession({ closePending: true, closeRetryCount: 0 }), ) - mockExecuteAction.mockImplementationOnce(async () => { - sessions.delete("ses_pending") - return { success: false } + let shouldFailClose = true + mockExecuteAction.mockImplementation(async () => { + if (shouldFailClose) { + shouldFailClose = false + sessions.delete("ses_pending") + return { success: false } + } + + return { success: true } }) // when