import { render, screen, userEvent } from '../test-utils'; import type { PropsWithChildren } from 'react'; import NavigationOption, { type NavigationOptionProps } from './NavigationOption'; describe('Navigation option', () => { const initialProps = { id: 'componentId', name: 'componentName', title: 'Component Title', content: contentImage, media: media, onClick: jest.fn(), complex: true, }; const customRender = (overrides: Partial = {}) => render(); afterEach(jest.resetAllMocks); describe('render as', () => { it('should render `button` when a `href` and `as` is not passed', () => { customRender(); expect( screen.getByRole('button', { name: new RegExp(initialProps.title) }), ).toBeInTheDocument(); }); it('should render anchor when a `href` is passed', () => { const href = 'https://wise.com'; customRender({ href }); expect(screen.getByRole('link', { name: new RegExp(initialProps.title) })).toHaveAttribute( 'href', href, ); }); it('should respect `as` prop', () => { const View = (props: PropsWithChildren) =>
; customRender({ as: View }); expect(screen.getByTestId('wrapper')).toBeInTheDocument(); }); }); it('should render `media`', () => { customRender(); expect(screen.getByRole('img', { name: 'media' })).toBeInTheDocument(); }); it('passes `id`', () => { customRender(); expect(screen.getByRole('button')).toHaveAttribute('id', initialProps.id); }); it('passes `name`', () => { customRender(); expect(screen.getByRole('button')).toHaveAttribute('name', initialProps.name); }); describe('disabled', () => { it('should be `false` by default', () => { customRender(); expect(screen.getByRole('button')).toBeEnabled(); }); it('should respect the prop', () => { customRender({ disabled: true }); expect(screen.getByRole('button')).toBeDisabled(); }); it('calls click handler on option click when not disabled', async () => { customRender(); await userEvent.click(screen.getByRole('button')); expect(initialProps.onClick).toHaveBeenCalledTimes(1); }); it('does not call click handler when disabled', async () => { customRender({ disabled: true }); await userEvent.click(screen.getByRole('button')); expect(initialProps.onClick).not.toHaveBeenCalled(); }); }); describe('rendering circle', () => { it('should render it by default', () => { customRender(); expect(screen.getByRole('img', { name: 'media' }).parentNode).toHaveClass('circle'); }); it('should respect `showMediaCircle` prop', () => { customRender({ showMediaCircle: false }); expect(screen.getByRole('img', { name: 'media' }).parentNode).not.toHaveClass('circle'); }); }); it('should pass correct class names to Option', () => { customRender({ className: 'test-class-name' }); expect(screen.getByRole('button')).toHaveClass('test-class-name'); }); describe('isContainerAligned', () => { it('should not be aligned by default', () => { const { container } = customRender(); expect(container.querySelector('.np-option')).not.toHaveClass('np-option__container-aligned'); }); it('renders aligned with container content', () => { const { container } = customRender({ isContainerAligned: true }); expect(container.querySelector('.np-option')).toHaveClass('np-option__container-aligned'); }); }); });