import React from 'react'; import { fireEvent, render } from '../../test-utils'; import '@testing-library/jest-dom'; import { Size, ToggleSwitch } from '../..'; import 'jest-styled-components'; describe('', () => { it('Renders ToggleSwitch component', async () => { const { getByText } = render( {}} selected={false} />); //check label element rendered expect(getByText('Test Switch label').closest('label')).toBeTruthy(); //check label text expect(getByText('Test Switch label')).toBeTruthy(); //no size defined, medium by default expect(getByText('Test Switch label').closest('div')).toHaveClass('medium'); }); it('Renders ToggleSwitch component without label', async () => { const { container } = render( {}} selected={false} />); //check label element rendered expect(container.querySelector('.label')).toBeFalsy(); //large size defined expect(container.querySelector('[id="switchContainer"]')!.closest('div')).toHaveClass('large'); //should be able to focus the parent div as not disabeld expect(container.querySelector('[id="switchContainer"]')!.closest('div')).toHaveAttribute('tabindex', '0'); }); it('Renders disabled ToggleSwitch component', async () => { const { container } = render( {}} selected={false} />); expect(container.querySelector('[id="switchContainer"]')!.closest('div')).toHaveClass('disabled'); expect(container.querySelector('[id="switchContainer"]')!.closest('div')).toHaveAttribute('tabindex', '-1'); }); it('Renders semantic ToggleSwitch component', async () => { const { container } = render( {}} selected={false} />); //semnatic class should be added expect(container.querySelector('[id="switchContainer"]')!.firstElementChild).toHaveClass('semantic'); }); it('Check toggle click for ToggleSwitch component', async () => { const handleToggle = jest.fn(); const { container } = render(); fireEvent( container.querySelector('[id="switchContainer"]')!.closest('div') as HTMLDivElement, new MouseEvent('click', { bubbles: true, cancelable: true, }), ); expect(handleToggle).toHaveBeenCalledTimes(1); }); it('Check toggle click not fired when ToggleSwitch disabled', async () => { const handleToggle = jest.fn(); const { container } = render(); //check disabled expect(container.querySelector('[id="switchContainer"]')!.closest('div')).toHaveClass('disabled'); //simulate click fireEvent( container.querySelector('[id="switchContainer"]')!.closest('div') as HTMLDivElement, new MouseEvent('click', { bubbles: true, cancelable: true, }), ); //check callback not called expect(handleToggle).toHaveBeenCalledTimes(0); }); it('Check toggle onkeydown ev for ToggleSwitch component', async () => { const handleToggle = jest.fn(); const { container } = render(); fireEvent.keyDown(container.querySelector('[id="switchContainer"]')!.closest('div') as HTMLDivElement, { key: 'Enter', code: 'Enter', charCode: 13 }); expect(handleToggle).toHaveBeenCalledTimes(1); }); });