import { createRef, useEffect, useState } from 'react'; import '@testing-library/jest-dom'; import { render, screen } from '@testing-library/react'; import { Panel } from '../Panel'; import { PanelMain } from '../PanelMain'; import { PanelMainBody } from '../PanelMainBody'; import userEvent from '@testing-library/user-event'; import styles from '@patternfly/react-styles/css/components/Panel/panel'; test('Renders without children', () => { render(
); expect(screen.getByTestId('panel').firstChild).toBeVisible(); }); test('Renders children', () => { render(Test); expect(screen.getByText('Test')).toBeVisible(); }); test(`Renders with the class ${styles.panel}`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.panel); }); test(`Renders with only the class ${styles.panel} by default`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.panel, { exact: true }); }); test('Renders with custom class name when className prop is passed', () => { render(Test); expect(screen.getByText('Test')).toHaveClass('test-class'); }); test(`Renders with class name ${styles.modifiers.raised} when variant is raised`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.raised); }); test(`Renders with class name ${styles.modifiers.bordered} when variant is bordered`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.bordered); }); test(`Renders with class name ${styles.modifiers.secondary} when variant is secondary`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.secondary); }); test(`Renders with class name ${styles.modifiers.scrollable} when isScrollable is true`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.scrollable); }); test(`Renders with class name ${styles.modifiers.scrollableAutoHeight} when isAutoHeight is true`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.scrollableAutoHeight); }); test(`Does not add ${styles.modifiers.scrollableAutoHeight} when isAutoHeight is false or undefined`, () => { const { rerender } = render(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.scrollableAutoHeight); rerender(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.scrollableAutoHeight); }); test(`Renders with class name ${styles.modifiers.noBorder} when hasNoBorder is true`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.noBorder); }); test(`Does not add ${styles.modifiers.noBorder} when hasNoBorder is false or undefined`, () => { const { rerender } = render(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.noBorder); rerender(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.noBorder); }); test(`Renders with class name ${styles.modifiers.fullHeight} when isFullHeight is true`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.fullHeight); }); test(`Does not add ${styles.modifiers.fullHeight} when isFullHeight is false or undefined`, () => { const { rerender } = render(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.fullHeight); rerender(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.fullHeight); }); test(`Renders with class name ${styles.modifiers.glass} when isGlass is true`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.glass); }); test(`Does not add ${styles.modifiers.glass} when isGlass is false or undefined`, () => { const { rerender } = render(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.glass); rerender(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.glass); }); test(`Renders with class name ${styles.modifiers.pill} when isPill is true`, () => { render(Test); expect(screen.getByText('Test')).toHaveClass(styles.modifiers.pill); }); test(`Does not add ${styles.modifiers.pill} when isPill is false or undefined`, () => { const { rerender } = render(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.pill); rerender(Test); expect(screen.getByText('Test')).not.toHaveClass(styles.modifiers.pill); }); test('Renders with ref', async () => { const user = userEvent.setup(); const panelRef: React.RefObject = createRef(); const BasicPanel = () => { const [lastClickWasInPanel, setLastClickWasInPanel] = useState(false); const handleClick = (event) => { if (panelRef.current && panelRef.current.contains(event.target)) { setLastClickWasInPanel(true); } else { setLastClickWasInPanel(false); } }; useEffect(() => { document.addEventListener('click', handleClick); }, []); return (
Main content

Last click was in panel: {lastClickWasInPanel ? 'true' : 'false'}

); }; render(); await user.click(document.body); expect(screen.getByText('Last click was in panel: false')).toBeVisible(); await user.click(screen.getByText('Main content')); expect(screen.getByText('Last click was in panel: true')).toBeVisible(); }); test('Renders with the inherited element props spread to the component', () => { render(Test); expect(screen.getByText('Test')).toHaveAccessibleName('this is a simple panel'); }); test('Matches the snapshot', () => { const { asFragment } = render(Test); expect(asFragment()).toMatchSnapshot(); }); test('Matches the snapshot with hasNoBorder', () => { const { asFragment } = render( Test ); expect(asFragment()).toMatchSnapshot(); }); test('Matches the snapshot with isFullHeight', () => { const { asFragment } = render( Test ); expect(asFragment()).toMatchSnapshot(); }); test('Matches the snapshot with isGlass', () => { const { asFragment } = render( Test ); expect(asFragment()).toMatchSnapshot(); }); test('Matches the snapshot with isAutoHeight', () => { const { asFragment } = render( Test ); expect(asFragment()).toMatchSnapshot(); }); test('Matches the snapshot with isPill', () => { const { asFragment } = render( Test ); expect(asFragment()).toMatchSnapshot(); });