const { addOpenAPISpecs, transformSpec } = require('./addOpenAPISpecs'); const { loadSpecs } = require('./loadSpecs'); const { createOpenAPIPlugin } = require('../dynamic/OpenAPIPlugin'); jest.mock('./loadSpecs'); jest.mock('../dynamic/OpenAPIPlugin'); describe('transformSpec', () => { it('should transform input spec to a desired format', () => { const input = { name_for_human: 'Human Name', name_for_model: 'Model Name', description_for_human: 'Human Description', logo_url: 'https://example.com/logo.png', }; const expectedOutput = { name: 'Human Name', pluginKey: 'Model Name', description: 'Human Description', icon: 'https://example.com/logo.png', isAuthRequired: 'false', authConfig: [], }; expect(transformSpec(input)).toEqual(expectedOutput); }); it('should use default icon if logo_url is not provided', () => { const input = { name_for_human: 'Human Name', name_for_model: 'Model Name', description_for_human: 'Human Description', }; const expectedOutput = { name: 'Human Name', pluginKey: 'Model Name', description: 'Human Description', icon: 'https://placehold.co/70x70.png', isAuthRequired: 'false', authConfig: [], }; expect(transformSpec(input)).toEqual(expectedOutput); }); }); describe('addOpenAPISpecs', () => { it('should add specs to available tools', async () => { const availableTools = ['Tool1', 'Tool2']; const specs = [ { name_for_human: 'Human Name', name_for_model: 'Model Name', description_for_human: 'Human Description', logo_url: 'https://example.com/logo.png', }, ]; loadSpecs.mockResolvedValue(specs); createOpenAPIPlugin.mockReturnValue('Plugin'); const result = await addOpenAPISpecs(availableTools); expect(result).toEqual([...specs.map(transformSpec), ...availableTools]); }); it('should return available tools if specs loading fails', async () => { const availableTools = ['Tool1', 'Tool2']; loadSpecs.mockRejectedValue(new Error('Failed to load specs')); const result = await addOpenAPISpecs(availableTools); expect(result).toEqual(availableTools); }); });