|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { fireEvent, render, screen } from '@testing-library/react'
- import '@testing-library/jest-dom'
- import React from 'react'
- import type { IconData } from './IconBase'
- import IconBase from './IconBase'
- import * as utils from './utils'
-
- // Mock the utils module
- jest.mock('./utils', () => ({
- generate: jest.fn((icon, key, props) => (
- <svg
- data-testid="mock-svg"
- key={key}
- {...props}
- >
- mocked svg content
- </svg>
- )),
- }))
-
- describe('IconBase Component', () => {
- const mockData: IconData = {
- name: 'test-icon',
- icon: { name: 'svg', attributes: {}, children: [] },
- }
-
- beforeEach(() => {
- jest.clearAllMocks()
- })
-
- it('renders properly with required props', () => {
- render(<IconBase data={mockData} />)
- const svg = screen.getByTestId('mock-svg')
- expect(svg).toBeInTheDocument()
- expect(svg).toHaveAttribute('data-icon', mockData.name)
- expect(svg).toHaveAttribute('aria-hidden', 'true')
- })
-
- it('passes className to the generated SVG', () => {
- render(<IconBase data={mockData} className="custom-class" />)
- const svg = screen.getByTestId('mock-svg')
- expect(svg).toHaveAttribute('class', 'custom-class')
- expect(utils.generate).toHaveBeenCalledWith(
- mockData.icon,
- 'svg-test-icon',
- expect.objectContaining({ className: 'custom-class' }),
- )
- })
-
- it('handles onClick events', () => {
- const handleClick = jest.fn()
- render(<IconBase data={mockData} onClick={handleClick} />)
- const svg = screen.getByTestId('mock-svg')
- fireEvent.click(svg)
- expect(handleClick).toHaveBeenCalledTimes(1)
- })
-
- it('applies custom styles', () => {
- const customStyle = { color: 'red', fontSize: '24px' }
- render(<IconBase data={mockData} style={customStyle} />)
- expect(utils.generate).toHaveBeenCalledWith(
- mockData.icon,
- 'svg-test-icon',
- expect.objectContaining({ style: customStyle }),
- )
- })
- })
|