UNPKG

@vessl-ai/mcpctl-control-plane

Version:

Vessl MCP Control Plane service for managing distributed jobs.

111 lines (96 loc) 4.19 kB
import { Test, TestingModule } from '@nestjs/testing'; import { TransportType } from '@repo/shared/types/common/transport'; import { ServerRunSpec } from '@repo/shared/types/domain/server'; import { ServerController } from './server.controller'; import { ServerService } from './server.service'; // Mock ServerService const mockServerService = { start: jest.fn(), stopInstance: jest.fn(), restartInstance: jest.fn(), getInstanceByName: jest.fn(), listInstances: jest.fn(), listRunSpecs: jest.fn(), getRunSpecByName: jest.fn(), }; describe('ServerController', () => { let controller: ServerController; let service: typeof mockServerService; const runSpec: ServerRunSpec = { id: 'mock-id', name: 'test-server', resourceType: 'local', transport: { type: TransportType.Stdio, port: 5555 }, command: 'echo hello', env: {}, }; beforeEach(async () => { for (const key of Object.keys(mockServerService)) { // @ts-ignore mockServerService[key].mockReset && mockServerService[key].mockReset(); } const module: TestingModule = await Test.createTestingModule({ controllers: [ServerController], providers: [{ provide: ServerService, useValue: mockServerService }], }).compile(); controller = module.get<ServerController>(ServerController); service = module.get(ServerService); }); it('should be defined', () => { expect(controller).toBeDefined(); }); it('should call startServer and return result', async () => { service.start.mockResolvedValue({ id: 'mock-id' }); const result = await controller.startServer({ runSpec }); expect(service.start).toHaveBeenCalledWith(runSpec); expect(result).toEqual({ id: 'mock-id' }); }); it('should call stopServer and return result', async () => { service.stopInstance.mockResolvedValue({ id: 'mock-id' }); const result = await controller.stopServer('test-server'); expect(service.stopInstance).toHaveBeenCalledWith('test-server'); expect(result).toEqual({ id: 'mock-id' }); }); it('should call restartServer and return result', async () => { service.restartInstance.mockResolvedValue({ id: 'mock-id' }); const result = await controller.restartServer('test-server'); expect(service.restartInstance).toHaveBeenCalledWith('test-server'); expect(result).toEqual({ id: 'mock-id' }); }); it('should call statusServer and return status', async () => { service.getInstanceByName.mockResolvedValue({ status: 'running' }); const result = await controller.statusServer('test-server'); expect(service.getInstanceByName).toHaveBeenCalledWith('test-server'); expect(result).toBe('running'); }); it('should throw if statusServer instance not found', async () => { service.getInstanceByName.mockResolvedValue(undefined); await expect(controller.statusServer('not-exist')).rejects.toThrow( 'Instance not-exist not found', ); }); it('should call listServers and return result', async () => { service.listInstances.mockResolvedValue([{ id: 'mock-id' }]); const result = await controller.listServers(); expect(service.listInstances).toHaveBeenCalled(); expect(result).toEqual([{ id: 'mock-id' }]); }); it('should call listServerSpecs and return result', async () => { service.listRunSpecs.mockResolvedValue([{ id: 'mock-id' }]); const result = await controller.listServerSpecs(); expect(service.listRunSpecs).toHaveBeenCalled(); expect(result).toEqual([{ id: 'mock-id' }]); }); it('should call getServer and return result', async () => { service.getInstanceByName.mockResolvedValue({ id: 'mock-id' }); const result = await controller.getServer('test-server'); expect(service.getInstanceByName).toHaveBeenCalledWith('test-server'); expect(result).toEqual({ id: 'mock-id' }); }); it('should call getServerSpec and return result', async () => { service.getRunSpecByName.mockResolvedValue({ id: 'mock-id' }); const result = await controller.getServerSpec('test-server'); expect(service.getRunSpecByName).toHaveBeenCalledWith('test-server'); expect(result).toEqual({ id: 'mock-id' }); }); });