mirror of https://github.com/langgenius/dify.git
148 lines
4.4 KiB
TypeScript
148 lines
4.4 KiB
TypeScript
import type { WorkflowToolProviderOutputParameter, WorkflowToolProviderOutputSchema } from '../types'
|
|
import { VarType } from '@/app/components/workflow/types'
|
|
import { buildWorkflowOutputParameters } from './utils'
|
|
|
|
describe('buildWorkflowOutputParameters', () => {
|
|
it('returns provided output parameters when array input exists', () => {
|
|
const params: WorkflowToolProviderOutputParameter[] = [
|
|
{ name: 'text', description: 'final text', type: VarType.string },
|
|
]
|
|
|
|
const result = buildWorkflowOutputParameters(params, null)
|
|
|
|
expect(result).toBe(params)
|
|
})
|
|
|
|
it('fills missing output description and type from schema when array input exists', () => {
|
|
const params: WorkflowToolProviderOutputParameter[] = [
|
|
{ name: 'answer', description: '', type: undefined },
|
|
{ name: 'files', description: 'keep this description', type: VarType.arrayFile },
|
|
]
|
|
const schema: WorkflowToolProviderOutputSchema = {
|
|
type: 'object',
|
|
properties: {
|
|
answer: {
|
|
type: VarType.string,
|
|
description: 'Generated answer',
|
|
},
|
|
files: {
|
|
type: VarType.arrayFile,
|
|
description: 'Schema files description',
|
|
},
|
|
},
|
|
}
|
|
|
|
const result = buildWorkflowOutputParameters(params, schema)
|
|
|
|
expect(result).toEqual([
|
|
{ name: 'answer', description: 'Generated answer', type: VarType.string },
|
|
{ name: 'files', description: 'keep this description', type: VarType.arrayFile },
|
|
])
|
|
})
|
|
|
|
it('falls back to empty description when both payload and schema descriptions are missing', () => {
|
|
const params: WorkflowToolProviderOutputParameter[] = [
|
|
{ name: 'missing_desc', description: '', type: undefined },
|
|
]
|
|
const schema: WorkflowToolProviderOutputSchema = {
|
|
type: 'object',
|
|
properties: {
|
|
other_field: {
|
|
type: VarType.string,
|
|
description: 'Other',
|
|
},
|
|
},
|
|
}
|
|
|
|
const result = buildWorkflowOutputParameters(params, schema)
|
|
|
|
expect(result).toEqual([
|
|
{ name: 'missing_desc', description: '', type: undefined },
|
|
])
|
|
})
|
|
|
|
it('derives parameters from schema when explicit array missing', () => {
|
|
const schema: WorkflowToolProviderOutputSchema = {
|
|
type: 'object',
|
|
properties: {
|
|
answer: {
|
|
type: VarType.string,
|
|
description: 'AI answer',
|
|
},
|
|
attachments: {
|
|
type: VarType.arrayFile,
|
|
description: 'Supporting files',
|
|
},
|
|
unknown: {
|
|
type: 'custom',
|
|
description: 'Unsupported type',
|
|
},
|
|
},
|
|
}
|
|
|
|
const result = buildWorkflowOutputParameters(undefined, schema)
|
|
|
|
expect(result).toEqual([
|
|
{ name: 'answer', description: 'AI answer', type: VarType.string },
|
|
{ name: 'attachments', description: 'Supporting files', type: VarType.arrayFile },
|
|
{ name: 'unknown', description: 'Unsupported type', type: undefined },
|
|
])
|
|
})
|
|
|
|
it('returns empty array when no source information is provided', () => {
|
|
expect(buildWorkflowOutputParameters(null, null)).toEqual([])
|
|
})
|
|
|
|
it('derives parameters from schema when explicit array is empty', () => {
|
|
const schema: WorkflowToolProviderOutputSchema = {
|
|
type: 'object',
|
|
properties: {
|
|
output_text: {
|
|
type: VarType.string,
|
|
description: 'Output text',
|
|
},
|
|
},
|
|
}
|
|
|
|
const result = buildWorkflowOutputParameters([], schema)
|
|
|
|
expect(result).toEqual([
|
|
{ name: 'output_text', description: 'Output text', type: VarType.string },
|
|
])
|
|
})
|
|
|
|
it('returns undefined type when schema output type is missing', () => {
|
|
const schema = {
|
|
type: 'object',
|
|
properties: {
|
|
answer: {
|
|
description: 'Answer without type',
|
|
},
|
|
},
|
|
} as unknown as WorkflowToolProviderOutputSchema
|
|
|
|
const result = buildWorkflowOutputParameters(undefined, schema)
|
|
|
|
expect(result).toEqual([
|
|
{ name: 'answer', description: 'Answer without type', type: undefined },
|
|
])
|
|
})
|
|
|
|
it('falls back to empty description when schema-derived description is missing', () => {
|
|
const schema = {
|
|
type: 'object',
|
|
properties: {
|
|
answer: {
|
|
type: VarType.string,
|
|
},
|
|
},
|
|
} as unknown as WorkflowToolProviderOutputSchema
|
|
|
|
const result = buildWorkflowOutputParameters(undefined, schema)
|
|
|
|
expect(result).toEqual([
|
|
{ name: 'answer', description: '', type: VarType.string },
|
|
])
|
|
})
|
|
})
|