import React from 'react';
import userEvent from '@testing-library/user-event';
import { waitFor } from '@testing-library/react';
import renderWithTheme from '../../../testUtils/renderWithTheme';
import Checkbox from '..';
const CheckboxButton = Checkbox.Button;
describe('rendering', () => {
it('shows text label', () => {
const { getByText } = renderWithTheme(
);
expect(getByText('CheckboxButton Text')).toBeInTheDocument();
});
it('allows to customize text', () => {
const { getByText } = renderWithTheme(
Customized text}
/>
);
expect(getByText('Customized text')).toBeInTheDocument();
});
});
describe('interaction', () => {
it('triggers onChange when clicking on the button', () => {
const onChange = jest.fn();
const { getByText } = renderWithTheme(
onChange(e.target.checked)}
/>
);
userEvent.click(getByText('CheckboxButton Text'));
expect(onChange).toHaveBeenCalledTimes(1);
expect(onChange).toHaveBeenCalledWith(true);
userEvent.click(getByText('CheckboxButton Text'));
expect(onChange).toHaveBeenCalledTimes(2);
expect(onChange).toHaveBeenCalledWith(false);
});
it('does not trigger onChange when clicking on a disabled button', async () => {
const onChange = jest.fn();
const { getByText } = renderWithTheme(
onChange(e.target.checked)}
/>
);
await waitFor(() => {
expect(() =>
userEvent.click(getByText('CheckboxButton Text'))
).toThrowError(
'unable to click element as it has or inherits pointer-events set to "none".'
);
});
expect(onChange).not.toHaveBeenCalled();
});
it('allows to be controlled', () => {
const onChange = jest.fn();
const { getByText } = renderWithTheme(
onChange(e.target.checked)}
/>
);
userEvent.click(getByText('CheckboxButton Text'));
expect(onChange).toHaveBeenCalledTimes(1);
expect(onChange).toHaveBeenCalledWith(true);
});
});