UNPKG

@mseep/falkordb-mcpserver

Version:

Model Context Protocol server for FalkorDB

109 lines (108 loc) 4.74 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const mcp_controller_1 = require("./mcp.controller"); const falkordb_service_1 = require("../services/falkordb.service"); // Mock the falkorDBService jest.mock('../services/falkordb.service', () => ({ falkorDBService: { executeQuery: jest.fn(), listGraphs: jest.fn() } })); describe('MCP Controller', () => { let mockRequest; let mockResponse; let mockJson; let mockStatus; beforeEach(() => { // Reset mocks jest.clearAllMocks(); // Set up response mock mockJson = jest.fn().mockReturnValue({}); mockStatus = jest.fn().mockReturnThis(); mockResponse = { json: mockJson, status: mockStatus }; }); describe('processContextRequest', () => { test('should return 400 if query is missing', () => __awaiter(void 0, void 0, void 0, function* () { // Arrange mockRequest = { body: { graphName: 'testGraph' } }; // Act yield mcp_controller_1.mcpController.processContextRequest(mockRequest, mockResponse); // Assert expect(mockStatus).toHaveBeenCalledWith(400); expect(mockJson).toHaveBeenCalledWith({ error: 'Query is required' }); })); test('should return 400 if graphName is missing', () => __awaiter(void 0, void 0, void 0, function* () { // Arrange mockRequest = { body: { query: 'MATCH (n) RETURN n' } }; // Act yield mcp_controller_1.mcpController.processContextRequest(mockRequest, mockResponse); // Assert expect(mockStatus).toHaveBeenCalledWith(400); expect(mockJson).toHaveBeenCalledWith({ error: 'Graph name is required' }); })); test('should execute query and return results', () => __awaiter(void 0, void 0, void 0, function* () { // Arrange const mockQueryResult = { records: [{ id: 1, name: 'test' }] }; falkordb_service_1.falkorDBService.executeQuery.mockResolvedValue(mockQueryResult); mockRequest = { body: { graphName: 'testGraph', query: 'MATCH (n) RETURN n', params: { param1: 'value1' } } }; // Act yield mcp_controller_1.mcpController.processContextRequest(mockRequest, mockResponse); // Assert expect(falkordb_service_1.falkorDBService.executeQuery).toHaveBeenCalledWith('testGraph', 'MATCH (n) RETURN n', { param1: 'value1' }); expect(mockStatus).toHaveBeenCalledWith(200); expect(mockJson).toHaveBeenCalledWith(expect.objectContaining({ data: mockQueryResult, metadata: expect.any(Object) })); })); }); describe('listGraphs', () => { test('should return list of graphs', () => __awaiter(void 0, void 0, void 0, function* () { // Arrange const mockGraphs = ['graph1', 'graph2']; falkordb_service_1.falkorDBService.listGraphs.mockResolvedValue(mockGraphs); mockRequest = {}; // Act yield mcp_controller_1.mcpController.listGraphs(mockRequest, mockResponse); // Assert expect(falkordb_service_1.falkorDBService.listGraphs).toHaveBeenCalled(); expect(mockStatus).toHaveBeenCalledWith(200); expect(mockJson).toHaveBeenCalledWith(expect.objectContaining({ data: expect.arrayContaining([ expect.objectContaining({ name: 'graph1' }), expect.objectContaining({ name: 'graph2' }) ]), metadata: expect.objectContaining({ count: 2 }) })); })); }); });