calendar.test.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import Calendar from '../index'
  2. import { mount, shallow } from 'enzyme';
  3. import WeekCalendar from '../weekCalendar'
  4. import DayCalendar from '../dayCalendar';
  5. import MonthCalendar from '../monthCalendar';
  6. import RangeCalendar from '../rangeCalendar';
  7. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  8. describe('Calendar', () => {
  9. it('prop mode', () => {
  10. let calendar = mount(<Calendar></Calendar>)
  11. expect(calendar.find(WeekCalendar)).toHaveLength(1)
  12. calendar = mount(<Calendar mode='day'></Calendar>)
  13. expect(calendar.find(DayCalendar)).toHaveLength(1)
  14. calendar = mount(<Calendar mode='month'></Calendar>)
  15. expect(calendar.find(MonthCalendar)).toHaveLength(1)
  16. calendar = mount(<Calendar mode='range' range={[new Date(2020, 8, 26), new Date(2020, 8, 31)]}></Calendar>)
  17. expect(calendar.find(RangeCalendar)).toHaveLength(1)
  18. })
  19. it('prop showCurrTime', () => {
  20. let wrapper = mount(<Calendar showCurrTime={false} mode='week' />)
  21. expect(wrapper.find('.semi-calendar-grid-curr-line')).toHaveLength(0)
  22. wrapper = mount(<Calendar showCurrTime={false} mode='day' />)
  23. expect(wrapper.find('.semi-calendar-grid-curr-line')).toHaveLength(0)
  24. wrapper = mount(<Calendar showCurrTime mode='week' />)
  25. expect(wrapper.find('.semi-calendar-grid-curr-line')).toHaveLength(1)
  26. wrapper = mount(<Calendar showCurrTime mode='day' />)
  27. expect(wrapper.find('.semi-calendar-grid-curr-line')).toHaveLength(1)
  28. })
  29. it('prop onClick', () => {
  30. const clickHandler = jest.fn();
  31. let weekWrapper = mount(<Calendar onClick={clickHandler} mode='week' />)
  32. expect(clickHandler).toHaveBeenCalledTimes(0)
  33. weekWrapper.find('.semi-calendar-grid-skeleton-row-line').at(0).simulate('click')
  34. expect(clickHandler).toHaveBeenCalledTimes(1)
  35. const clickHandler2 = jest.fn();
  36. let monthWrapper = mount(<Calendar onClick={clickHandler2} mode='month' />)
  37. expect(clickHandler2).toHaveBeenCalledTimes(0)
  38. monthWrapper.find('.semi-calendar-month-skeleton li').at(0).simulate('click')
  39. expect(clickHandler2).toHaveBeenCalledTimes(1)
  40. })
  41. it('test dateGridRender', ()=>{
  42. const importantDateStyle = {
  43. position: 'absolute',
  44. left: '0',
  45. right: '0',
  46. top: '0',
  47. bottom: '0',
  48. backgroundColor: 'red',
  49. };
  50. const displayValue = new Date(2019, 6, 23, 8, 32, 0);
  51. const importDates = [new Date(2019, 6, 2)];
  52. const dateRender = dateString => {
  53. if (importDates.filter(date => date.toString() === dateString).length) {
  54. return <div style={importantDateStyle}>hello</div>;
  55. }
  56. return null;
  57. };
  58. let calendar = mount(<Calendar displayValue={displayValue} dateGridRender={dateRender} mode='month'></Calendar>)
  59. // test the date 2019, 7, 2 whether renders an extra div
  60. expect(calendar.find(`.${BASE_CLASS_PREFIX}-calendar-month-same`).at(1).find('div').text()).toBe('hello')
  61. })
  62. it('test event render',()=>{
  63. const allDayStyle = {
  64. borderRadius: '3px',
  65. boxSizing: 'border-box',
  66. border: 'var(--color-bg-1) 1px solid',
  67. padding: '2px 4px',
  68. backgroundColor: 'var(--color-primary-light-active)',
  69. height: '100%',
  70. overflow: 'hidden',
  71. };
  72. const events = [
  73. {
  74. key: '0',
  75. start: new Date(2019, 5, 25, 14, 45, 0),
  76. children: <div className="eventDay" style={allDayStyle}>6月25日 14:45</div>,
  77. },
  78. {
  79. key: '1',
  80. start: new Date(2019, 6, 18, 10, 0, 0),
  81. children: <div className="eventDay" style={allDayStyle}>7月18日 10:00</div>,
  82. },
  83. {
  84. key: '2',
  85. start: new Date(2019, 6, 19, 20, 0, 0),
  86. children: <div className="eventDay" style={allDayStyle}>7月19日 20:00</div>,
  87. },
  88. {
  89. key: '3',
  90. start: new Date(2019, 6, 21, 6, 0, 0),
  91. children: <div className="eventDay" style={allDayStyle}>7月21日 6:00</div>,
  92. },
  93. {
  94. key: '4',
  95. allDay: true,
  96. start: new Date(2019, 6, 22, 8, 0, 0),
  97. children: <div className="eventDay" style={allDayStyle}>7月22日 全天</div>,
  98. },
  99. {
  100. key: '5',
  101. start: new Date(2019, 6, 23, 9, 0, 0),
  102. allDay: true,
  103. children: <div className="eventDay" >7月23日 全天</div>,
  104. },
  105. {
  106. key: '6',
  107. start: new Date(2019, 6, 24, 8, 32, 0),
  108. children: <div className="eventDay" style={allDayStyle}>7月24日 8:32</div>,
  109. },
  110. {
  111. key: '7',
  112. start: new Date(2019, 6, 25, 8, 32, 0),
  113. end: new Date(2019, 6, 26, 8, 32, 0),
  114. children: <div className="eventDay" style={allDayStyle}>7月25日 8:32 - 7月26日 8:32</div>,
  115. }
  116. ];
  117. let monthCalendar = mount(<Calendar
  118. height={400}
  119. mode={'month'}
  120. displayValue={new Date(2019, 6, 23, 8, 32, 0)}
  121. events={events}
  122. ></Calendar>)
  123. const eventInJuly = events.filter(event=>{
  124. return event.start.getMonth() === 6
  125. })
  126. // test whether july's event rendered
  127. expect(monthCalendar.find(`.eventDay`).length).toBe(eventInJuly.length)
  128. let dailyCalendar = mount(<Calendar
  129. height={400}
  130. mode={'day'}
  131. displayValue={new Date(2019, 6, 23)}
  132. events={events}
  133. ></Calendar>)
  134. const eventOnJuly23 = events.filter(event=>{
  135. return event.start.getMonth() === 6 && event.start.getDate() === 23
  136. })
  137. // test whether 07/23's event rendered
  138. expect(dailyCalendar.find(`.eventDay`).length).toBe(eventOnJuly23.length)
  139. })
  140. it('test weekStartsOn', () => {
  141. const displayValue = new Date(2022, 7, 1, 8, 32, 0);
  142. let calendar = mount(<Calendar
  143. height={400}
  144. mode={'month'}
  145. weekStartsOn={3}
  146. displayValue={displayValue}
  147. ></Calendar>);
  148. let firstHead = calendar.find('.semi-calendar-month-header li').at(0).text();
  149. expect(firstHead).toEqual('周三');
  150. let defaultCalendar = mount(<Calendar
  151. height={400}
  152. mode={'month'}
  153. displayValue={displayValue}
  154. ></Calendar>);
  155. let defaultFirstHead = defaultCalendar.find('.semi-calendar-month-header li').at(0).text();
  156. expect(defaultFirstHead).toEqual('周日');
  157. });
  158. })