collapse.test.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { Collapse } from '../../index';
  2. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants'; // import toJson from 'enzyme-to-json';
  3. import { IconPlus, IconMinus, IconCopy } from '@douyinfe/semi-icons';
  4. let getCollapse = collapseProps => {
  5. let props = collapseProps ? collapseProps : {};
  6. return (
  7. <Collapse {...collapseProps}>
  8. <Collapse.Panel header="This is panel header 1" itemKey="1">
  9. <p>Hi, bytedance dance dance. This is the docsite of Semi UI. </p>
  10. </Collapse.Panel>
  11. <Collapse.Panel header="This is panel header 2" itemKey="2">
  12. <p>Hi, bytedance dance dance. This is the docsite of Semi UI. </p>
  13. </Collapse.Panel>
  14. <Collapse.Panel header="This is panel header 3" itemKey="3">
  15. <p>Hi, bytedance dance dance. This is the docsite of Semi UI. </p>
  16. </Collapse.Panel>
  17. </Collapse>
  18. );
  19. };
  20. let collapseCls = `.${BASE_CLASS_PREFIX}-collapse`;
  21. let expandAttr = 'aria-expanded';
  22. describe('Collapse', () => {
  23. it('Collapse with custom className & style', () => {
  24. let props = {
  25. className: 'test',
  26. style: {
  27. color: 'red',
  28. },
  29. };
  30. const collapse = shallow(getCollapse(props));
  31. expect(collapse.exists('.test')).toEqual(true);
  32. expect(collapse.find('div.test')).toHaveStyle('color', 'red');
  33. });
  34. it('Collapse with defaultActiveKey', () => {
  35. // 直接测试对应dom是否有对应的attribute
  36. let oneExpandProps = {
  37. defaultActiveKey: '1',
  38. };
  39. let moreExpandProps = {
  40. defaultActiveKey: ['1', '2'],
  41. };
  42. const oneExpand = mount(getCollapse(oneExpandProps));
  43. const moreExpand = mount(getCollapse(moreExpandProps));
  44. const oneExpandHeaders = oneExpand.find('.semi-collapse-header');
  45. expect(oneExpandHeaders.at(0).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  46. expect(oneExpandHeaders.at(1).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  47. expect(oneExpandHeaders.at(2).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  48. const moreExpandHeaders = moreExpand.find('.semi-collapse-header')
  49. expect(moreExpandHeaders.at(0).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  50. expect(moreExpandHeaders.at(1).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  51. expect(moreExpandHeaders.at(2).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  52. });
  53. it('Collapse with custom expandIcon / collapseIcon', () => {
  54. let plusIcon = <IconPlus />;
  55. let minIcon = <IconMinus />;
  56. let props = {
  57. expandIcon: plusIcon,
  58. collapseIcon: minIcon,
  59. };
  60. let collapse = mount(getCollapse(props));
  61. expect(collapse.props().expandIcon).toEqual(plusIcon);
  62. expect(collapse.props().collapseIcon).toEqual(minIcon);
  63. expect(collapse.contains(plusIcon)).toEqual(true);
  64. expect(collapse.contains(minIcon)).toEqual(false);
  65. collapse
  66. .find(`.${BASE_CLASS_PREFIX}-collapse-header`)
  67. .at(0)
  68. .simulate('click');
  69. expect(collapse.contains(minIcon)).toEqual(true);
  70. });
  71. it('Collapse with custom extra content', () => {
  72. let extra1 = '1234';
  73. let extra2 = <IconCopy />;
  74. let collapse = mount(
  75. <Collapse>
  76. <Collapse.Panel header="This is panel header 1" itemKey="1" extra={extra1}>
  77. <p>Hi, bytedance dance dance. This is the docsite of Semi UI. </p>
  78. </Collapse.Panel>
  79. <Collapse.Panel header="This is panel header 2" itemKey="2" extra={extra2}>
  80. <p>Hi, bytedance dance dance. This is the docsite of Semi UI. </p>
  81. </Collapse.Panel>
  82. </Collapse>
  83. );
  84. let panels = collapse.find(`.${BASE_CLASS_PREFIX}-collapse-header-right`);
  85. let panel1 = panels.at(0);
  86. let panel2 = panels.at(1);
  87. expect(panel1.contains(extra1)).toEqual(true);
  88. expect(panel1.contains(extra1)).toEqual(true);
  89. });
  90. it('Collapse onChange', () => {
  91. let onChange = value => {};
  92. let spyOnChange = sinon.spy(onChange);
  93. let props = {
  94. onChange: spyOnChange,
  95. };
  96. const collapse = mount(getCollapse(props));
  97. collapse
  98. .find(`.${BASE_CLASS_PREFIX}-collapse-header`)
  99. .at(2)
  100. .simulate('click');
  101. expect(spyOnChange.calledWithMatch(['3'])).toBe(true);
  102. expect(spyOnChange.calledOnce).toBe(true);
  103. });
  104. it('expand more than one panel', () => {
  105. const collapse = mount(getCollapse());
  106. collapse
  107. .find(`.${BASE_CLASS_PREFIX}-collapse-header`)
  108. .at(1)
  109. .simulate('click');
  110. collapse
  111. .find(`.${BASE_CLASS_PREFIX}-collapse-header`)
  112. .at(2)
  113. .simulate('click');
  114. let activeSet = [...collapse.state().activeSet];
  115. expect(JSON.stringify(activeSet)).toEqual('["2","3"]');
  116. const headers = collapse.find('.semi-collapse-header');
  117. expect(headers.at(0).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  118. expect(headers.at(1).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  119. expect(headers.at(2).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  120. });
  121. it('accordion, Only one expansion is allowed', () => {
  122. let props = {
  123. accordion: true,
  124. defaultActiveKey: ['1', '2'],
  125. };
  126. const collapse = mount(getCollapse(props));
  127. let activeSet = [...collapse.state().activeSet];
  128. expect(activeSet[0]).toEqual('1');
  129. // only first key active when accordion is true & defaultActiveKey set more than one key
  130. const headers = collapse.find('.semi-collapse-header');
  131. expect(headers.at(0).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  132. expect(headers.at(1).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  133. // simulate click panel-3
  134. collapse.find(`.${BASE_CLASS_PREFIX}-collapse-header`).at(2).simulate('click');
  135. activeSet = [...collapse.state().activeSet];
  136. expect(activeSet[0]).toEqual('3');
  137. expect(headers.at(0).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  138. expect(headers.at(1).getDOMNode().getAttribute(expandAttr)).toEqual("false");
  139. expect(headers.at(2).getDOMNode().getAttribute(expandAttr)).toEqual("true");
  140. });
  141. });