Test version (#4792)

* 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>
This commit is contained in:
Archer
2025-05-12 22:27:01 +08:00
committed by GitHub
parent 3cc6b8a17a
commit 0ef3d40296
69 changed files with 1024 additions and 599 deletions

View File

@@ -0,0 +1,113 @@
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', () => {
// 测试场景1storeNode没有version使用template的version
const storeNode1 = {
nodeId: 'node1',
flowNodeType: 'userInput' as FlowNodeTypeEnum,
position: { x: 0, y: 0 },
inputs: [],
outputs: [],
name: 'Test Node 1'
};
// 测试场景2storeNode没有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'
};
// 测试场景3storeNode和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
});
});