Files
FastGPT/projects/app/test/cases/web/workflow/store2flow.version.test.ts
Archer 0ef3d40296 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>
2025-05-12 22:27:01 +08:00

114 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
});
});