google-docs-mcp / src /tools /index.test.ts
iFightDucks's picture
Initial HF Space deploy: a-bonus/google-docs-mcp with HF metadata
7dc28be
import type { FastMCP } from 'fastmcp';
import { describe, expect, it } from 'vitest';
import { parseEnabledToolGroups, registerAllTools, TOOL_GROUPS } from './index.js';
type ToolConfig = Parameters<FastMCP['addTool']>[0];
function captureTools(groups: Parameters<typeof registerAllTools>[1]) {
const tools: ToolConfig[] = [];
const server = {
addTool: (tool: ToolConfig) => {
tools.push(tool);
},
};
registerAllTools(server as FastMCP, groups);
return tools.map((tool) => tool.name);
}
describe('parseEnabledToolGroups', () => {
it('defaults to every tool group', () => {
expect(parseEnabledToolGroups(undefined)).toEqual([...TOOL_GROUPS]);
expect(parseEnabledToolGroups(' ')).toEqual([...TOOL_GROUPS]);
});
it('normalizes comma-separated tool group names in default order', () => {
expect(parseEnabledToolGroups('sheets, docs, sheets')).toEqual(['docs', 'sheets']);
});
it('treats all as the default full registration', () => {
expect(parseEnabledToolGroups('all')).toEqual([...TOOL_GROUPS]);
});
it('rejects unknown tool groups', () => {
expect(() => parseEnabledToolGroups('docs,unknown')).toThrow('Unknown MCP_TOOL_GROUPS');
});
});
describe('registerAllTools', () => {
it('registers only the selected groups', () => {
const toolNames = captureTools(['docs']);
expect(toolNames).toContain('readDocument');
expect(toolNames).toContain('appendText');
expect(toolNames).not.toContain('listSpreadsheets');
expect(toolNames).not.toContain('sendEmail');
});
it('can combine multiple selected groups', () => {
const toolNames = captureTools(['docs', 'sheets']);
expect(toolNames).toContain('readDocument');
expect(toolNames).toContain('listSpreadsheets');
expect(toolNames).not.toContain('sendEmail');
});
});