From c9c7b7526969bc0a71b52c37ed88ac91dd0ab3d7 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 5 Apr 2026 13:27:45 +0900 Subject: [PATCH] test(tmux): add create-managers test coverage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- src/create-managers.test.ts | 101 ++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/create-managers.test.ts diff --git a/src/create-managers.test.ts b/src/create-managers.test.ts new file mode 100644 index 000000000..56f6e8cfc --- /dev/null +++ b/src/create-managers.test.ts @@ -0,0 +1,101 @@ +/// + +import { afterAll, beforeEach, describe, expect, it, mock } from "bun:test" + +const markServerRunningInProcess = mock(() => {}) + +mock.module("./features/background-agent", () => ({ + BackgroundManager: class BackgroundManager { + constructor(..._args: unknown[]) {} + }, +})) + +mock.module("./features/skill-mcp-manager", () => ({ + SkillMcpManager: class SkillMcpManager { + constructor(..._args: unknown[]) {} + }, +})) + +mock.module("./features/task-toast-manager", () => ({ + initTaskToastManager: mock(() => {}), +})) + +mock.module("./features/tmux-subagent", () => ({ + TmuxSessionManager: class TmuxSessionManager { + constructor(..._args: unknown[]) {} + + async cleanup(): Promise {} + async onSessionCreated(..._args: unknown[]): Promise {} + }, +})) + +mock.module("./features/background-agent/process-cleanup", () => ({ + registerManagerForCleanup: mock(() => {}), +})) + +mock.module("./plugin-handlers", () => ({ + createConfigHandler: mock(() => ({ kind: "config-handler" })), +})) + +mock.module("./shared/tmux/tmux-utils/server-health", () => ({ + isServerRunning: mock(async () => true), + markServerRunningInProcess, + resetServerCheck: mock(() => {}), +})) + +const { createManagers } = await import("./create-managers") + +function createTmuxConfig(enabled: boolean) { + return { + enabled, + layout: "main-vertical" as const, + main_pane_size: 60, + main_pane_min_width: 120, + agent_pane_min_width: 40, + isolation: "inline" as const, + } +} + +describe("createManagers", () => { + beforeEach(() => { + markServerRunningInProcess.mockClear() + }) + + afterAll(() => { + mock.restore() + }) + + it("#given tmux integration is disabled #when managers are created #then it does not mark the tmux server as running", () => { + // #given + const args = { + ctx: { directory: "/tmp", client: {} }, + pluginConfig: {}, + tmuxConfig: createTmuxConfig(false), + modelCacheState: {}, + backgroundNotificationHookEnabled: false, + } as Parameters[0] + + // #when + createManagers(args) + + // #then + expect(markServerRunningInProcess).not.toHaveBeenCalled() + }) + + it("#given tmux integration is enabled #when managers are created #then it marks the tmux server as running", () => { + // #given + const args = { + ctx: { directory: "/tmp", client: {} }, + pluginConfig: {}, + tmuxConfig: createTmuxConfig(true), + modelCacheState: {}, + backgroundNotificationHookEnabled: false, + } as Parameters[0] + + // #when + createManagers(args) + + // #then + expect(markServerRunningInProcess).toHaveBeenCalledTimes(1) + }) +})