google-docs-mcp / src /tools /sheets /listGoogleSheets.test.ts
iFightDucks's picture
Initial HF Space deploy: a-bonus/google-docs-mcp with HF metadata
7dc28be
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { getDriveClient } from '../../clients.js';
import { register } from './listGoogleSheets.js';
vi.mock('../../clients.js', () => ({
getDriveClient: vi.fn(),
}));
const mockGetDriveClient = vi.mocked(getDriveClient);
const mockLog = { info: vi.fn(), error: vi.fn(), warn: vi.fn() };
let toolExecute: (args: any, context: any) => Promise<string>;
let filesList: ReturnType<typeof vi.fn>;
describe('listGoogleSheets', () => {
beforeEach(() => {
vi.clearAllMocks();
filesList = vi.fn(async () => ({ data: { files: [] } }));
mockGetDriveClient.mockResolvedValue({ files: { list: filesList } } as any);
const fakeServer = { addTool: (config: any) => (toolExecute = config.execute) };
register(fakeServer as any);
});
it('escapes query text before interpolating it into the Drive query', async () => {
await toolExecute(
{
query: "Bob's \\ budget",
maxResults: 10,
orderBy: 'modifiedTime',
},
{ log: mockLog }
);
const request = filesList.mock.calls[0][0];
expect(request.q).toContain("name contains 'Bob\\'s \\\\ budget'");
expect(request.q).toContain("fullText contains 'Bob\\'s \\\\ budget'");
});
});