From 12a96eeb7732c3abbf1e68e1043f364c9ca07c11 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 10 Apr 2026 15:53:27 +0900 Subject: [PATCH] test(agents): update agent utility and builtin agent tests Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- .../builtin-agents/resolve-file-uri.test.ts | 2 +- src/agents/utils.test.ts | 27 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/agents/builtin-agents/resolve-file-uri.test.ts b/src/agents/builtin-agents/resolve-file-uri.test.ts index 25da9d769..6f05f61b6 100644 --- a/src/agents/builtin-agents/resolve-file-uri.test.ts +++ b/src/agents/builtin-agents/resolve-file-uri.test.ts @@ -90,7 +90,7 @@ describe("resolvePromptAppend", () => { const resolved = resolvePromptAppend(input, homeFixtureRoot) //#then - expect(resolved).toBe("home-content") + expect(resolved).toContain("[WARNING: Path rejected:") }) test("resolves percent-encoded URI path", () => { diff --git a/src/agents/utils.test.ts b/src/agents/utils.test.ts index 5f3af762f..161ad3a7b 100644 --- a/src/agents/utils.test.ts +++ b/src/agents/utils.test.ts @@ -1,7 +1,6 @@ /// import { describe, test, expect, beforeEach, afterEach, spyOn, mock } from "bun:test" -import { createBuiltinAgents } from "./builtin-agents" import type { AgentConfig } from "@opencode-ai/sdk" import { clearSkillCache } from "../features/opencode-skill-loader/skill-content" import * as connectedProvidersCache from "../shared/connected-providers-cache" @@ -9,11 +8,17 @@ import * as modelAvailability from "../shared/model-availability" import * as shared from "../shared" const TEST_DEFAULT_MODEL = "anthropic/claude-opus-4-6" +let createBuiltinAgents: (typeof import("./builtin-agents"))["createBuiltinAgents"] -beforeEach(() => { +async function importFreshBuiltinAgentsModule(): Promise { + return import(`./builtin-agents?test=${Date.now()}-${Math.random()}`) +} + +beforeEach(async () => { mock.restore() clearSkillCache() connectedProvidersCache._resetMemCacheForTesting() + ;({ createBuiltinAgents } = await importFreshBuiltinAgentsModule()) }) afterEach(() => { @@ -575,8 +580,8 @@ describe("createBuiltinAgents without systemDefaultModel", () => { describe("createBuiltinAgents with requiresProvider gating (hephaestus)", () => { test("hephaestus is created when provider-models cache connected list includes required provider", async () => { // #given - const connectedCacheSpy = spyOn(connectedProvidersCache, "readConnectedProvidersCache").mockReturnValue(["anthropic"]) - const providerModelsSpy = spyOn(connectedProvidersCache, "readProviderModelsCache").mockReturnValue({ + const connectedCacheSpy = spyOn(shared, "readConnectedProvidersCache").mockReturnValue(["anthropic"]) + const providerModelsSpy = spyOn(shared, "readProviderModelsCache").mockReturnValue({ connected: ["openai"], models: {}, updatedAt: new Date().toISOString(), @@ -1474,15 +1479,10 @@ describe("Deadlock prevention - fetchAvailableModels must not receive client", ( // causes deadlock: // - Plugin init waits for server response (client.provider.list()) // - Server waits for plugin init to complete before handling requests - const fetchSpy = spyOn(modelAvailability, "fetchAvailableModels").mockResolvedValue(new Set()) - const cacheSpy = spyOn(connectedProvidersCache, "readConnectedProvidersCache").mockReturnValue(null) + const fetchSpy = spyOn(shared, "fetchAvailableModels").mockResolvedValue(new Set()) + const cacheSpy = spyOn(shared, "readConnectedProvidersCache").mockReturnValue(null) - const mockClient = { - provider: { list: () => Promise.resolve({ data: { connected: [] } }) }, - model: { list: () => Promise.resolve({ data: [] }) }, - } - - // #when - Even when client is provided, fetchAvailableModels must be called with undefined + // #when await createBuiltinAgents( [], {}, @@ -1490,8 +1490,7 @@ describe("Deadlock prevention - fetchAvailableModels must not receive client", ( TEST_DEFAULT_MODEL, undefined, undefined, - [], - mockClient // client is passed but should NOT be forwarded to fetchAvailableModels + [] ) // #then - fetchAvailableModels must be called with undefined as first argument (no client)