import { render, screen } from '@testing-library/react';
import { HelperTextItem } from '../HelperTextItem';
import styles from '@patternfly/react-styles/css/components/HelperText/helper-text';
test('Renders to match snapshot', () => {
const { asFragment } = render(help test text);
expect(asFragment()).toMatchSnapshot();
});
test('Renders without children', () => {
render(
);
expect(screen.getByTestId('container').firstChild).toBeVisible();
});
test('Renders default classes', () => {
render(help test text 1);
expect(screen.getByText('help test text 1')).toHaveClass(styles.helperTextItemText);
expect(screen.getByText('help test text 1').parentElement).toHaveClass(styles.helperTextItem);
});
test('Renders custom className', () => {
render(help test text 1);
expect(screen.getByText('help test text 1').parentElement).toHaveClass('custom');
});
test('Does not render screen reader text by default', () => {
render(help test text 1);
expect(screen.queryByText('status', { exact: false })).not.toBeInTheDocument();
});
Object.values(['indeterminate', 'warning', 'success', 'error']).forEach((variant) => {
test(`Renders with class ${styles.modifiers[variant]} when variant = ${variant}`, () => {
render(
text
);
expect(screen.getByText('text').parentElement).toHaveClass(styles.modifiers[variant]);
});
test(`Renders default screenreader text when variant = ${variant}`, () => {
render(
text
);
expect(screen.getByText(`: ${variant} status;`)).toBeInTheDocument();
});
test('Renders without screenreader text when screenReaderText is empty string', () => {
render(
text
);
expect(screen.queryByText(`: ${variant} status;`)).not.toBeInTheDocument();
});
});
test('Renders custom screen reader text', () => {
render(
help test text 1
);
expect(screen.queryByText(': error status;')).not.toBeInTheDocument();
expect(screen.getByText(': danger;')).toBeInTheDocument();
});
test('Renders id when id is passed', () => {
render(help test text 1);
expect(screen.getByText('help test text 1').parentElement).toHaveAttribute('id', 'text-item');
});
test('Renders as div by default when component is not passed', () => {
render(help test text 1);
expect(screen.getByText('help test text 1').parentElement?.tagName).toBe('DIV');
});
test('Renders with element passed to component prop', () => {
render(help test text 1);
expect(screen.getByText('help test text 1').parentElement?.tagName).toBe('LI');
});
test('Does not render an icon by default', () => {
render(help test text);
expect(screen.queryByText('help test text')?.previousSibling).not.toBeInTheDocument();
});
test('Renders a default icon when variant is passed and icon is not passed', () => {
render(help test text);
expect(screen.getByText('help test text').previousSibling).toHaveClass(styles.helperTextItemIcon);
});
test('Renders custom icon when icon prop is passed', () => {
render(icon content}>help test text);
expect(screen.getByText('icon content').parentElement).toHaveClass(styles.helperTextItemIcon);
});
test('Renders custom icon instead of variant icon when icon and variant are passed', () => {
render(
icon content} variant="success">
help test text
);
expect(screen.getByText('icon content').parentElement).toHaveClass(styles.helperTextItemIcon);
});