import { render } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import Icon from '@/components/Icon'; describe('Icon component', () => { it('renders icon with kebab-case name', () => { const { container } = render(); expect(container.querySelector('svg')).toBeInTheDocument(); }); it('renders icon with lowercase name', () => { const { container } = render(); expect(container.querySelector('svg')).toBeInTheDocument(); }); it('renders icon with PascalCase name', () => { const { container } = render(); expect(container.querySelector('svg')).toBeInTheDocument(); }); it('renders icon with all uppercase name', () => { const { container } = render(); expect(container.querySelector('svg')).toBeInTheDocument(); }); it('renders icon with mixed case name', () => { const { container } = render(); expect(container.querySelector('svg')).toBeInTheDocument(); }); it('returns null and warns for invalid icon name', () => { const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); const { container } = render(); expect(container.firstChild).toBeNull(); expect(consoleSpy).toHaveBeenCalledWith( 'Icon "invalid-icon-name" not found in Lucide icons' ); consoleSpy.mockRestore(); }); it('passes props to the icon component', () => { const { container } = render( ); const svg = container.querySelector('svg'); expect(svg).toBeInTheDocument(); expect(svg).toHaveClass('test-class'); }); });