File size: 2,270 Bytes
3b6afc0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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);
  });
});