@mseep/falkordb-mcpserver
Version:
Model Context Protocol server for FalkorDB
125 lines (124 loc) • 5.47 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 falkordb_service_1 = require("./falkordb.service");
// Mock the FalkorDB library
jest.mock('falkordb', () => {
const mockSelectGraph = jest.fn();
const mockQuery = jest.fn();
const mockList = jest.fn();
const mockClose = jest.fn();
const mockPing = jest.fn();
return {
FalkorDB: {
connect: jest.fn().mockResolvedValue({
connection: Promise.resolve({
ping: mockPing
}),
selectGraph: mockSelectGraph.mockReturnValue({
query: mockQuery
}),
list: mockList,
close: mockClose
})
},
mockSelectGraph,
mockQuery,
mockList,
mockClose,
mockPing
};
});
describe('FalkorDB Service', () => {
let mockFalkorDB;
beforeAll(() => {
// Access the mocks
mockFalkorDB = require('falkordb');
});
beforeEach(() => {
jest.clearAllMocks();
});
describe('executeQuery', () => {
it('should execute a query on the specified graph', () => __awaiter(void 0, void 0, void 0, function* () {
// Arrange
const graphName = 'testGraph';
const query = 'MATCH (n) RETURN n';
const params = { param1: 'value1' };
const expectedResult = { records: [{ id: 1 }] };
mockFalkorDB.mockQuery.mockResolvedValue(expectedResult);
// Ensure service is initialized (private method, so we need to call a method first)
yield falkordb_service_1.falkorDBService.executeQuery(graphName, query, params).catch(() => { });
// Reset mocks after initialization
jest.clearAllMocks();
// Force client to be available
falkordb_service_1.falkorDBService.client = {
selectGraph: mockFalkorDB.mockSelectGraph
};
// Act
const result = yield falkordb_service_1.falkorDBService.executeQuery(graphName, query, params);
// Assert
expect(mockFalkorDB.mockSelectGraph).toHaveBeenCalledWith(graphName);
expect(mockFalkorDB.mockQuery).toHaveBeenCalledWith(query, params);
expect(result).toEqual(expectedResult);
}));
it('should throw an error if client is not initialized', () => __awaiter(void 0, void 0, void 0, function* () {
// Arrange
falkordb_service_1.falkorDBService.client = null;
// Act & Assert
yield expect(falkordb_service_1.falkorDBService.executeQuery('graph', 'query'))
.rejects
.toThrow('FalkorDB client not initialized');
}));
});
describe('listGraphs', () => {
it('should return a list of graphs', () => __awaiter(void 0, void 0, void 0, function* () {
// Arrange
const expectedGraphs = ['graph1', 'graph2'];
mockFalkorDB.mockList.mockResolvedValue(expectedGraphs);
// Force client to be available
falkordb_service_1.falkorDBService.client = {
list: mockFalkorDB.mockList
};
// Act
const result = yield falkordb_service_1.falkorDBService.listGraphs();
// Assert
expect(mockFalkorDB.mockList).toHaveBeenCalled();
expect(result).toEqual(expectedGraphs);
}));
it('should throw an error if client is not initialized', () => __awaiter(void 0, void 0, void 0, function* () {
// Arrange
falkordb_service_1.falkorDBService.client = null;
// Act & Assert
yield expect(falkordb_service_1.falkorDBService.listGraphs())
.rejects
.toThrow('FalkorDB client not initialized');
}));
});
describe('close', () => {
it('should close the client connection', () => __awaiter(void 0, void 0, void 0, function* () {
// Arrange
falkordb_service_1.falkorDBService.client = {
close: mockFalkorDB.mockClose
};
// Act
yield falkordb_service_1.falkorDBService.close();
// Assert
expect(mockFalkorDB.mockClose).toHaveBeenCalled();
expect(falkordb_service_1.falkorDBService.client).toBeNull();
}));
it('should not throw if client is already null', () => __awaiter(void 0, void 0, void 0, function* () {
// Arrange
falkordb_service_1.falkorDBService.client = null;
// Act & Assert
yield expect(falkordb_service_1.falkorDBService.close()).resolves.not.toThrow();
}));
});
});