import { describe, it, expect, vi } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/react'; import { Lightbox } from '../../components/Lightbox'; describe('Lightbox', () => { const defaultProps = { src: '/test-image.jpg', alt: 'Test Image', onClose: vi.fn() }; beforeEach(() => { vi.clearAllMocks(); }); it('renders image with correct src and alt', () => { render(); const img = screen.getByAltText('Test Image'); expect(img).toBeInTheDocument(); expect(img).toHaveAttribute('src', '/test-image.jpg'); }); it('renders close button', () => { render(); expect(screen.getByText('×')).toBeInTheDocument(); }); it('calls onClose when close button is clicked', () => { const onClose = vi.fn(); render(); fireEvent.click(screen.getByText('×')); expect(onClose).toHaveBeenCalled(); }); it('calls onClose when overlay is clicked', () => { const onClose = vi.fn(); const { container } = render(); const overlay = container.querySelector('.lightbox-overlay'); fireEvent.click(overlay!); expect(onClose).toHaveBeenCalled(); }); it('does not call onClose when image is clicked', () => { const onClose = vi.fn(); render(); fireEvent.click(screen.getByAltText('Test Image')); expect(onClose).not.toHaveBeenCalled(); }); it('applies correct CSS classes', () => { const { container } = render(); expect(container.querySelector('.lightbox-overlay')).toBeInTheDocument(); expect(container.querySelector('.lightbox-close')).toBeInTheDocument(); expect(container.querySelector('.lightbox-image')).toBeInTheDocument(); }); });