import { fireEvent, render, screen, within } from '@testing-library/react'
import { describe, expect, it } from 'vitest'
import { ImagePreview } from './ImagePreview'
function renderGallery() {
render(
<>
>
)
}
describe('ImagePreview gallery navigation', () => {
it('navigates between rendered image previews with toolbar buttons', () => {
renderGallery()
fireEvent.click(screen.getByRole('button', { name: /first image/i }))
const dialog = screen.getByRole('dialog', { name: 'First image' })
expect(within(dialog).getByText('1 / 2')).toBeInTheDocument()
expect(within(dialog).getByRole('button', { name: 'Previous image' })).toBeDisabled()
fireEvent.click(within(dialog).getByRole('button', { name: 'Next image' }))
const nextDialog = screen.getByRole('dialog', { name: 'Second image' })
expect(within(nextDialog).getByText('second.png')).toBeInTheDocument()
expect(within(nextDialog).getByText('2 / 2')).toBeInTheDocument()
expect(within(nextDialog).getByRole('img', { name: 'Second image' })).toHaveAttribute('src', '/second.png')
expect(within(nextDialog).getByRole('button', { name: 'Next image' })).toBeDisabled()
})
it('supports left and right arrow keys', () => {
renderGallery()
fireEvent.click(screen.getByRole('button', { name: /first image/i }))
fireEvent.keyDown(window, { key: 'ArrowRight' })
expect(screen.getByRole('dialog', { name: 'Second image' })).toBeInTheDocument()
fireEvent.keyDown(window, { key: 'ArrowLeft' })
expect(screen.getByRole('dialog', { name: 'First image' })).toBeInTheDocument()
})
it('keeps named galleries separate from ungrouped previews', () => {
render(
<>
>
)
fireEvent.click(screen.getByRole('button', { name: /first draft/i }))
const dialog = screen.getByRole('dialog', { name: 'First draft' })
expect(within(dialog).getByText('1 / 2')).toBeInTheDocument()
fireEvent.click(within(dialog).getByRole('button', { name: 'Next image' }))
expect(screen.getByRole('dialog', { name: 'Second draft' })).toBeInTheDocument()
expect(within(screen.getByRole('dialog')).queryByRole('img', { name: 'Sent image' })).not.toBeInTheDocument()
})
})