mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-22 20:37:48 +00:00

* plugin node version select (#4760) * plugin node version select * type * fix * fix * perf: version list * fix node version (#4787) * change my select * fix-ui * fix test * add test * fix * remove invalid version field * filter deprecated field * fix: claude tool call * fix: test --------- Co-authored-by: heheer <heheer@sealos.io>
114 lines
3.5 KiB
TypeScript
114 lines
3.5 KiB
TypeScript
import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
|
||
import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node';
|
||
import { storeNode2FlowNode } from '@/web/core/workflow/utils';
|
||
import type { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
|
||
|
||
describe('storeNode2FlowNode with version and avatar inheritance', () => {
|
||
beforeEach(() => {
|
||
vi.mock('@fastgpt/global/core/workflow/template/constants', () => {
|
||
return {
|
||
moduleTemplatesFlat: [
|
||
{
|
||
flowNodeType: 'userInput',
|
||
name: 'User Input',
|
||
avatar: 'template-avatar.png',
|
||
intro: '',
|
||
version: '2.0',
|
||
inputs: [],
|
||
outputs: []
|
||
}
|
||
]
|
||
};
|
||
});
|
||
vi.mock('@fastgpt/global/core/workflow/node/constant', () => {
|
||
return {
|
||
FlowNodeTypeEnum: { userInput: 'userInput' },
|
||
FlowNodeInputTypeEnum: {
|
||
addInputParam: 'addInputParam',
|
||
input: 'input',
|
||
reference: 'reference',
|
||
textarea: 'textarea',
|
||
numberInput: 'numberInput',
|
||
switch: 'switch',
|
||
select: 'select'
|
||
},
|
||
FlowNodeOutputTypeEnum: {
|
||
dynamic: 'dynamic',
|
||
static: 'static',
|
||
source: 'source',
|
||
hidden: 'hidden'
|
||
},
|
||
EDGE_TYPE: 'custom-edge',
|
||
chatHistoryValueDesc: 'chat history description',
|
||
datasetSelectValueDesc: 'dataset value description',
|
||
datasetQuoteValueDesc: 'dataset quote value description'
|
||
};
|
||
});
|
||
});
|
||
|
||
afterEach(() => {
|
||
vi.resetAllMocks();
|
||
vi.resetModules();
|
||
});
|
||
|
||
it('should handle version and avatar inheritance', () => {
|
||
// 测试场景1:storeNode没有version,使用template的version
|
||
const storeNode1 = {
|
||
nodeId: 'node1',
|
||
flowNodeType: 'userInput' as FlowNodeTypeEnum,
|
||
position: { x: 0, y: 0 },
|
||
inputs: [],
|
||
outputs: [],
|
||
name: 'Test Node 1'
|
||
};
|
||
|
||
// 测试场景2:storeNode没有avatar,使用template的avatar
|
||
const storeNode2 = {
|
||
nodeId: 'node2',
|
||
flowNodeType: 'userInput' as FlowNodeTypeEnum,
|
||
position: { x: 0, y: 0 },
|
||
inputs: [],
|
||
outputs: [],
|
||
name: 'Test Node 2',
|
||
version: '1.0'
|
||
};
|
||
|
||
// 测试场景3:storeNode和template都有avatar,使用template的avatar
|
||
const storeNode3 = {
|
||
nodeId: 'node3',
|
||
flowNodeType: 'userInput' as FlowNodeTypeEnum,
|
||
position: { x: 0, y: 0 },
|
||
inputs: [],
|
||
outputs: [],
|
||
name: 'Test Node 3',
|
||
version: '3.0',
|
||
avatar: 'store-avatar.png'
|
||
};
|
||
|
||
const result1 = storeNode2FlowNode({
|
||
item: storeNode1 as any,
|
||
t: ((key: any) => key) as any
|
||
});
|
||
|
||
const result2 = storeNode2FlowNode({
|
||
item: storeNode2 as any,
|
||
t: ((key: any) => key) as any
|
||
});
|
||
|
||
const result3 = storeNode2FlowNode({
|
||
item: storeNode3 as any,
|
||
t: ((key: any) => key) as any
|
||
});
|
||
|
||
// 验证版本继承关系
|
||
expect(result1.data.version).toBe('2.0'); // 使用template的version
|
||
expect(result2.data.version).toBe('2.0'); // 使用storeNode的version
|
||
expect(result3.data.version).toBe('2.0'); // 使用storeNode的version
|
||
|
||
// 验证avatar继承关系
|
||
expect(result1.data.avatar).toBe('template-avatar.png'); // 使用template的avatar
|
||
expect(result2.data.avatar).toBe('template-avatar.png'); // 使用template的avatar
|
||
expect(result3.data.avatar).toBe('template-avatar.png'); // 根据源码,应该使用template的avatar
|
||
});
|
||
});
|