import { describe, expect, it, vi } from 'vitest'
import {
act,
fireEvent,
renderWithProviders,
screen,
} from '../../../test/utils'
import VideoViewer from './VideoViewer'
describe('VideoViewer', () => {
const items = [
{
src: 'https://cdn.example.com/one.mp4',
poster: '/one.jpg',
mimeType: 'video/mp4',
filename: 'one.mp4',
preload: 'auto' as const,
},
{ src: 'https://cdn.example.com/two.webm', mimeType: 'video/webm' },
]
it('renders nothing with no active video', () => {
const { container } = renderWithProviders(
)
expect(container.firstChild).toBeNull()
})
it('renders media attributes and an optional source type', () => {
renderWithProviders(
)
const video = screen.getByTestId('video-viewer').querySelector('video')
expect(video).not.toBeNull()
if (!video) throw new Error('Expected video element')
expect(video).toHaveAttribute('src', items[0].src)
expect(video).toHaveAttribute('poster', items[0].poster)
expect(video).toHaveAttribute('preload', 'auto')
expect(video).toHaveAttribute('autoplay')
expect(video?.muted).toBe(true)
expect(video.querySelector('source')).toHaveAttribute('type', 'video/mp4')
})
it('defaults preload and navigates stacked items', () => {
renderWithProviders()
expect(screen.getByText('1 / 2')).toBeInTheDocument()
expect(
screen.getByTestId('video-viewer').querySelector('video')
).toHaveAttribute('preload', 'auto')
fireEvent.click(screen.getByRole('button', { name: 'Next video' }))
expect(
screen.getByTestId('video-viewer').querySelector('video')
).toHaveAttribute('src', items[1].src)
expect(
screen.getByTestId('video-viewer').querySelector('video')
).toHaveAttribute('preload', 'metadata')
})
it('pauses the toolkit\u2019s own native audio when it opens', () => {
// `useActiveAudioPlayer` only covers the players stream-chat-react
// mounts. `MessageAttachment.Audio` and the playable `LinkAttachment`
// card render plain `