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() }) })