/** * Tests for DynamicIcon Component * Verifies dynamic icon rendering by name string */ import { render, screen } from '@testing-library/react'; import { DynamicIcon, getAvailableIconNames } from '@/components/ui/dynamic-icon'; describe('DynamicIcon', () => { describe('Basic Rendering', () => { it('renders an icon by name', () => { render(); const icon = screen.getByTestId('icon'); expect(icon).toBeInTheDocument(); expect(icon.tagName).toBe('svg'); }); it('renders different icons by name', () => { const { rerender } = render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-code'); rerender(); expect(screen.getByTestId('icon')).toHaveClass('lucide-brain'); rerender(); expect(screen.getByTestId('icon')).toHaveClass('lucide-shield'); }); it('renders kebab-case icon names correctly', () => { render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-clipboard-check'); }); }); describe('Fallback Behavior', () => { it('renders fallback icon when name is null', () => { render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-bot'); }); it('renders fallback icon when name is undefined', () => { render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-bot'); }); it('renders fallback icon when name is not found', () => { render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-bot'); }); it('uses custom fallback when specified', () => { render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-code'); }); it('falls back to bot when custom fallback is also invalid', () => { render(); expect(screen.getByTestId('icon')).toHaveClass('lucide-bot'); }); }); describe('Props Forwarding', () => { it('forwards className to icon', () => { render(); const icon = screen.getByTestId('icon'); expect(icon).toHaveClass('h-5'); expect(icon).toHaveClass('w-5'); expect(icon).toHaveClass('text-primary'); }); it('forwards style to icon', () => { render(); const icon = screen.getByTestId('icon'); expect(icon).toHaveStyle({ color: 'rgb(255, 0, 0)' }); }); it('forwards aria-hidden to icon', () => { render(