From 1d187097f376c57dc9877c93f1be7dbfb17d31fe Mon Sep 17 00:00:00 2001 From: Sisyphus Date: Sat, 18 Apr 2026 17:17:23 +0900 Subject: [PATCH] test(tools/skill): cover per-session skill cache invalidation --- src/tools/skill/tools.factory.test.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/tools/skill/tools.factory.test.ts b/src/tools/skill/tools.factory.test.ts index 08942f040..e52f0abb5 100644 --- a/src/tools/skill/tools.factory.test.ts +++ b/src/tools/skill/tools.factory.test.ts @@ -43,6 +43,13 @@ const mockContext: ToolContext = { ask: async () => {}, } +function createMockContext(sessionID: string): ToolContext { + return { + ...mockContext, + sessionID, + } +} + beforeEach(() => { spyOn(skillContent, "getAllSkills").mockImplementation(getAllSkills) spyOn(skillContent, "clearSkillCache").mockImplementation(clearSkillCache) @@ -101,4 +108,24 @@ describe("createSkillTool", () => { // then expect(clearSkillCache.mock.calls.length).toBe(baselineClearSkillCacheCalls) }) + + it("clears the skill discovery cache once per session", async () => { + // given + const baselineClearSkillCacheCalls = clearSkillCache.mock.calls.length + const baselineGetAllSkillsCalls = getAllSkills.mock.calls.length + const sessionAContext = createMockContext("session-a") + const sessionBContext = createMockContext("session-b") + const { createSkillTool } = await import("./tools") + const skillTool = createSkillTool({}) + + // when + await skillTool.execute({ name: "lazy-skill" }, sessionAContext) + await skillTool.execute({ name: "lazy-skill" }, sessionAContext) + await skillTool.execute({ name: "lazy-skill" }, sessionBContext) + await skillTool.execute({ name: "lazy-skill" }, sessionBContext) + + // then + expect(clearSkillCache.mock.calls.length).toBe(baselineClearSkillCacheCalls + 2) + expect(getAllSkills.mock.calls.length).toBe(baselineGetAllSkillsCalls + 4) + }) })