Skip to main content
Glama

n8n-MCP

by 88-888
console-manager.test.tsβ€’8.55 kB
import { describe, test, expect, beforeEach, afterEach, vi } from 'vitest'; import { ConsoleManager, consoleManager } from '../../../src/utils/console-manager'; describe('ConsoleManager', () => { let manager: ConsoleManager; let originalEnv: string | undefined; beforeEach(() => { manager = new ConsoleManager(); originalEnv = process.env.MCP_MODE; // Reset console methods to originals before each test manager.restore(); }); afterEach(() => { // Clean up after each test manager.restore(); if (originalEnv !== undefined) { process.env.MCP_MODE = originalEnv as "test" | "http" | "stdio" | undefined; } else { delete process.env.MCP_MODE; } delete process.env.MCP_REQUEST_ACTIVE; }); describe('silence method', () => { test('should silence console methods when in HTTP mode', () => { process.env.MCP_MODE = 'http'; const originalLog = console.log; const originalError = console.error; manager.silence(); expect(console.log).not.toBe(originalLog); expect(console.error).not.toBe(originalError); expect(manager.isActive).toBe(true); expect(process.env.MCP_REQUEST_ACTIVE).toBe('true'); }); test('should not silence when not in HTTP mode', () => { process.env.MCP_MODE = 'stdio'; const originalLog = console.log; manager.silence(); expect(console.log).toBe(originalLog); expect(manager.isActive).toBe(false); }); test('should not silence if already silenced', () => { process.env.MCP_MODE = 'http'; manager.silence(); const firstSilencedLog = console.log; manager.silence(); // Call again expect(console.log).toBe(firstSilencedLog); expect(manager.isActive).toBe(true); }); test('should silence all console methods', () => { process.env.MCP_MODE = 'http'; const originalMethods = { log: console.log, error: console.error, warn: console.warn, info: console.info, debug: console.debug, trace: console.trace }; manager.silence(); Object.values(originalMethods).forEach(originalMethod => { const currentMethod = Object.values(console).find(method => method === originalMethod); expect(currentMethod).toBeUndefined(); }); }); }); describe('restore method', () => { test('should restore console methods after silencing', () => { process.env.MCP_MODE = 'http'; const originalLog = console.log; const originalError = console.error; manager.silence(); expect(console.log).not.toBe(originalLog); manager.restore(); expect(console.log).toBe(originalLog); expect(console.error).toBe(originalError); expect(manager.isActive).toBe(false); expect(process.env.MCP_REQUEST_ACTIVE).toBe('false'); }); test('should not restore if not silenced', () => { const originalLog = console.log; manager.restore(); // Call without silencing first expect(console.log).toBe(originalLog); expect(manager.isActive).toBe(false); }); test('should restore all console methods', () => { process.env.MCP_MODE = 'http'; const originalMethods = { log: console.log, error: console.error, warn: console.warn, info: console.info, debug: console.debug, trace: console.trace }; manager.silence(); manager.restore(); expect(console.log).toBe(originalMethods.log); expect(console.error).toBe(originalMethods.error); expect(console.warn).toBe(originalMethods.warn); expect(console.info).toBe(originalMethods.info); expect(console.debug).toBe(originalMethods.debug); expect(console.trace).toBe(originalMethods.trace); }); }); describe('wrapOperation method', () => { test('should wrap synchronous operations', async () => { process.env.MCP_MODE = 'http'; const testValue = 'test-result'; const operation = vi.fn(() => testValue); const result = await manager.wrapOperation(operation); expect(result).toBe(testValue); expect(operation).toHaveBeenCalledOnce(); expect(manager.isActive).toBe(false); // Should be restored after operation }); test('should wrap asynchronous operations', async () => { process.env.MCP_MODE = 'http'; const testValue = 'async-result'; const operation = vi.fn(async () => { await new Promise(resolve => setTimeout(resolve, 10)); return testValue; }); const result = await manager.wrapOperation(operation); expect(result).toBe(testValue); expect(operation).toHaveBeenCalledOnce(); expect(manager.isActive).toBe(false); // Should be restored after operation }); test('should restore console even if synchronous operation throws', async () => { process.env.MCP_MODE = 'http'; const error = new Error('test error'); const operation = vi.fn(() => { throw error; }); await expect(manager.wrapOperation(operation)).rejects.toThrow('test error'); expect(manager.isActive).toBe(false); // Should be restored even after error }); test('should restore console even if async operation throws', async () => { process.env.MCP_MODE = 'http'; const error = new Error('async test error'); const operation = vi.fn(async () => { throw error; }); await expect(manager.wrapOperation(operation)).rejects.toThrow('async test error'); expect(manager.isActive).toBe(false); // Should be restored even after error }); test('should handle promise rejection properly', async () => { process.env.MCP_MODE = 'http'; const error = new Error('promise rejection'); const operation = vi.fn(() => Promise.reject(error)); await expect(manager.wrapOperation(operation)).rejects.toThrow('promise rejection'); expect(manager.isActive).toBe(false); // Should be restored even after rejection }); }); describe('isActive getter', () => { test('should return false initially', () => { expect(manager.isActive).toBe(false); }); test('should return true when silenced', () => { process.env.MCP_MODE = 'http'; manager.silence(); expect(manager.isActive).toBe(true); }); test('should return false after restore', () => { process.env.MCP_MODE = 'http'; manager.silence(); manager.restore(); expect(manager.isActive).toBe(false); }); }); describe('Singleton instance', () => { test('should export a singleton instance', () => { expect(consoleManager).toBeInstanceOf(ConsoleManager); }); test('should work with singleton instance', () => { process.env.MCP_MODE = 'http'; const originalLog = console.log; consoleManager.silence(); expect(console.log).not.toBe(originalLog); expect(consoleManager.isActive).toBe(true); consoleManager.restore(); expect(console.log).toBe(originalLog); expect(consoleManager.isActive).toBe(false); }); }); describe('Edge cases', () => { test('should handle undefined MCP_MODE', () => { delete process.env.MCP_MODE; const originalLog = console.log; manager.silence(); expect(console.log).toBe(originalLog); expect(manager.isActive).toBe(false); }); test('should handle empty MCP_MODE', () => { process.env.MCP_MODE = '' as any; const originalLog = console.log; manager.silence(); expect(console.log).toBe(originalLog); expect(manager.isActive).toBe(false); }); test('should silence and restore multiple times', () => { process.env.MCP_MODE = 'http'; const originalLog = console.log; // First cycle manager.silence(); expect(manager.isActive).toBe(true); manager.restore(); expect(manager.isActive).toBe(false); expect(console.log).toBe(originalLog); // Second cycle manager.silence(); expect(manager.isActive).toBe(true); manager.restore(); expect(manager.isActive).toBe(false); expect(console.log).toBe(originalLog); }); }); });

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/88-888/n8n-mcp'

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