import { MenuToggle } from '../MenuToggle';
import { MenuToggleCheckbox } from '../MenuToggleCheckbox';
import { Badge } from '../../Badge';
import RhUiSettingsFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-settings-fill-icon';
import RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';
import userEvent from '@testing-library/user-event';
import { render, screen } from '@testing-library/react';
import styles from '@patternfly/react-styles/css/components/MenuToggle/menu-toggle';
import '@testing-library/jest-dom';
describe('Old Snapshot tests - remove when refactoring', () => {
test('renders successfully', () => {
const { asFragment } = render(Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('passes additional classes', () => {
const { asFragment } = render(Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('shows isExpanded', () => {
const { asFragment } = render(Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('shows isDisabled', () => {
const { asFragment } = render(Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('shows isPrimary', () => {
const { asFragment } = render(Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('shows isPlain', () => {
const { asFragment } = render(} />);
expect(asFragment()).toMatchSnapshot();
});
test('shows plain text', () => {
const { asFragment } = render(Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('shows icon', () => {
const { asFragment } = render(}>Toggle);
expect(asFragment()).toMatchSnapshot();
});
test('shows badge', () => {
const { asFragment } = render(badge}>Toggle);
expect(asFragment()).toMatchSnapshot();
});
});
const toggleVariants = ['default', 'plain', 'primary', 'plainText', 'secondary', 'typeahead'];
test(`Renders with classes ${styles.modifiers.plain} and ${styles.modifiers.text} when variant="plainText" is passed`, () => {
render(Toggle);
const toggle = screen.getByRole('button');
expect(toggle).toHaveClass(styles.modifiers.plain);
expect(toggle).toHaveClass(styles.modifiers.text);
});
test(`Renders with class ${styles.modifiers.small} when size="sm" is passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.small);
});
test(`Renders with class ${styles.modifiers.success} when status="success" is passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.success);
});
test(`Renders with class ${styles.modifiers.warning} when status="success" is passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.warning);
});
test(`Renders with class ${styles.modifiers.danger} when status="success" is passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.danger);
});
test('split toggle passes onClick', async () => {
const mockClick = jest.fn();
const user = userEvent.setup();
render(
10 selected
]}
aria-label="Menu toggle with checkbox split button and text"
/>
);
await user.click(screen.getByRole(`button`) as Element);
expect(mockClick).toHaveBeenCalled();
});
test(`Renders with class ${styles.modifiers.form} when isInForm is passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.form);
});
test(`Does not render class ${styles.modifiers.form} when isInForm is false`, () => {
render(Toggle);
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.form);
});
test(`Renders with class ${styles.modifiers.placeholder} when isPlaceholder is passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.placeholder);
});
test(`Renders with class ${styles.modifiers.settings} when isSettings is passed`, () => {
render(Settings);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.settings);
});
test(`Renders with class ${styles.modifiers.circle} when variant="plain" and isCircle is true`, () => {
render();
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.circle);
});
toggleVariants
.filter((variant) => variant !== 'plain')
.forEach((variant) => {
test(`Does not with class ${styles.modifiers.circle} when variant="${variant}" and isCircle is true`, () => {
render(
Toggle
);
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.circle);
});
});
test('Does not render custom icon when icon prop and isSettings are passed', () => {
render(
Custom icon}>
Settings
);
expect(screen.queryByText('Custom icon')).not.toBeInTheDocument();
});
test(`Renders with class ${styles.modifiers.docked} when isDocked is passed`, () => {
render(Dock Toggle);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.docked);
});
test(`Does not render with class ${styles.modifiers.docked} when isDocked is not passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.docked);
});
test(`Renders with class ${styles.modifiers.textExpanded} when isTextExpanded is passed and isDocked is passed`, () => {
render(
Text Expanded Toggle
);
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.textExpanded);
});
test(`Does not render with class ${styles.modifiers.textExpanded} when isTextExpanded is not passed`, () => {
render(Toggle);
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.textExpanded);
});
test(`Does not render with class ${styles.modifiers.textExpanded} when isTextExpanded is passed but isDocked is not passed`, () => {
render(Text Expanded Toggle);
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.textExpanded);
});
test(`Renders with both ${styles.modifiers.docked} and ${styles.modifiers.textExpanded} when both props are passed`, () => {
render(
Dock Text Expanded Toggle
);
const button = screen.getByRole('button');
expect(button).toHaveClass(styles.modifiers.docked);
expect(button).toHaveClass(styles.modifiers.textExpanded);
});