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}
/>
);
};