import React from 'react';
import { mount, render } from 'enzyme';
import { Checkbox, CheckboxGroup } from '../../index';
import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
const options = [
{ label: 'Abc', value: 'abc' },
{ label: 'Hotsoon', value: 'hotsoon' },
{ label: 'Pipixia', value: 'pipixia' },
{ label: 'Toutiao', value: 'toutiao' },
];
function getCG(props) {
if (!props.children && !props.options) {
props.options = options;
}
return mount();
}
describe('CheckboxGroup', () => {
it('className & style', () => {
let checkboxGroup = getCG({
style: { color: 'red' },
className: 'cbg-test',
});
});
it('declare via options', () => {
let checkboxGroup = getCG({});
let group = checkboxGroup.find(`div.${BASE_CLASS_PREFIX}-checkboxGroup`);
expect(group.children().length).toEqual(4);
let labels = checkboxGroup.find(`.${BASE_CLASS_PREFIX}-checkbox-addon`);
expect(labels.at(0).text()).toEqual('Abc');
expect(labels.at(1).text()).toEqual('Hotsoon');
expect(labels.at(2).text()).toEqual('Pipixia');
expect(labels.at(3).text()).toEqual('Toutiao');
});
it('declare via children', () => {
let children = options.map(item => {item.label});
let props = {
children,
};
let checkboxGroup = getCG(props);
let group = checkboxGroup.find(`div.${BASE_CLASS_PREFIX}-checkboxGroup`);
expect(group.children().length).toEqual(4);
let labels = checkboxGroup.find(`.${BASE_CLASS_PREFIX}-checkbox-addon`);
expect(labels.at(0).text()).toEqual('Abc');
expect(labels.at(1).text()).toEqual('Hotsoon');
expect(labels.at(2).text()).toEqual('Pipixia');
expect(labels.at(3).text()).toEqual('Toutiao');
});
it('direction', () => {
let props = {
direction: 'horizontal',
};
let checkboxgroup = getCG(props);
expect(checkboxgroup.exists(`div.${BASE_CLASS_PREFIX}-checkboxGroup-horizontal`)).toEqual(true);
});
it('name', () => {
// all children should have a name property
const wrapper = mount();
wrapper.find('input[type="checkbox"]').forEach(el => {
expect(el.props().name).toEqual('checkboxgroup');
});
});
it('group - onChange', () => {
let onChange = checkedValue => { };
let spyOnChange = sinon.spy(onChange);
let props = {
onChange: spyOnChange,
};
let cg = getCG(props);
let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
checkboxs.at(0).simulate('click', {});
expect(spyOnChange.getCall(0).calledWithMatch(['abc'])).toEqual(true);
checkboxs.at(1).simulate('click', {});
expect(spyOnChange.getCall(1).calledWithMatch(['abc', 'hotsoon'])).toEqual(true);
checkboxs.at(2).simulate('click', {});
expect(spyOnChange.getCall(2).calledWithMatch(['abc', 'hotsoon', 'pipixia'])).toEqual(true);
expect(spyOnChange.callCount).toEqual(3);
});
it('disabled', () => {
let spyOnChange = sinon.spy(() => { });
let props = {
onChange: spyOnChange,
disabled: true,
};
let cg = getCG(props);
// does not trigger onChange callback of both Checkbox and CheckboxGroup when CheckboxGroup is disabled
expect(cg.find(`.${BASE_CLASS_PREFIX}-checkbox-disabled`).length).toEqual(4);
let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
checkboxs.at(0).simulate('click', {});
expect(spyOnChange.callCount).toEqual(0);
});
it('defaultValue', () => {
let spyOnChange = sinon.spy(ca => { });
let props = {
onChange: spyOnChange,
defaultValue: ['hotsoon'],
};
let cg = getCG(props);
let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
expect(checkboxs.at(1).hasClass(`${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(true);
checkboxs.at(0).simulate('click', {});
expect(spyOnChange.calledOnceWith(['hotsoon', 'abc'])).toEqual(true);
});
it('should be controlled by value', () => {
const options = [{ label: 'Apple', value: 'Apple' }, { label: 'Orange', value: 'Orange' }];
const wrapper = getCG({ options });
expect(wrapper.instance().state.value).toEqual([]);
wrapper.setProps({ value: ['Apple'] });
expect(wrapper.instance().state.value).toEqual(['Apple']);
});
it('should trigger onChange in sub Checkbox', () => {
const spyItemChange = sinon.spy(() => { });
const spyGroupChange = sinon.spy(() => { });
const cg = mount(
);
let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
checkboxs.at(0).simulate('click', {});
expect(spyItemChange.calledOnce).toEqual(true);
expect(spyGroupChange.calledOnce).toEqual(true);
});
it('checkboxGroup card style', () => {
const checkbox = getCG({ type: 'card' });
expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)).toEqual(true);
});
it('checkboxGroup pure card style', () => {
const checkbox = getCG({ type: 'pureCard' });
expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)).toEqual(true);
expect(checkbox.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-pureCardType`)).toEqual(true);
});
});