mediaMarkdown.test.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { describe, expect, it } from 'vitest'
  2. import { normalizeAssistantMediaMarkdown } from '@/utils/mediaMarkdown'
  3. describe('historical assistant MEDIA compatibility', () => {
  4. it('converts image and non-image absolute paths to standard Markdown', () => {
  5. expect(normalizeAssistantMediaMarkdown('MEDIA:/Users/samien/图片 文件.jpg\nMEDIA:/tmp/报告.docx')).toBe(
  6. '![图片 文件.jpg](/Users/samien/图片 文件.jpg)\n[报告.docx](/tmp/报告.docx)',
  7. )
  8. })
  9. it('accepts quoted paths with Chinese, spaces, quotes, and backticks', () => {
  10. expect(normalizeAssistantMediaMarkdown("MEDIA:' /not-a-path'\nMEDIA:\"/Users/瑶儿/带 空格 '引号'.png\"\nMEDIA:\"/tmp/含`反引号`.pdf\"\nMEDIA:`/tmp/反引号.pdf`")).toBe(
  11. "MEDIA:' /not-a-path'\n![带 空格 '引号'.png](/Users/瑶儿/带 空格 '引号'.png)\n[含`反引号`.pdf](/tmp/含`反引号`.pdf)\n[反引号.pdf](/tmp/反引号.pdf)",
  12. )
  13. })
  14. it('waits for an unquoted streaming path to reach a line boundary', () => {
  15. expect(normalizeAssistantMediaMarkdown('MEDIA:/tmp/正在生成.png', true)).toBe('MEDIA:/tmp/正在生成.png')
  16. expect(normalizeAssistantMediaMarkdown('MEDIA:/tmp/正在生成.png\n下一行', true)).toBe('![正在生成.png](/tmp/正在生成.png)\n下一行')
  17. expect(normalizeAssistantMediaMarkdown('MEDIA:`/tmp/已完整.png`', true)).toBe('![已完整.png](/tmp/已完整.png)')
  18. })
  19. it('does not transform code, headings, tables, URLs, or traversal paths', () => {
  20. const input = [
  21. '```text',
  22. 'MEDIA:/tmp/inside-code.png',
  23. '```',
  24. '`MEDIA:/tmp/inline.png`',
  25. '# MEDIA:/tmp/title.png',
  26. '| MEDIA:/tmp/table.png | value |',
  27. 'MEDIA:https://example.com/remote.png',
  28. 'MEDIA:/tmp/../secret.png',
  29. ].join('\n')
  30. expect(normalizeAssistantMediaMarkdown(input)).toBe(input)
  31. })
  32. })