import { render, fireEvent } from '@testing-library/react'
import { ActiveLink } from './index'
import '@testing-library/jest-dom'
jest.mock('../../../helpers', () => ({
getGlobalStyle: (varName: string) => {
if (varName === '--color-icons-primary') return 'blue'
if (varName === '--color-icons-gray') return 'gray'
return ''
}
}))
jest.mock('../Icon', () => ({
Icon: ({ icon }: { icon: string }) =>
{icon}
}))
jest.mock('../Row', () => ({
Row: ({ children }: { children: React.ReactNode }) => {children}
}))
describe('ActiveLink', () => {
const defaultProps = {
activeClassName: 'active-class',
href: '/home',
name: 'Home'
}
it('renders correctly with default props', () => {
const { getByText } = render()
expect(getByText('Home')).toBeInTheDocument()
})
it('renders with icon when mIcon is provided', () => {
const { getByTestId } = render(
)
expect(getByTestId('icon')).toHaveTextContent('mock-icon')
})
it('uses default icon if mIcon key does not exist', () => {
const { getByTestId } = render(
)
expect(getByTestId('icon')).toHaveTextContent('default-icon')
})
it('calls onClick and prevents default when action is true', () => {
const handleClick = jest.fn()
const preventDefault = jest.fn()
const { getByRole } = render(
)
fireEvent.click(getByRole('link'), { preventDefault })
expect(handleClick).toHaveBeenCalled()
})
it('does not preventDefault when action is false', () => {
const handleClick = jest.fn()
const preventDefault = jest.fn()
const { getByRole } = render(
)
fireEvent.click(getByRole('link'), { preventDefault })
expect(preventDefault).not.toHaveBeenCalled()
expect(handleClick).not.toHaveBeenCalled() // solo se llama si action === true
})
})