import React from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { KeyTypes } from '../../../../helpers'; import { WizardToggle, WizardToggleProps } from '../WizardToggle'; import { WizardStepType } from '../types'; const steps: WizardStepType[] = [ { id: 'id-1', name: 'First step', index: 1, component: <>First step content }, { id: 'id-2', name: 'Second step', index: 2, component: <>Second step content } ]; const defaultProps: WizardToggleProps = { steps, activeStep: steps[0], footer:
Some footer
, nav:
Some nav
, 'aria-label': 'Some label' }; jest.mock('../WizardStep', () => ({ WizardStep: () =>
step stub
})); test('renders provided footer, nav, and current step content', () => { render(); expect(screen.getByText('Some footer')).toBeVisible(); expect(screen.getByText('Some nav')).toBeVisible(); expect(screen.getByText('First step content')).toBeVisible(); }); test('applies aria-label to the expandable toggle button when specified', () => { render(); expect(screen.getByRole('button', { name: 'Some label' })).toBeVisible(); }); test('has expanded properties when isNavExpanded is true', async () => { render(); const toggleButton = screen.getByRole('button', { name: 'Some label' }); expect(toggleButton).toHaveAttribute('aria-expanded', 'true'); expect(toggleButton).toHaveClass('pf-m-expanded'); }); test('calls toggleNavExpanded on toggle button click', async () => { const toggleNavExpanded = jest.fn(); const user = userEvent.setup(); render(); await user.click(screen.getByRole('button', { name: 'Some label' })); expect(toggleNavExpanded).toHaveBeenCalled(); }); test('renders only the active step content by default', async () => { render(); expect(screen.getByText('First step content')).toBeInTheDocument(); expect(screen.queryByText('Second step content')).toBeNull; }); test('has expanded properties when the toggle dropdown button is clicked', async () => { const user = userEvent.setup(); render(); const toggleButton = screen.getByRole('button', { name: 'Some label' }); expect(toggleButton).toHaveAttribute('aria-expanded', 'false'); expect(toggleButton).not.toHaveClass('pf-m-expanded'); await user.click(toggleButton); expect(toggleButton).toHaveAttribute('aria-expanded', 'true'); expect(toggleButton).toHaveClass('pf-m-expanded'); }); test('unsets expanded properties when using the Escape key', async () => { const user = userEvent.setup(); render(); const toggleButton = screen.getByRole('button', { name: 'Some label' }); await user.click(toggleButton); expect(toggleButton).toHaveAttribute('aria-expanded', 'true'); expect(toggleButton).toHaveClass('pf-m-expanded'); await user.type(toggleButton, `{${KeyTypes.Escape}}`); expect(toggleButton).toHaveAttribute('aria-expanded', 'false'); expect(toggleButton).not.toHaveClass('pf-m-expanded'); }); const WizardToggleExpand = props => { const [isExpanded, setIsExpanded] = React.useState(false); return ( setIsExpanded(!isExpanded)} {...props} /> ); };