mediaSequence.test.ts 1.3 KB

12345678910111213141516171819202122
  1. import { describe, expect, it } from 'vitest'
  2. import { mediaItemsFromMessages, previewItemFromUrl } from '@/components/library/mediaSequence'
  3. import type { UiMessage } from '@/components/messages/types'
  4. describe('conversation media sequence', () => {
  5. it('keeps visible image and video order while deduplicating the same URL', () => {
  6. const messages: UiMessage[] = [
  7. { id: 'one', role: 'assistant', content: '![第一张](/media/first.png)' },
  8. { id: 'two', role: 'assistant', content: '[视频](/media/second.mp4)', attachments: [{ id: 'a', name: '第一张.png', kind: 'image', url: '/media/first.png' }] },
  9. { id: 'three', role: 'assistant', content: '普通文本', attachments: [{ id: 'b', name: '第三张.webp', kind: 'image', url: '/media/third.webp' }] },
  10. ]
  11. expect(mediaItemsFromMessages(messages).map(item => [item.name, item.kind, item.previewUrl])).toEqual([
  12. ['first.png', 'image', '/media/first.png'],
  13. ['second.mp4', 'video', '/media/second.mp4'],
  14. ['第三张.webp', 'image', '/media/third.webp'],
  15. ])
  16. })
  17. it('infers full-view media kind from a clicked conversation link', () => {
  18. expect(previewItemFromUrl('片段.webm', '/media/clip.webm')).toMatchObject({ kind: 'video', previewUrl: '/media/clip.webm' })
  19. })
  20. })