From 96e7b39a8335cfcce459a6a918a5ba2c55081f0c Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 31 Jan 2026 16:34:07 +0900 Subject: [PATCH] fix: use _resetForTesting() consistently to prevent flaky tests (#1318) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace setMainSession(undefined) with _resetForTesting() in keyword-detector tests - Add _resetForTesting() to afterEach hooks for proper cleanup - Un-skip the previously flaky mainSessionID test in state.test.ts Fixes #848 Co-authored-by: 배지훈 --- bun.lock | 31 ++++++------------------ src/hooks/keyword-detector/index.test.ts | 17 +++++++------ src/hooks/session-notification.test.ts | 2 +- 3 files changed, 17 insertions(+), 33 deletions(-) diff --git a/bun.lock b/bun.lock index 3547d4da0..2a99fe760 100644 --- a/bun.lock +++ b/bun.lock @@ -18,7 +18,6 @@ "jsonc-parser": "^3.3.1", "picocolors": "^1.1.1", "picomatch": "^4.0.2", - "vscode-jsonrpc": "^8.2.0", "zod": "^4.1.8", }, "devDependencies": { @@ -28,13 +27,13 @@ "typescript": "^5.7.3", }, "optionalDependencies": { - "oh-my-opencode-darwin-arm64": "3.1.10", - "oh-my-opencode-darwin-x64": "3.1.10", - "oh-my-opencode-linux-arm64": "3.1.10", - "oh-my-opencode-linux-arm64-musl": "3.1.10", - "oh-my-opencode-linux-x64": "3.1.10", - "oh-my-opencode-linux-x64-musl": "3.1.10", - "oh-my-opencode-windows-x64": "3.1.10", + "oh-my-opencode-darwin-arm64": "3.0.0-beta.8", + "oh-my-opencode-darwin-x64": "3.0.0-beta.8", + "oh-my-opencode-linux-arm64": "3.0.0-beta.8", + "oh-my-opencode-linux-arm64-musl": "3.0.0-beta.8", + "oh-my-opencode-linux-x64": "3.0.0-beta.8", + "oh-my-opencode-linux-x64-musl": "3.0.0-beta.8", + "oh-my-opencode-windows-x64": "3.0.0-beta.8", }, }, }, @@ -226,20 +225,6 @@ "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "oh-my-opencode-darwin-arm64": ["oh-my-opencode-darwin-arm64@3.1.10", "", { "os": "darwin", "cpu": "arm64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-6qsZQtrtBYZLufcXTTuUUMEG9PoG9Y98pX+HFVn2xHIEc6GpwR6i5xY8McFHmqPkC388tzybD556JhKqPX7Pnw=="], - - "oh-my-opencode-darwin-x64": ["oh-my-opencode-darwin-x64@3.1.10", "", { "os": "darwin", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-I1tQQbcpSBvLGXTO652mBqlyIpwYhYuIlSJmrSM33YRGBiaUuhMASnHQsms+E0eC3U/TOyqomU/4KPnbWyxs4w=="], - - "oh-my-opencode-linux-arm64": ["oh-my-opencode-linux-arm64@3.1.10", "", { "os": "linux", "cpu": "arm64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-r6Rm5Ru/WwcBKKuPIP0RreI0gnf+MYRV0mmzPBVhMZdPWSC/eTT3GdyqFDZ4cCN76n5aea0sa5PPW7iPF+Uw6Q=="], - - "oh-my-opencode-linux-arm64-musl": ["oh-my-opencode-linux-arm64-musl@3.1.10", "", { "os": "linux", "cpu": "arm64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-UVo5OWO92DPIFhoEkw0tj8IcZyUKOG6NlFs1+tSExz7qrgkr0IloxpLslGMmdc895xxpljrr/FobYktLxyJbcg=="], - - "oh-my-opencode-linux-x64": ["oh-my-opencode-linux-x64@3.1.10", "", { "os": "linux", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-3g99z2FweMzHSUYuzgU0E2H0kjVmtOhPZdavwVqcHQtLQ9NNhwfnIvj3yFBif+kGJphP9RDnByC1oA8Q26UrCg=="], - - "oh-my-opencode-linux-x64-musl": ["oh-my-opencode-linux-x64-musl@3.1.10", "", { "os": "linux", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode" } }, "sha512-2HS9Ju0Cr433lMFJtu/7bShApOJywp+zmVCduQUBWFi3xbX1nm5sJwWDhw1Wx+VcqHEuJl/SQzWPE4vaqkEQng=="], - - "oh-my-opencode-windows-x64": ["oh-my-opencode-windows-x64@3.1.10", "", { "os": "win32", "cpu": "x64", "bin": { "oh-my-opencode": "bin/oh-my-opencode.exe" } }, "sha512-QLncZJSlWmmcuXrAVKIH6a9Om1Ym6pkhG4hAxaD5K5aF1jw2QFsadjoT12VNq2WzQb+Pg5Y6IWvoow0ZR0aEvw=="], - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -304,8 +289,6 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "vscode-jsonrpc": ["vscode-jsonrpc@8.2.1", "", {}, "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], diff --git a/src/hooks/keyword-detector/index.test.ts b/src/hooks/keyword-detector/index.test.ts index 7c28bab0e..5e874ffad 100644 --- a/src/hooks/keyword-detector/index.test.ts +++ b/src/hooks/keyword-detector/index.test.ts @@ -21,6 +21,7 @@ describe("keyword-detector message transform", () => { afterEach(() => { logSpy?.mockRestore() getMainSessionSpy?.mockRestore() + _resetForTesting() }) function createMockPluginInput() { @@ -101,7 +102,7 @@ describe("keyword-detector session filtering", () => { let logSpy: ReturnType beforeEach(() => { - setMainSession(undefined) + _resetForTesting() logCalls = [] logSpy = spyOn(sharedModule, "log").mockImplementation((msg: string, data?: unknown) => { logCalls.push({ msg, data }) @@ -110,7 +111,7 @@ describe("keyword-detector session filtering", () => { afterEach(() => { logSpy?.mockRestore() - setMainSession(undefined) + _resetForTesting() }) function createMockPluginInput(options: { toastCalls?: string[] } = {}) { @@ -246,7 +247,7 @@ describe("keyword-detector word boundary", () => { let logSpy: ReturnType beforeEach(() => { - setMainSession(undefined) + _resetForTesting() logCalls = [] logSpy = spyOn(sharedModule, "log").mockImplementation((msg: string, data?: unknown) => { logCalls.push({ msg, data }) @@ -255,7 +256,7 @@ describe("keyword-detector word boundary", () => { afterEach(() => { logSpy?.mockRestore() - setMainSession(undefined) + _resetForTesting() }) function createMockPluginInput(options: { toastCalls?: string[] } = {}) { @@ -343,7 +344,7 @@ describe("keyword-detector system-reminder filtering", () => { let logSpy: ReturnType beforeEach(() => { - setMainSession(undefined) + _resetForTesting() logCalls = [] logSpy = spyOn(sharedModule, "log").mockImplementation((msg: string, data?: unknown) => { logCalls.push({ msg, data }) @@ -352,7 +353,7 @@ describe("keyword-detector system-reminder filtering", () => { afterEach(() => { logSpy?.mockRestore() - setMainSession(undefined) + _resetForTesting() }) function createMockPluginInput() { @@ -534,7 +535,7 @@ describe("keyword-detector agent-specific ultrawork messages", () => { let logSpy: ReturnType beforeEach(() => { - setMainSession(undefined) + _resetForTesting() logCalls = [] logSpy = spyOn(sharedModule, "log").mockImplementation((msg: string, data?: unknown) => { logCalls.push({ msg, data }) @@ -543,7 +544,7 @@ describe("keyword-detector agent-specific ultrawork messages", () => { afterEach(() => { logSpy?.mockRestore() - setMainSession(undefined) + _resetForTesting() }) function createMockPluginInput() { diff --git a/src/hooks/session-notification.test.ts b/src/hooks/session-notification.test.ts index a19320cca..665482711 100644 --- a/src/hooks/session-notification.test.ts +++ b/src/hooks/session-notification.test.ts @@ -45,7 +45,7 @@ describe("session-notification", () => { afterEach(() => { // #given - cleanup after each test subagentSessions.clear() - setMainSession(undefined) + _resetForTesting() }) test("should not trigger notification for subagent session", async () => {