fix(test): align zombie pane tmux mocks

This commit is contained in:
GeonWoo Jeon (Jay)
2026-04-09 12:09:09 +09:00
parent f82cc81c33
commit 687e7bb243

View File

@@ -1,3 +1,4 @@
/// <reference path="../../../bun-test.d.ts" />
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