import { render, screen } from '@testing-library/react'
import { describe, expect, it } from 'vitest'
import Icon from './Icon'
import { type IconComponentProps } from './Icon.models'
function FakeIcon({ width, height, style }: IconComponentProps) {
return (
)
}
describe('Icon Component', () => {
it('renders with default props', () => {
render()
const iconElement = screen.getByTestId('icon-check')
expect(iconElement).toBeInTheDocument()
expect(iconElement).toHaveStyle({
'--svg-height': '20px',
'--svg-width': '20px',
'--svg-color': 'var(--purple)',
})
})
it('renders with custom iconSize', () => {
render()
const iconElement = screen.getByTestId('icon-check')
expect(iconElement).toHaveStyle({
'--svg-height': '24px',
'--svg-width': '24px',
})
})
it('renders with custom color', () => {
render()
const iconElement = screen.getByTestId('icon-check')
expect(iconElement).toHaveStyle({
'--svg-color': 'var(--dark-blue)',
})
})
it('renders with custom className', () => {
render()
const iconElement = screen.getByTestId('icon-check')
expect(iconElement).toHaveClass('custom-class')
})
it('renders different icons correctly', () => {
const { rerender } = render()
expect(screen.getByTestId('icon-check')).toBeInTheDocument()
rerender()
expect(screen.getByTestId('icon-x')).toBeInTheDocument()
rerender()
expect(screen.getByTestId('icon-info')).toBeInTheDocument()
})
describe('component icon', () => {
it('renders a component icon with correct size props', () => {
render()
const svg = screen.getByTestId('fake-icon-svg')
expect(svg).toBeInTheDocument()
expect(svg).toHaveAttribute('width', '24px')
expect(svg).toHaveAttribute('height', '24px')
})
it('applies color as CSS color property', () => {
render()
const wrapper = screen.getByTestId('icon-icon')
expect(wrapper).toHaveStyle({ color: 'var(--dark-red)' })
})
it('uses qaTestId for a stable data-testid', () => {
render()
expect(screen.getByTestId('icon-accessibility')).toBeInTheDocument()
})
it('applies base wrapper classes and custom className', () => {
render()
const wrapper = screen.getByTestId('icon-icon')
expect(wrapper).toHaveClass('icon', 'extra')
})
})
})