63 lines
2.2 KiB
TypeScript
63 lines
2.2 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
import {
|
|
MCP_TOOLS,
|
|
MCP_TOOL_MAP,
|
|
cacheStatsInput,
|
|
cacheFlushInput,
|
|
cacheStatsTool,
|
|
cacheFlushTool,
|
|
} from "../schemas/tools.ts";
|
|
import { createMcpServer } from "../server.ts";
|
|
|
|
vi.mock("../audit.ts", () => ({
|
|
logToolCall: vi.fn().mockResolvedValue(undefined),
|
|
closeAuditDb: vi.fn(),
|
|
}));
|
|
|
|
describe("cache MCP tools", () => {
|
|
it("should be registered in MCP_TOOLS and MCP_TOOL_MAP", () => {
|
|
expect(MCP_TOOLS.find((tool) => tool.name === "omniroute_cache_stats")).toBeDefined();
|
|
expect(MCP_TOOLS.find((tool) => tool.name === "omniroute_cache_flush")).toBeDefined();
|
|
expect(MCP_TOOL_MAP.omniroute_cache_stats).toBeDefined();
|
|
expect(MCP_TOOL_MAP.omniroute_cache_flush).toBeDefined();
|
|
});
|
|
|
|
it("should validate cache tool input schemas", () => {
|
|
expect(cacheStatsInput.safeParse({}).success).toBe(true);
|
|
expect(cacheFlushInput.safeParse({ model: "openai/gpt-4.1" }).success).toBe(true);
|
|
expect(cacheFlushInput.safeParse({ signature: "sig_123" }).success).toBe(true);
|
|
});
|
|
|
|
it("should expose the correct cache scopes", () => {
|
|
expect(cacheStatsTool.scopes).toContain("read:cache");
|
|
expect(cacheFlushTool.scopes).toContain("write:cache");
|
|
});
|
|
});
|
|
|
|
describe("cache MCP tools registration", () => {
|
|
let client: Client;
|
|
|
|
beforeEach(async () => {
|
|
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
const server = createMcpServer();
|
|
await server.connect(serverTransport);
|
|
client = new Client({ name: "cache-tools-test", version: "1.0.0" });
|
|
await client.connect(clientTransport);
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await client.close();
|
|
});
|
|
|
|
it("should appear in tools/list after registration", async () => {
|
|
const { tools } = await client.listTools();
|
|
const names = tools.map((tool) => tool.name);
|
|
|
|
expect(names).toContain("omniroute_cache_stats");
|
|
expect(names).toContain("omniroute_cache_flush");
|
|
expect(tools.length).toBeGreaterThanOrEqual(29);
|
|
});
|
|
});
|