@mseep/falkordb-mcpserver
Version:
Model Context Protocol server for FalkorDB
109 lines (108 loc) • 4.74 kB
JavaScript
;
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
})
}));
}));
});
});