// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import '@testing-library/jest-dom';
import { fireEvent } from '@testing-library/dom';
import React from 'react';
import Checkbox from '../../../../src/components/ui/Checkbox';
import lightTheme from '../../../../src/theme/light';
import { renderWithTheme } from '../../../test-helpers';
let mockFunction: any, value: string;
describe('Checkbox', () => {
beforeEach(() => {
value = 'test-value';
mockFunction = jest.fn();
});
it('should render a Checkbox contains HiddenCheckbox component in the document', () => {
const component = ;
const { getByTestId } = renderWithTheme(lightTheme, component);
const hiddenCheckbox = getByTestId('hidden-checkbox');
expect(hiddenCheckbox).toBeInTheDocument();
});
it('should render a Checkbox contains StyledCheckbox component in the document', () => {
const component = ;
const { getByTestId } = renderWithTheme(lightTheme, component);
const styledCheckbox = getByTestId('styled-checkbox');
expect(styledCheckbox).toBeInTheDocument();
});
it('should render a Checkbox with an attribute value', () => {
const component = ;
const { getByTestId } = renderWithTheme(lightTheme, component);
const hiddenCheckbox = getByTestId('hidden-checkbox');
expect(hiddenCheckbox).toHaveAttribute('value', 'test-value');
});
it('should render a Checkbox with an attribute type=checkbox', () => {
const component = ;
const { getByTestId } = renderWithTheme(lightTheme, component);
const hiddenCheckbox = getByTestId('hidden-checkbox');
expect(hiddenCheckbox).toHaveAttribute('type', 'checkbox');
});
it('should render a unchecked Checkbox', () => {
const component = ;
const { queryByTestId } = renderWithTheme(lightTheme, component);
expect(queryByTestId('check')).not.toBeInTheDocument();
});
it('should render a checked Checkbox', () => {
const component = (
);
const { queryByTestId } = renderWithTheme(lightTheme, component);
expect(queryByTestId('check')).toBeInTheDocument();
});
it('should call onChange event handler once if ticks the checkbox', () => {
const component = ;
const { getByTestId } = renderWithTheme(lightTheme, component);
const styledCheckbox = getByTestId('styled-checkbox');
fireEvent.click(styledCheckbox);
expect(mockFunction).toHaveBeenCalledTimes(1);
});
it('should become focused if ticks the checkbox', () => {
const component = ;
const { getByTestId } = renderWithTheme(lightTheme, component);
const hiddenCheckbox = getByTestId('hidden-checkbox');
const styledCheckbox = getByTestId('styled-checkbox');
fireEvent.click(styledCheckbox);
expect(hiddenCheckbox).toHaveFocus();
});
it('should become focused if unticks the checkbox', () => {
const component = (
);
const { getByTestId } = renderWithTheme(lightTheme, component);
const hiddenCheckbox = getByTestId('hidden-checkbox');
const styledCheckbox = getByTestId('styled-checkbox');
fireEvent.click(styledCheckbox);
expect(hiddenCheckbox).toHaveFocus();
});
it('should become unchecked if unticks the checkbox', () => {
const component = (
);
const { getByTestId, queryByTestId } = renderWithTheme(
lightTheme,
component
);
const styledCheckbox = getByTestId('styled-checkbox');
fireEvent.click(styledCheckbox);
expect(queryByTestId('check')).toBeInTheDocument();
});
});