fix(ci): resolve mock.module() cross-file leakage in test suite

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-04-04 02:35:23 +09:00
parent 673b107f53
commit 6acca09bd0
15 changed files with 130 additions and 66 deletions
+17 -8
View File
@@ -1,19 +1,23 @@
declare const require: (name: string) => any
const { afterEach, afterAll, describe, expect, mock, test } = require("bun:test")
mock.module("../shared/connected-providers-cache", () => ({
readConnectedProvidersCache: () => null,
readProviderModelsCache: () => null,
}))
afterAll(() => { mock.restore() })
const { afterEach, describe, expect, spyOn, test } = require("bun:test")
import { createEventHandler } from "./event"
import { createChatMessageHandler } from "./chat-message"
import { _resetForTesting, setMainSession } from "../features/claude-code-session-state"
import { createModelFallbackHook, clearPendingModelFallback } from "../hooks/model-fallback/hook"
import * as connectedProvidersCache from "../shared/connected-providers-cache"
let readConnectedProvidersCacheSpy: { mockRestore: () => void } | undefined
let readProviderModelsCacheSpy: { mockRestore: () => void } | undefined
function setupConnectedProviderCacheMocks(): void {
readConnectedProvidersCacheSpy = spyOn(connectedProvidersCache, "readConnectedProvidersCache").mockReturnValue(null)
readProviderModelsCacheSpy = spyOn(connectedProvidersCache, "readProviderModelsCache").mockReturnValue(null)
}
describe("createEventHandler - model fallback", () => {
const createHandler = (args?: { hooks?: any; pluginConfig?: any }) => {
setupConnectedProviderCacheMocks()
const abortCalls: string[] = []
const promptCalls: string[] = []
@@ -54,6 +58,10 @@ describe("createEventHandler - model fallback", () => {
}
afterEach(() => {
readConnectedProvidersCacheSpy?.mockRestore()
readProviderModelsCacheSpy?.mockRestore()
readConnectedProvidersCacheSpy = undefined
readProviderModelsCacheSpy = undefined
_resetForTesting()
})
@@ -442,6 +450,7 @@ describe("createEventHandler - model fallback", () => {
const modelFallback = createModelFallbackHook()
setupConnectedProviderCacheMocks()
const eventHandler = createEventHandler({
ctx: {
directory: "/tmp",
+24 -10
View File
@@ -1,17 +1,8 @@
declare const require: (name: string) => any
const { afterEach, afterAll, describe, expect, mock, test } = require("bun:test")
const { afterEach, describe, expect, spyOn, test } = require("bun:test")
const PROVIDER_ID = "cliproxyapi"
mock.module("../shared/connected-providers-cache", () => ({
readConnectedProvidersCache: () => [PROVIDER_ID],
readProviderModelsCache: () => ({
connected: [PROVIDER_ID],
}),
}))
afterAll(() => { mock.restore() })
import { createEventHandler } from "./event"
import { createChatMessageHandler } from "./chat-message"
import { createModelFallbackHook } from "../hooks/model-fallback/hook"
@@ -20,6 +11,7 @@ import type { RuntimeFallbackPluginInput } from "../hooks/runtime-fallback/types
import { _resetForTesting } from "../features/claude-code-session-state"
import { _resetForTesting as _resetModelFallbackForTesting } from "../hooks/model-fallback/hook"
import { SessionCategoryRegistry } from "../shared/session-category-registry"
import * as connectedProvidersCache from "../shared/connected-providers-cache"
type EventHandlerArgs = Parameters<typeof createEventHandler>[0]
type ChatMessageHandlerArgs = Parameters<typeof createChatMessageHandler>[0]
@@ -92,6 +84,9 @@ type PromptAsyncCall = {
parts?: Array<{ type?: string; text?: string }>
}
let readConnectedProvidersCacheSpy: { mockRestore: () => void } | undefined
let readProviderModelsCacheSpy: { mockRestore: () => void } | undefined
function createPluginConfig(mode: HarnessMode) {
return {
agents: {
@@ -114,6 +109,7 @@ function createHarness(args: {
promptAsyncImpl?: (call: PromptAsyncCall) => Promise<unknown>
sessionTimeoutMs?: number
}) {
setupConnectedProviderCacheMocks()
const abortCalls: string[] = []
const promptCalls: string[] = []
const promptAsyncCalls: PromptAsyncCall[] = []
@@ -353,6 +349,24 @@ async function triggerAssistantMessageError(
}))
}
afterEach(() => {
readConnectedProvidersCacheSpy?.mockRestore()
readProviderModelsCacheSpy?.mockRestore()
readConnectedProvidersCacheSpy = undefined
readProviderModelsCacheSpy = undefined
})
function setupConnectedProviderCacheMocks(): void {
readConnectedProvidersCacheSpy = spyOn(connectedProvidersCache, "readConnectedProvidersCache").mockReturnValue([
PROVIDER_ID,
])
readProviderModelsCacheSpy = spyOn(connectedProvidersCache, "readProviderModelsCache").mockReturnValue({
connected: [PROVIDER_ID],
models: {},
updatedAt: new Date(0).toISOString(),
})
}
afterEach(() => {
_resetForTesting()
_resetModelFallbackForTesting()