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