import { render, screen } from '../../test-utils'; import userEvent from '@testing-library/user-event'; import { ListItem, type ListItemProps } from '../ListItem'; describe('ListItem.Navigation', () => { const renderWith = (overrides: Partial = {}) => render(); describe('as button', () => { it('renders as button if onClick is set but no href', () => { renderWith({ control: {}} /> }); expect(screen.getByRole('button')).toBeInTheDocument(); }); it('handles onClick events', async () => { const handleClick = jest.fn(); renderWith({ control: }); await userEvent.click(screen.getByRole('button')); expect(handleClick).toHaveBeenCalledTimes(1); }); it('respects disabled state', async () => { renderWith({ disabled: true, control: , }); expect(screen.queryByRole('button')).toBeDisabled(); expect(screen.queryByRole('link')).not.toBeInTheDocument(); }); }); describe('as link', () => { it('renders a link if href is set', () => { renderWith({ control: }); expect(screen.queryByRole('button')).not.toBeInTheDocument(); expect(screen.getByRole('link')).toBeInTheDocument(); }); it('respects target prop', () => { renderWith({ control: , }); const link = screen.getByRole('link'); expect(link).toHaveAttribute('target', '_blank'); expect(link).toHaveAttribute('rel', 'noopener noreferrer'); }); it('handles onClick events', async () => { const handleClick = jest.fn(); renderWith({ control: }); await userEvent.click(screen.getByRole('link')); expect(handleClick).toHaveBeenCalledTimes(1); }); }); });