timeline.test.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. import { Timeline, Icon } from '../../index';
  2. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  3. const dataSource = [
  4. {
  5. time: '2019-07-14 10:35',
  6. extra: '节点辅助说明信息',
  7. content: '第一个节点内容',
  8. type: 'ongoing',
  9. },
  10. {
  11. time: '2019-06-13 16:17',
  12. extra: '节点辅助说明信息',
  13. content: <span style={{ fontSize: '18px' }}>第二个节点内容</span>,
  14. color: 'pink',
  15. },
  16. {
  17. time: '2019-05-14 18:34',
  18. extra: '节点辅助说明信息',
  19. dot: <Icon type="alert_triangle" />,
  20. content: '第三个节点内容',
  21. type: 'warning',
  22. },
  23. {
  24. time: '2019-05-09 09:12',
  25. extra: '节点辅助说明信息',
  26. content: '第四个节点内容',
  27. type: 'success',
  28. },
  29. ];
  30. function renderTl(props) {
  31. const realProps = {
  32. dataSource,
  33. ...props,
  34. };
  35. return mount(<Timeline {...realProps}></Timeline>, {
  36. attachTo: document.getElementById('container'),
  37. });
  38. }
  39. describe('Timeline', () => {
  40. beforeEach(() => {
  41. const div = document.createElement('div');
  42. div.setAttribute('id', 'container');
  43. document.body.appendChild(div);
  44. });
  45. afterEach(() => {
  46. const div = document.getElementById('container');
  47. if (div) {
  48. document.body.removeChild(div);
  49. }
  50. document.body.innerHTML = '';
  51. });
  52. it('Timeline with dataSource', () => {
  53. const timeline = renderTl();
  54. const item = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-timeline-item`);
  55. expect(item.length).toEqual(4);
  56. const firstItem = timeline.find(`.${BASE_CLASS_PREFIX}-timeline-item .${BASE_CLASS_PREFIX}-timeline-item-content`).at(0);
  57. // content
  58. expect(
  59. firstItem
  60. .getDOMNode()
  61. .textContent
  62. ).toEqual('第一个节点内容节点辅助说明信息2019-07-14 10:35');
  63. // extra
  64. expect(
  65. firstItem
  66. .find(`.${BASE_CLASS_PREFIX}-timeline-item-content-extra`)
  67. .getDOMNode()
  68. .textContent
  69. ).toEqual('节点辅助说明信息');
  70. // time
  71. expect(
  72. firstItem
  73. .find(`.${BASE_CLASS_PREFIX}-timeline-item-content-time`)
  74. .getDOMNode()
  75. .textContent
  76. ).toEqual('2019-07-14 10:35');
  77. // type
  78. expect(
  79. timeline
  80. .exists(`.${BASE_CLASS_PREFIX}-timeline-item .${BASE_CLASS_PREFIX}-timeline-item-head-ongoing`)
  81. ).toEqual(true);
  82. timeline.unmount();
  83. });
  84. it('Timeline with jsx',()=>{
  85. const timeline=mount(<Timeline>
  86. <Timeline.Item time="2019-07-14 10:35">第一个节点内容</Timeline.Item>
  87. <Timeline.Item time="2019-06-13 16:17">第二个节点内容</Timeline.Item>
  88. <Timeline.Item time="2019-05-14 18:34">第三个节点内容</Timeline.Item>
  89. </Timeline>, {
  90. attachTo: document.getElementById('container'),
  91. });
  92. const firstItem = timeline.find(`.${BASE_CLASS_PREFIX}-timeline-item .${BASE_CLASS_PREFIX}-timeline-item-content`).at(0);
  93. expect(
  94. firstItem
  95. .getDOMNode()
  96. .textContent
  97. ).toEqual('第一个节点内容2019-07-14 10:35');
  98. timeline.unmount();
  99. });
  100. it('Timeline with type',()=>{
  101. const timeline=mount(<Timeline>
  102. <Timeline.Item time="2019-07-14 10:35" type='default'>第一个节点内容</Timeline.Item>
  103. <Timeline.Item time="2019-06-13 16:17" type='ongoing'>第二个节点内容</Timeline.Item>
  104. <Timeline.Item time="2019-05-14 18:34" type='success'>第三个节点内容</Timeline.Item>
  105. <Timeline.Item time="2019-05-14 18:34" type='warning'>第四个节点内容</Timeline.Item>
  106. <Timeline.Item time="2019-05-14 18:34" type='error'>第五个节点内容</Timeline.Item>
  107. </Timeline>, {
  108. attachTo: document.getElementById('container'),
  109. });
  110. const items = timeline.find(`.${BASE_CLASS_PREFIX}-timeline-item`);
  111. expect(items.length).toEqual(5);
  112. expect(
  113. items
  114. .at(0)
  115. .exists(`.${BASE_CLASS_PREFIX}-timeline-item-head-default`)
  116. ).toEqual(true);
  117. expect(
  118. items
  119. .at(1)
  120. .exists(`.${BASE_CLASS_PREFIX}-timeline-item-head-ongoing`)
  121. ).toEqual(true);
  122. expect(
  123. items
  124. .at(2)
  125. .exists(`.${BASE_CLASS_PREFIX}-timeline-item-head-success`)
  126. ).toEqual(true);
  127. expect(
  128. items
  129. .at(3)
  130. .exists(`.${BASE_CLASS_PREFIX}-timeline-item-head-warning`)
  131. ).toEqual(true);
  132. expect(
  133. items
  134. .at(4)
  135. .exists(`.${BASE_CLASS_PREFIX}-timeline-item-head-error`)
  136. ).toEqual(true);
  137. timeline.unmount();
  138. });
  139. it('Timeline with className & style', () => {
  140. const timeline=mount(<Timeline className='test' style={{color: 'red'}}>
  141. <Timeline.Item time="2019-07-14 10:35" type='default'>第一个节点内容</Timeline.Item>
  142. <Timeline.Item time="2019-06-13 16:17" type='ongoing'>第二个节点内容</Timeline.Item>
  143. <Timeline.Item time="2019-05-14 18:34" type='success'>第三个节点内容</Timeline.Item>
  144. </Timeline>, {
  145. attachTo: document.getElementById('container'),
  146. });
  147. expect(timeline.exists('.test')).toEqual(true);
  148. expect(timeline.find(`.${BASE_CLASS_PREFIX}-timeline.test`)).toHaveStyle('color', 'red');
  149. });
  150. it('Timeline.item with className & style', () => {
  151. const timeline=mount(<Timeline>
  152. <Timeline.Item time="2019-07-14 10:35" type='default' className='test' style={{color: 'red'}}>第一个节点内容</Timeline.Item>
  153. <Timeline.Item time="2019-06-13 16:17" type='ongoing'>第二个节点内容</Timeline.Item>
  154. <Timeline.Item time="2019-05-14 18:34" type='success'>第三个节点内容</Timeline.Item>
  155. </Timeline>, {
  156. attachTo: document.getElementById('container'),
  157. });
  158. const firstItems = timeline.find(`.${BASE_CLASS_PREFIX}-timeline-item`).at(0);
  159. expect(firstItems.find(`.${BASE_CLASS_PREFIX}-timeline-item.test`)).toHaveStyle('color', 'red');
  160. expect(firstItems.exists('.test')).toEqual(true);
  161. });
  162. it('Timeline with type',()=>{
  163. const timeline=mount(<Timeline>
  164. <Timeline.Item time="2019-07-14 10:35">默认样式的节点</Timeline.Item>
  165. <Timeline.Item time="2019-06-13 16:17" dot="a" type="warning">
  166. 自定义图标
  167. </Timeline.Item>
  168. <Timeline.Item time="2019-05-14 18:34" color="pink">
  169. 自定义节点颜色
  170. </Timeline.Item>
  171. </Timeline>, {
  172. attachTo: document.getElementById('container'),
  173. });
  174. const items = timeline.find(`.${BASE_CLASS_PREFIX}-timeline-item`);
  175. expect(
  176. items
  177. .at(0)
  178. .exists(`.${BASE_CLASS_PREFIX}-timeline-item-head-default`)
  179. ).toEqual(true);
  180. expect(
  181. items
  182. .at(1)
  183. .find(`.${BASE_CLASS_PREFIX}-timeline-item-head`)
  184. .getDOMNode()
  185. .textContent
  186. ).toEqual('a');
  187. expect(
  188. items
  189. .at(2)
  190. .find(`.${BASE_CLASS_PREFIX}-timeline-item-head-default`)
  191. ).toHaveStyle('backgroundColor', 'pink');
  192. timeline.unmount();
  193. });
  194. it('Timeline with mode',()=>{
  195. const timelineLeft = renderTl({mode:'left'});
  196. expect(
  197. timelineLeft
  198. .find(`.${BASE_CLASS_PREFIX}-timeline-left`)
  199. .length
  200. ).toEqual(1);
  201. timelineLeft.unmount();
  202. const timelineCenter = renderTl({mode:'center'});
  203. expect(
  204. timelineCenter
  205. .find(`.${BASE_CLASS_PREFIX}-timeline-center`)
  206. .length
  207. ).toEqual(1);
  208. timelineCenter.unmount();
  209. const timelineAlternate = renderTl({mode:'alternate'});
  210. expect(
  211. timelineAlternate
  212. .find(`.${BASE_CLASS_PREFIX}-timeline-alternate`)
  213. .length
  214. ).toEqual(1);
  215. timelineAlternate.unmount();
  216. const timelineRight = renderTl({mode:'right'});
  217. expect(
  218. timelineRight
  219. .find(`.${BASE_CLASS_PREFIX}-timeline-right`)
  220. .length
  221. ).toEqual(1);
  222. timelineRight.unmount();
  223. });
  224. it('Timeline with time type ReactNode',()=>{
  225. const timeline=mount(<Timeline>
  226. <Timeline.Item time={<span>2019-07-14 10:35</span>}>第一个节点内容</Timeline.Item>
  227. <Timeline.Item time="2019-06-13 16:17">第二个节点内容</Timeline.Item>
  228. </Timeline>, {
  229. attachTo: document.getElementById('container'),
  230. });
  231. const firstItem = timeline.find(`.${BASE_CLASS_PREFIX}-timeline-item .${BASE_CLASS_PREFIX}-timeline-item-content .${BASE_CLASS_PREFIX}-timeline-item-content-time`).at(0);
  232. expect(
  233. firstItem
  234. .getDOMNode()
  235. .innerHTML
  236. ).toEqual('<span>2019-07-14 10:35</span>');
  237. timeline.unmount();
  238. });
  239. });