UNPKG

@tiberriver256/mcp-server-azure-devops

Version:

Azure DevOps reference server for the Model Context Protocol (MCP)

131 lines 5.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("./index"); const get_project_1 = require("./get-project"); const get_project_details_1 = require("./get-project-details"); const list_projects_1 = require("./list-projects"); // Mock the imported modules jest.mock('./get-project', () => ({ getProject: jest.fn(), })); jest.mock('./get-project-details', () => ({ getProjectDetails: jest.fn(), })); jest.mock('./list-projects', () => ({ listProjects: jest.fn(), })); describe('Projects Request Handlers', () => { const mockConnection = {}; describe('isProjectsRequest', () => { it('should return true for projects requests', () => { const validTools = [ 'list_projects', 'get_project', 'get_project_details', ]; validTools.forEach((tool) => { const request = { params: { name: tool, arguments: {} }, method: 'tools/call', }; expect((0, index_1.isProjectsRequest)(request)).toBe(true); }); }); it('should return false for non-projects requests', () => { const request = { params: { name: 'list_work_items', arguments: {} }, method: 'tools/call', }; expect((0, index_1.isProjectsRequest)(request)).toBe(false); }); }); describe('handleProjectsRequest', () => { it('should handle list_projects request', async () => { const mockProjects = [ { id: '1', name: 'Project 1' }, { id: '2', name: 'Project 2' }, ]; list_projects_1.listProjects.mockResolvedValue(mockProjects); const request = { params: { name: 'list_projects', arguments: { top: 10, }, }, method: 'tools/call', }; const response = await (0, index_1.handleProjectsRequest)(mockConnection, request); expect(response.content).toHaveLength(1); expect(JSON.parse(response.content[0].text)).toEqual(mockProjects); expect(list_projects_1.listProjects).toHaveBeenCalledWith(mockConnection, expect.objectContaining({ top: 10, })); }); it('should handle get_project request', async () => { const mockProject = { id: '1', name: 'Project 1' }; get_project_1.getProject.mockResolvedValue(mockProject); const request = { params: { name: 'get_project', arguments: { projectId: 'Project 1', }, }, method: 'tools/call', }; const response = await (0, index_1.handleProjectsRequest)(mockConnection, request); expect(response.content).toHaveLength(1); expect(JSON.parse(response.content[0].text)).toEqual(mockProject); expect(get_project_1.getProject).toHaveBeenCalledWith(mockConnection, 'Project 1'); }); it('should handle get_project_details request', async () => { const mockProjectDetails = { id: '1', name: 'Project 1', teams: [{ id: 'team1', name: 'Team 1' }], }; get_project_details_1.getProjectDetails.mockResolvedValue(mockProjectDetails); const request = { params: { name: 'get_project_details', arguments: { projectId: 'Project 1', includeTeams: true, }, }, method: 'tools/call', }; const response = await (0, index_1.handleProjectsRequest)(mockConnection, request); expect(response.content).toHaveLength(1); expect(JSON.parse(response.content[0].text)).toEqual(mockProjectDetails); expect(get_project_details_1.getProjectDetails).toHaveBeenCalledWith(mockConnection, expect.objectContaining({ projectId: 'Project 1', includeTeams: true, })); }); it('should throw error for unknown tool', async () => { const request = { params: { name: 'unknown_tool', arguments: {}, }, method: 'tools/call', }; await expect((0, index_1.handleProjectsRequest)(mockConnection, request)).rejects.toThrow('Unknown projects tool'); }); it('should propagate errors from project functions', async () => { const mockError = new Error('Test error'); list_projects_1.listProjects.mockRejectedValue(mockError); const request = { params: { name: 'list_projects', arguments: {}, }, method: 'tools/call', }; await expect((0, index_1.handleProjectsRequest)(mockConnection, request)).rejects.toThrow(mockError); }); }); }); //# sourceMappingURL=index.spec.unit.js.map