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');
});
});