58 lines
2.1 KiB
TypeScript
58 lines
2.1 KiB
TypeScript
import { afterEach, describe, expect, mock, spyOn, test } from "bun:test"
|
|
import * as fs from "node:fs"
|
|
import { join } from "node:path"
|
|
|
|
const pluginConfigDetectionOptions = {
|
|
basenames: ["oh-my-openagent"],
|
|
legacyBasenames: ["oh-my-opencode"],
|
|
} as const
|
|
|
|
describe("detectPluginConfigFile memoization", () => {
|
|
const testDir = join(__dirname, ".test-detect-plugin-memoization")
|
|
|
|
afterEach(() => {
|
|
mock.restore()
|
|
})
|
|
|
|
test("returns cached result on repeated calls for the same directory", async () => {
|
|
// given
|
|
const existsSync = spyOn(fs, "existsSync").mockImplementation((filePath: fs.PathLike) => {
|
|
return String(filePath).endsWith("oh-my-openagent.jsonc")
|
|
})
|
|
const readdirSync = spyOn(fs, "readdirSync").mockImplementation(() => [])
|
|
|
|
const parserModule = await import(`./jsonc-parser?memoization=${Date.now()}-${Math.random()}`)
|
|
|
|
// when
|
|
const firstResult = parserModule.detectPluginConfigFile(testDir, pluginConfigDetectionOptions)
|
|
const callsAfterFirstResult = existsSync.mock.calls.length
|
|
const secondResult = parserModule.detectPluginConfigFile(testDir, pluginConfigDetectionOptions)
|
|
|
|
// then
|
|
expect(firstResult).toEqual(secondResult)
|
|
expect(existsSync.mock.calls.length).toBe(callsAfterFirstResult)
|
|
expect(readdirSync).toHaveBeenCalledTimes(0)
|
|
})
|
|
|
|
test("clears cached result when requested", async () => {
|
|
// given
|
|
const existsSync = spyOn(fs, "existsSync").mockImplementation((filePath: fs.PathLike) => {
|
|
return String(filePath).endsWith("oh-my-openagent.jsonc")
|
|
})
|
|
const readdirSync = spyOn(fs, "readdirSync").mockImplementation(() => [])
|
|
|
|
const parserModule = await import(`./jsonc-parser?memoization=${Date.now()}-${Math.random()}`)
|
|
|
|
parserModule.detectPluginConfigFile(testDir, pluginConfigDetectionOptions)
|
|
parserModule.clearPluginConfigFileDetectionCache()
|
|
const callsAfterClear = existsSync.mock.calls.length
|
|
|
|
// when
|
|
parserModule.detectPluginConfigFile(testDir, pluginConfigDetectionOptions)
|
|
|
|
// then
|
|
expect(existsSync.mock.calls.length).toBeGreaterThan(callsAfterClear)
|
|
expect(readdirSync).toHaveBeenCalledTimes(0)
|
|
})
|
|
})
|