import React from 'react'; import { renderWithTheme } from '../helper/renderWithTheme'; import Breadcrumbs, { BreadcrumbsItem, BreadcrumbsItemProps, } from './Breadcrumbs'; const renderBreadcrumbs = () => renderWithTheme( , {}, ); test('Breadcrumbs matches snapshot', () => { const { container } = renderBreadcrumbs(); expect(container.firstChild).toMatchSnapshot(); }); test('Breadcrumbs navigation element is accessible', () => { const { getByRole } = renderBreadcrumbs(); expect(getByRole('navigation').getAttribute('aria-label')).toEqual( 'Breadcrumb', ); }); test('BreadcrumbsItems render label prop as text content', () => { const { getByText } = renderBreadcrumbs(); expect(getByText('Item 1')).toBeDefined(); expect(getByText('Item 2')).toBeDefined(); expect(getByText('Item 3')).toBeDefined(); }); test('BreadcrumbsItems with href prop provided render as anchor element', () => { const { getByText } = renderBreadcrumbs(); expect(getByText('Item 1').nodeName.toLowerCase()).toEqual('a'); expect(getByText('Item 2').nodeName.toLowerCase()).toEqual('a'); expect(getByText('Item 3').nodeName.toLowerCase()).not.toEqual('a'); expect(getByText('Item 1').getAttribute('href')).toEqual('/item1'); expect(getByText('Item 2').getAttribute('href')).toEqual('/item2'); expect(getByText('Item 3').getAttribute('href')).toBeFalsy(); }); test('BreadcrumbsItems without href prop provided render as span element', () => { const { getByText } = renderBreadcrumbs(); expect(getByText('Item 1').nodeName.toLowerCase()).not.toEqual('span'); expect(getByText('Item 2').nodeName.toLowerCase()).not.toEqual('span'); expect(getByText('Item 3').nodeName.toLowerCase()).toEqual('span'); }); test('BreadcrumbsItems render custom link component if provided through props', () => { // eslint-disable-next-line react/require-default-props const CustomLink = ({ href, title }: { href: string; title?: string }) => ( {title} ); const CustomBreadcrumbsItem = (props: BreadcrumbsItemProps) => ( ); const { container, getByText } = renderWithTheme( , {}, ); expect(container.firstChild).toMatchSnapshot(); expect(getByText('Item 1').style.color).toBe('red'); expect(getByText('Item 2').style.color).toBe('red'); expect(getByText('Item 3').style.color).not.toBe('red'); }); test('BreadcrumbsItems without href render with bold text style', () => { const { getByText } = renderBreadcrumbs(); expect(getByText('Item 1')).not.toHaveStyleRule('font-weight', 'bold'); expect(getByText('Item 2')).not.toHaveStyleRule('font-weight', 'bold'); expect(getByText('Item 3')).toHaveStyleRule('font-weight', 'bold'); });