From caf08af88b3f1f9c61a57622bee2e0f37b521d72 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 8 Feb 2026 18:03:08 +0900 Subject: [PATCH] fix: resolve test isolation failures in task-continuation-enforcer and config-handler tests - Change BackgroundManager import to type-only to prevent global process listener pollution across parallel test files - Replace real BackgroundManager construction with createMockBackgroundManager - Fix nested spyOn in config-handler tests to reuse beforeEach spy via mockResolvedValue instead of re-spying inside test bodies --- src/hooks/task-continuation-enforcer.test.ts | 4 ++-- src/plugin-handlers/config-handler.test.ts | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/hooks/task-continuation-enforcer.test.ts b/src/hooks/task-continuation-enforcer.test.ts index 1a0cbc75d..d4d73ce71 100644 --- a/src/hooks/task-continuation-enforcer.test.ts +++ b/src/hooks/task-continuation-enforcer.test.ts @@ -4,7 +4,7 @@ import { mkdtempSync, rmSync, writeFileSync } from "node:fs" import { tmpdir } from "node:os" import { join } from "node:path" -import { BackgroundManager } from "../features/background-agent" +import type { BackgroundManager } from "../features/background-agent" import { setMainSession, subagentSessions, _resetForTesting } from "../features/claude-code-session-state" import type { OhMyOpenCodeConfig } from "../config/schema" import { TaskObjectSchema } from "../tools/task/types" @@ -244,7 +244,7 @@ describe("task-continuation-enforcer", () => { }) const hook = createTaskContinuationEnforcer(createMockPluginInput(), createConfig(taskDir), { - backgroundManager: new BackgroundManager(createMockPluginInput()), + backgroundManager: createMockBackgroundManager(false), }) // when - session goes idle diff --git a/src/plugin-handlers/config-handler.test.ts b/src/plugin-handlers/config-handler.test.ts index 08c58f6f0..62b5140ad 100644 --- a/src/plugin-handlers/config-handler.test.ts +++ b/src/plugin-handlers/config-handler.test.ts @@ -1,3 +1,5 @@ +/// + import { describe, test, expect, spyOn, beforeEach, afterEach } from "bun:test" import { resolveCategoryConfig, createConfigHandler } from "./config-handler" import type { CategoryConfig } from "../config/schema" @@ -949,7 +951,10 @@ describe("per-agent todowrite/todoread deny when task_system enabled", () => { test("denies todowrite and todoread for primary agents when task_system is enabled", async () => { //#given - spyOn(agents, "createBuiltinAgents" as any).mockResolvedValue({ + const createBuiltinAgentsMock = agents.createBuiltinAgents as unknown as { + mockResolvedValue: (value: Record) => void + } + createBuiltinAgentsMock.mockResolvedValue({ sisyphus: { name: "sisyphus", prompt: "test", mode: "primary" }, hephaestus: { name: "hephaestus", prompt: "test", mode: "primary" }, atlas: { name: "atlas", prompt: "test", mode: "primary" }, @@ -987,7 +992,10 @@ describe("per-agent todowrite/todoread deny when task_system enabled", () => { test("does not deny todowrite/todoread when task_system is disabled", async () => { //#given - spyOn(agents, "createBuiltinAgents" as any).mockResolvedValue({ + const createBuiltinAgentsMock = agents.createBuiltinAgents as unknown as { + mockResolvedValue: (value: Record) => void + } + createBuiltinAgentsMock.mockResolvedValue({ sisyphus: { name: "sisyphus", prompt: "test", mode: "primary" }, hephaestus: { name: "hephaestus", prompt: "test", mode: "primary" }, }) @@ -1021,7 +1029,10 @@ describe("per-agent todowrite/todoread deny when task_system enabled", () => { test("does not deny todowrite/todoread when task_system is undefined", async () => { //#given - spyOn(agents, "createBuiltinAgents" as any).mockResolvedValue({ + const createBuiltinAgentsMock = agents.createBuiltinAgents as unknown as { + mockResolvedValue: (value: Record) => void + } + createBuiltinAgentsMock.mockResolvedValue({ sisyphus: { name: "sisyphus", prompt: "test", mode: "primary" }, })