checkboxGroup.test.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import React from 'react';
  2. import { mount, render } from 'enzyme';
  3. import { Checkbox, CheckboxGroup } from '../../index';
  4. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  5. const options = [
  6. { label: 'Abc', value: 'abc' },
  7. { label: 'Hotsoon', value: 'hotsoon' },
  8. { label: 'Pipixia', value: 'pipixia' },
  9. { label: 'Toutiao', value: 'toutiao' },
  10. ];
  11. function getCG(props) {
  12. if (!props.children && !props.options) {
  13. props.options = options;
  14. }
  15. return mount(<CheckboxGroup {...props} />);
  16. }
  17. describe('CheckboxGroup', () => {
  18. it('className & style', () => {
  19. let checkboxGroup = getCG({
  20. style: { color: 'red' },
  21. className: 'cbg-test',
  22. });
  23. });
  24. it('declare via options', () => {
  25. let checkboxGroup = getCG({});
  26. let group = checkboxGroup.find(`div.${BASE_CLASS_PREFIX}-checkboxGroup`);
  27. expect(group.children().length).toEqual(4);
  28. let labels = checkboxGroup.find(`.${BASE_CLASS_PREFIX}-checkbox-addon`);
  29. expect(labels.at(0).text()).toEqual('Abc');
  30. expect(labels.at(1).text()).toEqual('Hotsoon');
  31. expect(labels.at(2).text()).toEqual('Pipixia');
  32. expect(labels.at(3).text()).toEqual('Toutiao');
  33. });
  34. it('declare via children', () => {
  35. let children = options.map(item => <Checkbox value={item.value}>{item.label}</Checkbox>);
  36. let props = {
  37. children,
  38. };
  39. let checkboxGroup = getCG(props);
  40. let group = checkboxGroup.find(`div.${BASE_CLASS_PREFIX}-checkboxGroup`);
  41. expect(group.children().length).toEqual(4);
  42. let labels = checkboxGroup.find(`.${BASE_CLASS_PREFIX}-checkbox-addon`);
  43. expect(labels.at(0).text()).toEqual('Abc');
  44. expect(labels.at(1).text()).toEqual('Hotsoon');
  45. expect(labels.at(2).text()).toEqual('Pipixia');
  46. expect(labels.at(3).text()).toEqual('Toutiao');
  47. });
  48. it('direction', () => {
  49. let props = {
  50. direction: 'horizontal',
  51. };
  52. let checkboxgroup = getCG(props);
  53. expect(checkboxgroup.exists(`div.${BASE_CLASS_PREFIX}-checkboxGroup-horizontal`)).toEqual(true);
  54. });
  55. it('name', () => {
  56. // all children should have a name property
  57. const wrapper = mount(<Checkbox.Group name="checkboxgroup" options={['Yes', 'No']} />);
  58. wrapper.find('input[type="checkbox"]').forEach(el => {
  59. expect(el.props().name).toEqual('checkboxgroup');
  60. });
  61. });
  62. it('group - onChange', () => {
  63. let onChange = checkedValue => { };
  64. let spyOnChange = sinon.spy(onChange);
  65. let props = {
  66. onChange: spyOnChange,
  67. };
  68. let cg = getCG(props);
  69. let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
  70. checkboxs.at(0).simulate('click', {});
  71. expect(spyOnChange.getCall(0).calledWithMatch(['abc'])).toEqual(true);
  72. checkboxs.at(1).simulate('click', {});
  73. expect(spyOnChange.getCall(1).calledWithMatch(['abc', 'hotsoon'])).toEqual(true);
  74. checkboxs.at(2).simulate('click', {});
  75. expect(spyOnChange.getCall(2).calledWithMatch(['abc', 'hotsoon', 'pipixia'])).toEqual(true);
  76. expect(spyOnChange.callCount).toEqual(3);
  77. });
  78. it('disabled', () => {
  79. let spyOnChange = sinon.spy(() => { });
  80. let props = {
  81. onChange: spyOnChange,
  82. disabled: true,
  83. };
  84. let cg = getCG(props);
  85. // does not trigger onChange callback of both Checkbox and CheckboxGroup when CheckboxGroup is disabled
  86. expect(cg.find(`.${BASE_CLASS_PREFIX}-checkbox-disabled`).length).toEqual(4);
  87. let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
  88. checkboxs.at(0).simulate('click', {});
  89. expect(spyOnChange.callCount).toEqual(0);
  90. });
  91. it('defaultValue', () => {
  92. let spyOnChange = sinon.spy(ca => { });
  93. let props = {
  94. onChange: spyOnChange,
  95. defaultValue: ['hotsoon'],
  96. };
  97. let cg = getCG(props);
  98. let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
  99. expect(checkboxs.at(1).hasClass(`${BASE_CLASS_PREFIX}-checkbox-inner-checked`)).toEqual(true);
  100. checkboxs.at(0).simulate('click', {});
  101. expect(spyOnChange.calledOnceWith(['hotsoon', 'abc'])).toEqual(true);
  102. });
  103. it('should be controlled by value', () => {
  104. const options = [{ label: 'Apple', value: 'Apple' }, { label: 'Orange', value: 'Orange' }];
  105. const wrapper = getCG({ options });
  106. expect(wrapper.instance().state.value).toEqual([]);
  107. wrapper.setProps({ value: ['Apple'] });
  108. expect(wrapper.instance().state.value).toEqual(['Apple']);
  109. });
  110. it('should trigger onChange in sub Checkbox', () => {
  111. const spyItemChange = sinon.spy(() => { });
  112. const spyGroupChange = sinon.spy(() => { });
  113. const cg = mount(
  114. <CheckboxGroup onChange={spyGroupChange}>
  115. <Checkbox value="my" onChange={spyItemChange} />
  116. </CheckboxGroup>
  117. );
  118. let checkboxs = cg.find(`.${BASE_CLASS_PREFIX}-checkbox-inner`);
  119. checkboxs.at(0).simulate('click', {});
  120. expect(spyItemChange.calledOnce).toEqual(true);
  121. expect(spyGroupChange.calledOnce).toEqual(true);
  122. });
  123. it('checkboxGroup card style', () => {
  124. const checkboxGroup = getCG({ type: 'card' });
  125. expect(checkboxGroup.exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)).toEqual(true);
  126. checkboxGroup.unmount();
  127. const disabledCheckboxGroup = getCG({ type: 'card', disabled: true, defaultValue: 'abc' });
  128. expect(
  129. disabledCheckboxGroup
  130. .find(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)
  131. .at(0)
  132. .exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType_checked_disabled`)
  133. ).toEqual(true);
  134. expect(
  135. disabledCheckboxGroup
  136. .find(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)
  137. .at(1)
  138. .exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType_checked_disabled`)
  139. ).toEqual(false);
  140. disabledCheckboxGroup.unmount();
  141. });
  142. it('checkboxGroup pure card style', () => {
  143. const checkboxGroup = getCG({ type: 'pureCard' });
  144. expect(checkboxGroup.exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)).toEqual(true);
  145. expect(checkboxGroup.exists(`.${BASE_CLASS_PREFIX}-checkbox-inner-pureCardType`)).toEqual(true);
  146. checkboxGroup.unmount();
  147. const disabledCheckboxGroup = getCG({ type: 'pureCard', disabled: true, defaultValue: 'abc' });
  148. expect(
  149. disabledCheckboxGroup
  150. .find(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)
  151. .at(0)
  152. .exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType_checked_disabled`)
  153. ).toEqual(true);
  154. expect(
  155. disabledCheckboxGroup
  156. .find(`.${BASE_CLASS_PREFIX}-checkbox-cardType`)
  157. .at(1)
  158. .exists(`.${BASE_CLASS_PREFIX}-checkbox-cardType_checked_disabled`)
  159. ).toEqual(false);
  160. disabledCheckboxGroup.unmount();
  161. });
  162. });