Files
test1/components/nova-sdk/task-panel/Preview/previewUtils.test.ts
2026-03-20 07:33:46 +00:00

83 lines
2.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import type { TaskArtifact } from '../../types'
import { extractToolOutputArtifact, normalizeArtifactFileType } from './previewUtils'
describe('normalizeArtifactFileType', () => {
it('normalizes common mime types', () => {
expect(normalizeArtifactFileType('text/markdown')).toBe('md')
expect(normalizeArtifactFileType('image/svg+xml')).toBe('svg')
expect(
normalizeArtifactFileType(
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
),
).toBe('pptx')
})
it('falls back to file extension', () => {
expect(normalizeArtifactFileType('', 'report.csv')).toBe('csv')
expect(normalizeArtifactFileType(undefined, undefined, '/tmp/demo.py')).toBe('py')
})
})
describe('extractToolOutputArtifact', () => {
const baseArtifact: TaskArtifact = {
path: 'tool-call-1',
file_name: '工具调用',
file_type: 'tool_call',
event_type: 'tool_call',
tool_name: 'file_create',
}
it('extracts remote file artifacts from tool_output', () => {
const artifact = extractToolOutputArtifact({
...baseArtifact,
tool_output: {
path: '/upload/result/index.html',
file_name: 'index.html',
file_type: 'text/html',
},
})
expect(artifact).toEqual({
path: '/upload/result/index.html',
file_name: 'index.html',
file_type: 'html',
content: undefined,
url: undefined,
task_id: undefined,
})
})
it('extracts inline preview content when only file_type and content exist', () => {
const artifact = extractToolOutputArtifact({
...baseArtifact,
tool_output: {
file_name: 'notes.md',
file_type: 'text/markdown',
content: '# Title',
},
})
expect(artifact).toEqual({
path: '',
file_name: 'notes.md',
file_type: 'md',
content: '# Title',
url: undefined,
task_id: undefined,
})
})
it('ignores non-file tool outputs', () => {
expect(
extractToolOutputArtifact({
...baseArtifact,
tool_output: {
status: 'ok',
message: 'done',
},
}),
).toBeNull()
})
})