import { render, fireEvent, screen } from '../test-utils';
import CheckboxOption from '.';
describe('Checkbox option', () => {
const defaultProps = {
id: 'id',
name: 'name',
title: 'Title',
onChange: jest.fn(),
'aria-label': 'test-label',
};
describe('by default', () => {
render();
const checkbox = screen.getByRole('checkbox');
it('is not checked', () => {
expect(checkbox).not.toBeChecked();
});
it('is not disabled', () => {
expect(checkbox).toBeEnabled();
});
});
it('has `aria-label` attr', () => {
render();
const checkbox = screen.getByLabelText('test-label');
expect(checkbox).toBeInTheDocument();
});
it('is checked when checked prop is true', () => {
render();
expect(screen.getByRole('checkbox')).toBeChecked();
});
it('is disabled when disabled prop is true', () => {
render();
expect(screen.getByRole('checkbox')).toBeDisabled();
});
describe('onChange', () => {
it('is called with new checked value when the option is clicked', () => {
const onChange = jest.fn();
const { rerender } = render();
const label = screen.getByLabelText('test-label');
expect(onChange).not.toHaveBeenCalled();
fireEvent.click(label);
expect(onChange).toHaveBeenCalledWith(true);
rerender();
fireEvent.click(label);
expect(onChange).toHaveBeenCalledWith(false);
});
it('is not called if the option is disabled', () => {
const onChange = jest.fn();
render();
const label = screen.getByLabelText('test-label');
expect(onChange).not.toHaveBeenCalled();
fireEvent.click(label);
expect(onChange).not.toHaveBeenCalled();
});
});
it('renders aligned with container content', () => {
render();
expect(document.querySelector('.np-option__container-aligned')).toBeInTheDocument();
});
});