Skip to main content
Glama

n8n-MCP

by 88-888
test-infrastructure.test.tsβ€’4.23 kB
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { nodeFactory, webhookNodeFactory, slackNodeFactory } from '@tests/fixtures/factories/node.factory'; // Mock better-sqlite3 vi.mock('better-sqlite3'); describe('Test Infrastructure', () => { describe('Database Mock', () => { it('should create a mock database instance', async () => { const Database = (await import('better-sqlite3')).default; const db = new Database(':memory:'); expect(Database).toHaveBeenCalled(); expect(db).toBeDefined(); expect(db.prepare).toBeDefined(); expect(db.exec).toBeDefined(); expect(db.close).toBeDefined(); }); it('should handle basic CRUD operations', async () => { const { MockDatabase } = await import('@tests/unit/database/__mocks__/better-sqlite3'); const db = new MockDatabase(); // Test data seeding db._seedData('nodes', [ { id: '1', name: 'test-node', type: 'webhook' } ]); // Test SELECT const selectStmt = db.prepare('SELECT * FROM nodes'); const allNodes = selectStmt.all(); expect(allNodes).toHaveLength(1); expect(allNodes[0]).toEqual({ id: '1', name: 'test-node', type: 'webhook' }); // Test INSERT const insertStmt = db.prepare('INSERT INTO nodes (id, name, type) VALUES (?, ?, ?)'); const result = insertStmt.run({ id: '2', name: 'new-node', type: 'slack' }); expect(result.changes).toBe(1); // Verify insert worked const allNodesAfter = selectStmt.all(); expect(allNodesAfter).toHaveLength(2); }); }); describe('Node Factory', () => { it('should create a basic node definition', () => { const node = nodeFactory.build(); expect(node).toMatchObject({ name: expect.any(String), displayName: expect.any(String), description: expect.any(String), version: expect.any(Number), defaults: { name: expect.any(String) }, inputs: ['main'], outputs: ['main'], properties: expect.any(Array), credentials: [] }); }); it('should create a webhook node', () => { const webhook = webhookNodeFactory.build(); expect(webhook).toMatchObject({ name: 'webhook', displayName: 'Webhook', description: 'Starts the workflow when a webhook is called', group: ['trigger'], properties: expect.arrayContaining([ expect.objectContaining({ name: 'path', type: 'string', required: true }), expect.objectContaining({ name: 'method', type: 'options' }) ]) }); }); it('should create a slack node', () => { const slack = slackNodeFactory.build(); expect(slack).toMatchObject({ name: 'slack', displayName: 'Slack', description: 'Send messages to Slack', group: ['output'], credentials: [ { name: 'slackApi', required: true } ], properties: expect.arrayContaining([ expect.objectContaining({ name: 'resource', type: 'options' }), expect.objectContaining({ name: 'operation', type: 'options', displayOptions: { show: { resource: ['message'] } } }) ]) }); }); it('should allow overriding factory defaults', () => { const customNode = nodeFactory.build({ name: 'custom-node', displayName: 'Custom Node', version: 2 }); expect(customNode.name).toBe('custom-node'); expect(customNode.displayName).toBe('Custom Node'); expect(customNode.version).toBe(2); }); it('should create multiple unique nodes', () => { const nodes = nodeFactory.buildList(5); expect(nodes).toHaveLength(5); const names = nodes.map(n => n.name); const uniqueNames = new Set(names); expect(uniqueNames.size).toBe(5); }); }); });

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