| 123456789101112131415161718192021222324252627282930313233343536 |
- import { describe, expect, it } from 'vitest'
- import { normalizeAssistantMediaMarkdown } from '@/utils/mediaMarkdown'
- describe('historical assistant MEDIA compatibility', () => {
- it('converts image and non-image absolute paths to standard Markdown', () => {
- expect(normalizeAssistantMediaMarkdown('MEDIA:/Users/samien/图片 文件.jpg\nMEDIA:/tmp/报告.docx')).toBe(
- '\n[报告.docx](/tmp/报告.docx)',
- )
- })
- it('accepts quoted paths with Chinese, spaces, quotes, and backticks', () => {
- expect(normalizeAssistantMediaMarkdown("MEDIA:' /not-a-path'\nMEDIA:\"/Users/瑶儿/带 空格 '引号'.png\"\nMEDIA:\"/tmp/含`反引号`.pdf\"\nMEDIA:`/tmp/反引号.pdf`")).toBe(
- "MEDIA:' /not-a-path'\n\n[含`反引号`.pdf](/tmp/含`反引号`.pdf)\n[反引号.pdf](/tmp/反引号.pdf)",
- )
- })
- it('waits for an unquoted streaming path to reach a line boundary', () => {
- expect(normalizeAssistantMediaMarkdown('MEDIA:/tmp/正在生成.png', true)).toBe('MEDIA:/tmp/正在生成.png')
- expect(normalizeAssistantMediaMarkdown('MEDIA:/tmp/正在生成.png\n下一行', true)).toBe('\n下一行')
- expect(normalizeAssistantMediaMarkdown('MEDIA:`/tmp/已完整.png`', true)).toBe('')
- })
- it('does not transform code, headings, tables, URLs, or traversal paths', () => {
- const input = [
- '```text',
- 'MEDIA:/tmp/inside-code.png',
- '```',
- '`MEDIA:/tmp/inline.png`',
- '# MEDIA:/tmp/title.png',
- '| MEDIA:/tmp/table.png | value |',
- 'MEDIA:https://example.com/remote.png',
- 'MEDIA:/tmp/../secret.png',
- ].join('\n')
- expect(normalizeAssistantMediaMarkdown(input)).toBe(input)
- })
- })
|