import * as React from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Nav, NavContext } from '../Nav'; import { NavList } from '../NavList'; import { NavGroup } from '../NavGroup'; import { NavItem } from '../NavItem'; import { NavExpandable } from '../NavExpandable'; const props = { items: [ { to: '#link1', label: 'Link 1' }, { to: '#link2', label: 'Link 2' }, { to: '#link3', label: 'Link 3' }, { to: '#link4', label: 'Link 4' } ] }; const renderNav = (ui: React.ReactElement>) => render({ui}); describe('Nav', () => { beforeEach(() => { window.location.hash = '#link1'; }); test('Default Nav List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Renders nav list in strict mode', () => { const consoleError = jest.spyOn(console, 'error'); const { asFragment } = renderNav( ); expect(consoleError).not.toHaveBeenCalled(); expect(asFragment()).toMatchSnapshot(); }); test('Dark Nav List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Default Nav List - Trigger item active update', async () => { const user = userEvent.setup(); const { asFragment } = renderNav( ); await user.click(screen.getByText('Link 2')); expect(asFragment()).toMatchSnapshot(); }); test('Expandable Nav List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Expandable Nav verify onExpand', async () => { const onExpand = jest.fn(); const user = userEvent.setup(); renderNav( ); await user.click(screen.getByRole('button')); expect(onExpand).toHaveBeenCalled(); }); test('Expandable Nav List - Trigger toggle', async () => { window.location.hash = '#link2'; const user = userEvent.setup(); const { asFragment } = renderNav( ); await user.click(screen.getByText('Section 1')); expect(asFragment()).toMatchSnapshot(); }); test('Expandable Nav List with aria label', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Nav Grouped List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Horizontal Nav List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Horizontal SubNav List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Tertiary Nav List', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Nav List with custom item nodes', () => { const { asFragment } = renderNav( ); expect(asFragment()).toMatchSnapshot(); }); test('Nav List with flyout', async () => { const user = userEvent.setup(); const { asFragment } = renderNav( ); await user.hover(screen.getByText('My custom node')) expect(asFragment()).toMatchSnapshot(); }); });