import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import '@testing-library/jest-dom'; import { AlertToggleExpandButton } from '../AlertToggleExpandButton'; import { AlertContext } from '../AlertContext'; import styles from '@patternfly/react-styles/css/components/Alert/alert'; jest.mock('../../Button'); jest.mock('@patternfly/react-icons/dist/esm/icons/rh-microns-caret-down-icon', () => () => 'Icon mock'); test('Renders without children', () => { render( ); expect(screen.getByRole('button')).toBeVisible(); }); test('Renders with an aria label composed with the title and variantLabel provided via a context by default', () => { render( ); expect(screen.getByRole('button')).toHaveAccessibleName('Toggle variantLabel alert: title'); }); test('Renders with the aria label provided via prop when one is provided', () => { render( ); expect(screen.getByRole('button')).toHaveAccessibleName('Aria label prop'); }); test('Does not call the callback provided via onToggleExpand when it is not clicked', () => { const onToggleExpandMock = jest.fn(); render( ); expect(onToggleExpandMock).not.toHaveBeenCalled(); }); test('Calls the callback provided via onToggleExpand when clicked', async () => { const onToggleExpandMock = jest.fn(); const user = userEvent.setup(); render( ); await user.click(screen.getByRole('button')); expect(onToggleExpandMock).toHaveBeenCalledTimes(1); }); test('Does not render the button as aria-expanded by default', () => { render( ); expect(screen.getByRole('button')).toHaveAttribute('aria-expanded', 'false'); }); test('Renders the button as aria-expanded when isExpanded = true', () => { render( ); expect(screen.getByRole('button')).toHaveAttribute('aria-expanded', 'true'); }); test('Renders with an aria label composed with the title provided via a context and variantLabel provided via prop', () => { render( ); expect(screen.getByRole('button')).toHaveAccessibleName('Toggle variantLabelProp alert: title'); }); test('Renders a Button with variant: ButtonVariant.plain', () => { render( ); expect(screen.getByText('variant: plain')).toBeVisible(); }); test(`Renders with the toggle icon inside class ${styles.alertToggleIcon}`, () => { render( ); expect(screen.getByText('Icon mock')).toHaveClass(styles.alertToggleIcon); }); test('Renders with inherited element props spread to the component', () => { render( ); expect(screen.getByRole('button')).toHaveAccessibleName('Test label'); }); test('Matches snapshot', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); });