import React from 'react'; import { mount } from 'enzyme'; import { Checkbox } from '../../index'; import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants'; function getCb(props) { return mount(); } describe('checkbox', () => { it('className & style', () => { const checkbox = getCb({ className: 'test', style: { color: 'red' }, }); expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox.test`)).toEqual(true); expect(checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox.test`)).toHaveStyle('color', 'red'); }); it('should work basically & click behaviour', () => { const checkbox = getCb(); let checkboxDOM = checkbox.find('input'); expect(checkboxDOM.exists()).toEqual(true); expect(checkbox.state().checked).toEqual(false); expect(!!checkboxDOM.disabled).toEqual(false); checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {}); expect(checkbox.state().checked).toEqual(true); }); it('defaultChecked', () => { const checkbox = getCb({ defaultChecked: true }); const checkboxDOM = checkbox.find('input').getDOMNode(); expect(!!checkboxDOM.checked).toEqual(true); }); it('checked, controlled mode', () => { const checkbox = getCb({ checked: true }); expect(checkbox.state().checked).toEqual(true); expect(checkbox.find('input').getDOMNode().checked).toEqual(true); expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(true); checkbox.setProps({ checked: false }); checkbox.update(); expect(checkbox.state().checked).toEqual(false); expect(checkbox.find('input').getDOMNode().checked).toEqual(false); expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(false); checkbox.setProps({ checked: true }) checkbox.update(); expect(checkbox.state().checked).toEqual(true); expect(checkbox.find('input').getDOMNode().checked).toEqual(true); expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(true); // case like formApi.reset() will case checked true => undefined // can't setProps({}) here, otherwise props compare can't work checkbox.setProps({ checked: undefined }); checkbox.update(); expect(checkbox.state().checked).toEqual(false); expect(checkbox.find('input').getDOMNode().checked).toEqual(false); expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(false); }); it('disabled', () => { const checkbox = getCb({ disabled: true }); expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-disabled`)).toEqual(true); expect(checkbox.state().checked).toEqual(false); checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {}); expect(checkbox.state().checked).toEqual(false); }); it('onChange', () => { const onChange = sinon.spy(value => {}); const checkbox = mount(); checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {}); expect(onChange.getCall(0).args[0].target.checked).toEqual(true); checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox`).simulate('click', {}); expect(onChange.getCall(1).args[0].target.checked).toEqual(false); }); it('extra', () => { let text = 'abcd'; const checkbox = getCb({ extra: text }); expect(checkbox.find(`.${BASE_CLASS_PREFIX}-checkbox-extra`).text()).toEqual(text); }); });