fix(server): align MCP and model-resolver tests with current API

mcp-server tests invoked registered tools via .handler, but the MCP
SDK exposes the callable as .callback. model-resolver now passes
force: false to fetchModels; widen the spy matcher to match.
This commit is contained in:
Mohamed Boudra
2026-04-21 21:29:23 +07:00
parent a201e5a853
commit 006d57d546
2 changed files with 31 additions and 30 deletions
@@ -349,7 +349,7 @@ describe("create_agent MCP tool", () => {
expect(providerWithEmptyProvider.success).toBe(false); expect(providerWithEmptyProvider.success).toBe(false);
await expect( await expect(
tool.handler({ tool.callback({
cwd: existingCwd, cwd: existingCwd,
mode: "default", mode: "default",
title: "Short title", title: "Short title",
@@ -399,7 +399,7 @@ describe("create_agent MCP tool", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["create_worktree"]; const tool = (server as any)._registeredTools["create_worktree"];
await expect(tool.handler({})).rejects.toThrow( await expect(tool.callback({})).rejects.toThrow(
"create_worktree requires branchName, refName, or githubPrNumber", "create_worktree requires branchName, refName, or githubPrNumber",
); );
}); });
@@ -413,7 +413,7 @@ describe("create_agent MCP tool", () => {
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await expect( await expect(
tool.handler({ tool.callback({
cwd: "/path/that/does/not/exist", cwd: "/path/that/does/not/exist",
title: "Short title", title: "Short title",
provider: "codex/gpt-5.4", provider: "codex/gpt-5.4",
@@ -435,7 +435,7 @@ describe("create_agent MCP tool", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await tool.handler({ await tool.callback({
cwd: existingCwd, cwd: existingCwd,
title: " Fix auth bug ", title: " Fix auth bug ",
provider: "codex/gpt-5.4", provider: "codex/gpt-5.4",
@@ -465,7 +465,7 @@ describe("create_agent MCP tool", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await tool.handler({ await tool.callback({
cwd: existingCwd, cwd: existingCwd,
title: " Fix auth ", title: " Fix auth ",
provider: "codex/gpt-5.4", provider: "codex/gpt-5.4",
@@ -494,7 +494,7 @@ describe("create_agent MCP tool", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await tool.handler({ await tool.callback({
cwd: existingCwd, cwd: existingCwd,
title: "Config test", title: "Config test",
mode: "default", mode: "default",
@@ -556,7 +556,7 @@ describe("create_agent MCP tool", () => {
logger, logger,
}); });
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await tool.handler({ await tool.callback({
cwd: repoDir, cwd: repoDir,
title: "Worktree agent", title: "Worktree agent",
provider: "codex/gpt-5.4", provider: "codex/gpt-5.4",
@@ -610,7 +610,7 @@ describe("create_agent MCP tool", () => {
logger, logger,
}); });
const tool = (server as any)._registeredTools["create_worktree"]; const tool = (server as any)._registeredTools["create_worktree"];
const response = await tool.handler({ const response = await tool.callback({
cwd: repoDir, cwd: repoDir,
branchName: "tool-worktree", branchName: "tool-worktree",
baseBranch: "main", baseBranch: "main",
@@ -665,14 +665,14 @@ describe("create_agent MCP tool", () => {
}); });
const createTool = (server as any)._registeredTools["create_worktree"]; const createTool = (server as any)._registeredTools["create_worktree"];
const archiveTool = (server as any)._registeredTools["archive_worktree"]; const archiveTool = (server as any)._registeredTools["archive_worktree"];
const created = await createTool.handler({ const created = await createTool.callback({
cwd: repoDir, cwd: repoDir,
branchName: "archive-tool-worktree", branchName: "archive-tool-worktree",
baseBranch: "main", baseBranch: "main",
}); });
workspaceGitService.getSnapshot.mockClear(); workspaceGitService.getSnapshot.mockClear();
await archiveTool.handler({ await archiveTool.callback({
cwd: repoDir, cwd: repoDir,
worktreePath: created.structuredContent.worktreePath, worktreePath: created.structuredContent.worktreePath,
}); });
@@ -706,7 +706,7 @@ describe("create_agent MCP tool", () => {
}); });
const tool = (server as any)._registeredTools["list_worktrees"]; const tool = (server as any)._registeredTools["list_worktrees"];
const response = await tool.handler({ cwd: "/tmp/repo" }); const response = await tool.callback({ cwd: "/tmp/repo" });
expect(workspaceGitService.listWorktrees).toHaveBeenCalledWith("/tmp/repo", { expect(workspaceGitService.listWorktrees).toHaveBeenCalledWith("/tmp/repo", {
reason: "mcp:list-worktrees", reason: "mcp:list-worktrees",
@@ -768,7 +768,7 @@ describe("create_agent MCP tool", () => {
}); });
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await tool.handler({ await tool.callback({
cwd: "subdir", cwd: "subdir",
title: "Child", title: "Child",
provider: "codex/gpt-5.4", provider: "codex/gpt-5.4",
@@ -807,7 +807,7 @@ describe("create_agent MCP tool", () => {
logger, logger,
}); });
const tool = (server as any)._registeredTools["create_agent"]; const tool = (server as any)._registeredTools["create_agent"];
await tool.handler({ await tool.callback({
cwd: existingCwd, cwd: existingCwd,
title: "Injected config test", title: "Injected config test",
mode: "default", mode: "default",
@@ -840,7 +840,7 @@ describe("create_schedule MCP tool", () => {
}); });
const tool = (server as any)._registeredTools["create_schedule"]; const tool = (server as any)._registeredTools["create_schedule"];
const response = await tool.handler({ const response = await tool.callback({
prompt: "say hello", prompt: "say hello",
every: "5m", every: "5m",
name: "Default schedule", name: "Default schedule",
@@ -878,12 +878,12 @@ describe("create_schedule MCP tool", () => {
}); });
const tool = (server as any)._registeredTools["create_schedule"]; const tool = (server as any)._registeredTools["create_schedule"];
await tool.handler({ await tool.callback({
prompt: "say hello", prompt: "say hello",
every: "5m", every: "5m",
provider: "codex", provider: "codex",
}); });
await tool.handler({ await tool.callback({
prompt: "say hello again", prompt: "say hello again",
every: "10m", every: "10m",
provider: "codex/gpt-5.4", provider: "codex/gpt-5.4",
@@ -944,7 +944,7 @@ describe("provider listing MCP tool", () => {
logger, logger,
}); });
const tool = (server as any)._registeredTools["list_providers"]; const tool = (server as any)._registeredTools["list_providers"];
const response = await tool.handler({}); const response = await tool.callback({});
expect(response.structuredContent).toEqual({ expect(response.structuredContent).toEqual({
providers: [ providers: [
@@ -980,7 +980,7 @@ describe("speak MCP tool", () => {
const tool = (server as any)._registeredTools["speak"]; const tool = (server as any)._registeredTools["speak"];
expect(tool).toBeDefined(); expect(tool).toBeDefined();
await tool.handler({ text: "Hello from voice agent." }); await tool.callback({ text: "Hello from voice agent." });
expect(speak).toHaveBeenCalledWith( expect(speak).toHaveBeenCalledWith(
expect.objectContaining({ expect.objectContaining({
text: "Hello from voice agent.", text: "Hello from voice agent.",
@@ -1000,7 +1000,7 @@ describe("speak MCP tool", () => {
logger, logger,
}); });
const tool = (server as any)._registeredTools["speak"]; const tool = (server as any)._registeredTools["speak"];
await expect(tool.handler({ text: "Hello." })).rejects.toThrow( await expect(tool.callback({ text: "Hello." })).rejects.toThrow(
"No speak handler registered for caller agent", "No speak handler registered for caller agent",
); );
}); });
@@ -1036,7 +1036,7 @@ describe("agent snapshot MCP serialization", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({}); const response = await tool.callback({});
const structured = response.structuredContent; const structured = response.structuredContent;
expect(structured).toEqual({ expect(structured).toEqual({
@@ -1088,7 +1088,7 @@ describe("agent snapshot MCP serialization", () => {
} as any, } as any,
}); });
const tool = (server as any)._registeredTools["get_agent_status"]; const tool = (server as any)._registeredTools["get_agent_status"];
const response = await tool.handler({ agentId: "archived-agent" }); const response = await tool.callback({ agentId: "archived-agent" });
expect(response.structuredContent).toEqual({ expect(response.structuredContent).toEqual({
status: "closed", status: "closed",
@@ -1144,7 +1144,7 @@ describe("agent snapshot MCP serialization", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["get_agent_status"]; const tool = (server as any)._registeredTools["get_agent_status"];
const response = await tool.handler({ agentId: "full-detail-agent" }); const response = await tool.callback({ agentId: "full-detail-agent" });
const snapshot = response.structuredContent.snapshot; const snapshot = response.structuredContent.snapshot;
const parsed = AgentSnapshotPayloadSchema.safeParse(snapshot); const parsed = AgentSnapshotPayloadSchema.safeParse(snapshot);
@@ -1220,7 +1220,7 @@ describe("agent snapshot MCP serialization", () => {
}); });
const tool = (server as any)._registeredTools["get_agent_status"]; const tool = (server as any)._registeredTools["get_agent_status"];
await expect(tool.handler({ agentId: "internal-agent" })).rejects.toThrow( await expect(tool.callback({ agentId: "internal-agent" })).rejects.toThrow(
"Agent internal-agent not found", "Agent internal-agent not found",
); );
}); });
@@ -1264,7 +1264,7 @@ describe("agent snapshot MCP serialization", () => {
callerAgentId: "caller-agent", callerAgentId: "caller-agent",
}); });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({}); const response = await tool.callback({});
expect(response.structuredContent.agents.map((agent: { id: string }) => agent.id)).toEqual([ expect(response.structuredContent.agents.map((agent: { id: string }) => agent.id)).toEqual([
"in-cwd", "in-cwd",
@@ -1314,7 +1314,7 @@ describe("agent snapshot MCP serialization", () => {
} as any, } as any,
}); });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({ const response = await tool.callback({
cwd: "/tmp/target", cwd: "/tmp/target",
includeArchived: true, includeArchived: true,
sinceHours: 48, sinceHours: 48,
@@ -1355,7 +1355,7 @@ describe("agent snapshot MCP serialization", () => {
} as any, } as any,
}); });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({ includeArchived: true }); const response = await tool.callback({ includeArchived: true });
const agentIds = response.structuredContent.agents.map((agent: { id: string }) => agent.id); const agentIds = response.structuredContent.agents.map((agent: { id: string }) => agent.id);
expect(agentIds).toHaveLength(50); expect(agentIds).toHaveLength(50);
@@ -1398,7 +1398,7 @@ describe("agent snapshot MCP serialization", () => {
} as any, } as any,
}); });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({ cwd: "/tmp/repo", includeArchived: true }); const response = await tool.callback({ cwd: "/tmp/repo", includeArchived: true });
const item = response.structuredContent.agents[0]; const item = response.structuredContent.agents[0];
expect(item).toEqual({ expect(item).toEqual({
@@ -1471,7 +1471,7 @@ describe("agent snapshot MCP serialization", () => {
const server = await createAgentMcpServer({ agentManager, agentStorage, logger }); const server = await createAgentMcpServer({ agentManager, agentStorage, logger });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({}); const response = await tool.callback({});
expect(response.structuredContent.agents.map((agent: { id: string }) => agent.id)).toEqual([ expect(response.structuredContent.agents.map((agent: { id: string }) => agent.id)).toEqual([
"idle-attention-oldest", "idle-attention-oldest",
@@ -1506,7 +1506,7 @@ describe("agent snapshot MCP serialization", () => {
} as any, } as any,
}); });
const tool = (server as any)._registeredTools["list_agents"]; const tool = (server as any)._registeredTools["list_agents"];
const response = await tool.handler({ includeArchived: true }); const response = await tool.callback({ includeArchived: true });
const parsed = z.array(AgentListItemPayloadSchema).safeParse(response.structuredContent.agents); const parsed = z.array(AgentListItemPayloadSchema).safeParse(response.structuredContent.agents);
if (!parsed.success) { if (!parsed.success) {
@@ -1546,7 +1546,7 @@ describe("agent snapshot MCP serialization", () => {
} as any, } as any,
}); });
const tool = (server as any)._registeredTools["get_agent_activity"]; const tool = (server as any)._registeredTools["get_agent_activity"];
const response = await tool.handler({ agentId: "archived-activity-agent" }); const response = await tool.callback({ agentId: "archived-activity-agent" });
expect(response.structuredContent).toEqual( expect(response.structuredContent).toEqual(
expect.objectContaining({ expect.objectContaining({
@@ -49,6 +49,7 @@ describe("resolveAgentModel", () => {
expect(result).toBe("claude-3.5-sonnet"); expect(result).toBe("claude-3.5-sonnet");
expect(fetchModels).toHaveBeenCalledWith({ expect(fetchModels).toHaveBeenCalledWith({
cwd: expect.stringMatching(/repo$/), cwd: expect.stringMatching(/repo$/),
force: false,
}); });
}); });