import { useContext } from 'react';
import { render, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
import styles from '@patternfly/react-styles/css/components/TextInputGroup/text-input-group';
import { TextInputGroup, TextInputGroupContext } from '../TextInputGroup';
describe('TextInputGroup', () => {
it('renders without children', () => {
render();
expect(screen.getByTestId('TextInputGroup')).toBeVisible();
});
it('renders children', () => {
render(Test);
expect(screen.getByText('Test')).toBeVisible();
});
it(`renders with class ${styles.textInputGroup}`, () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).toHaveClass(styles.textInputGroup);
});
it('renders with custom class names provided via prop', () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).toHaveClass('custom-class');
});
it(`does not render with the ${styles.modifiers.disabled} class when not disabled`, () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).not.toHaveClass(styles.modifiers.disabled);
});
it(`renders with the ${styles.modifiers.disabled} class when disabled`, () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).toHaveClass(styles.modifiers.disabled);
});
it(`renders with class ${styles.modifiers.success} when validated="success"`, () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).toHaveClass(styles.modifiers.success);
});
it(`renders with class ${styles.modifiers.warning} when validated="warning"`, () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).toHaveClass(styles.modifiers.warning);
});
it(`renders with class ${styles.modifiers.error} when validated="error"`, () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).toHaveClass(styles.modifiers.error);
});
it('does not apply validation modifiers when validated="default"', () => {
render(Test);
const inputGroup = screen.getByText('Test');
expect(inputGroup).not.toHaveClass(styles.modifiers.success);
expect(inputGroup).not.toHaveClass(styles.modifiers.warning);
expect(inputGroup).not.toHaveClass(styles.modifiers.error);
});
it('passes isDisabled=false to children via a context when isDisabled prop is not passed', () => {
const TestComponent: React.FunctionComponent = () => {
const context = useContext(TextInputGroupContext);
return ;
};
render(
);
const testComponent = screen.getByRole('button');
expect(testComponent).not.toBeDisabled();
});
it('passes isDisabled=true to children via a context when isDisabled prop is passed', () => {
const TestComponent: React.FunctionComponent = () => {
const context = useContext(TextInputGroupContext);
return ;
};
render(
);
const testComponent = screen.getByRole('button');
expect(testComponent).toBeDisabled();
});
it('matches the snapshot', () => {
const { asFragment } = render(Test);
expect(asFragment()).toMatchSnapshot();
});
});