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
+27 -14
View File
@@ -1,9 +1,13 @@
/// <reference types="bun-types" />
import { beforeEach, describe, expect, it, mock } from "bun:test"
import { afterEach, beforeEach, describe, expect, it, mock, spyOn } from "bun:test"
import type { PluginInput } from "@opencode-ai/plugin"
import type { ImageDimensions, ResizeResult } from "./types"
import * as imageDimensions from "./image-dimensions"
import * as imageResizer from "./image-resizer"
import * as sessionModelState from "../../shared/session-model-state"
import { createReadImageResizerHook } from "./hook"
const mockParseImageDimensions = mock((): ImageDimensions | null => null)
const mockCalculateTargetDimensions = mock((): ImageDimensions | null => null)
@@ -13,20 +17,17 @@ const mockGetSessionModel = mock((_sessionID: string) => ({
modelID: "claude-sonnet-4-6",
} as { providerID: string; modelID: string } | undefined))
mock.module("./image-dimensions", () => ({
parseImageDimensions: mockParseImageDimensions,
}))
let parseImageDimensionsSpy: { mockRestore: () => void } | undefined
let calculateTargetDimensionsSpy: { mockRestore: () => void } | undefined
let resizeImageSpy: { mockRestore: () => void } | undefined
let getSessionModelSpy: { mockRestore: () => void } | undefined
mock.module("./image-resizer", () => ({
calculateTargetDimensions: mockCalculateTargetDimensions,
resizeImage: mockResizeImage,
}))
mock.module("../../shared/session-model-state", () => ({
getSessionModel: mockGetSessionModel,
}))
import { createReadImageResizerHook } from "./hook"
function setupHookSpies(): void {
parseImageDimensionsSpy = spyOn(imageDimensions, "parseImageDimensions").mockImplementation(mockParseImageDimensions)
calculateTargetDimensionsSpy = spyOn(imageResizer, "calculateTargetDimensions").mockImplementation(mockCalculateTargetDimensions)
resizeImageSpy = spyOn(imageResizer, "resizeImage").mockImplementation(mockResizeImage)
getSessionModelSpy = spyOn(sessionModelState, "getSessionModel").mockImplementation(mockGetSessionModel)
}
type ToolOutput = {
title: string
@@ -52,6 +53,7 @@ function createInput(tool: string): { tool: string; sessionID: string; callID: s
describe("createReadImageResizerHook", () => {
beforeEach(() => {
setupHookSpies()
mockParseImageDimensions.mockReset()
mockCalculateTargetDimensions.mockReset()
mockResizeImage.mockReset()
@@ -59,6 +61,17 @@ describe("createReadImageResizerHook", () => {
mockGetSessionModel.mockReturnValue({ providerID: "anthropic", modelID: "claude-sonnet-4-6" })
})
afterEach(() => {
parseImageDimensionsSpy?.mockRestore()
calculateTargetDimensionsSpy?.mockRestore()
resizeImageSpy?.mockRestore()
getSessionModelSpy?.mockRestore()
parseImageDimensionsSpy = undefined
calculateTargetDimensionsSpy = undefined
resizeImageSpy = undefined
getSessionModelSpy = undefined
})
it("skips non-Read tools", async () => {
//#given
const hook = createReadImageResizerHook(createMockContext())