Skip to main content
Glama
read-only.test.ts2.54 kB
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { parseArgs } from '../src/cli.js'; import { registerGraphTools } from '../src/graph-tools.js'; import type { GraphClient } from '../src/graph-client.js'; vi.mock('../src/cli.js', () => { const parseArgsMock = vi.fn(); return { parseArgs: parseArgsMock, }; }); vi.mock('../src/generated/client.js', () => { return { api: { endpoints: [ { alias: 'list-mail-messages', method: 'get', path: '/me/messages', parameters: [], }, { alias: 'send-mail', method: 'post', path: '/me/sendMail', parameters: [], }, { alias: 'delete-mail-message', method: 'delete', path: '/me/messages/{message-id}', parameters: [], }, ], }, }; }); vi.mock('../src/logger.js', () => { return { default: { info: vi.fn(), error: vi.fn(), }, }; }); describe('Read-Only Mode', () => { let mockServer: { tool: ReturnType<typeof vi.fn> }; beforeEach(() => { vi.clearAllMocks(); delete process.env.READ_ONLY; mockServer = { tool: vi.fn(), }; }); afterEach(() => { vi.resetAllMocks(); }); it('should respect --read-only flag from CLI', () => { vi.mocked(parseArgs).mockReturnValue({ readOnly: true } as ReturnType<typeof parseArgs>); const options = parseArgs(); expect(options.readOnly).toBe(true); registerGraphTools(mockServer, {} as GraphClient, options.readOnly); expect(mockServer.tool).toHaveBeenCalledTimes(1); const toolCalls = mockServer.tool.mock.calls.map((call: unknown[]) => call[0]); expect(toolCalls).toContain('list-mail-messages'); expect(toolCalls).not.toContain('send-mail'); expect(toolCalls).not.toContain('delete-mail-message'); }); it('should register all endpoints when not in read-only mode', () => { vi.mocked(parseArgs).mockReturnValue({ readOnly: false } as ReturnType<typeof parseArgs>); const options = parseArgs(); expect(options.readOnly).toBe(false); registerGraphTools(mockServer, {} as GraphClient, options.readOnly); expect(mockServer.tool).toHaveBeenCalledTimes(3); const toolCalls = mockServer.tool.mock.calls.map((call: unknown[]) => call[0]); expect(toolCalls).toContain('list-mail-messages'); expect(toolCalls).toContain('send-mail'); expect(toolCalls).toContain('delete-mail-message'); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Softeria/ms-365-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server