time-picker.spec.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. import { createTest, destroyVM } from '../util';
  2. import TimePicker from 'packages/time-picker';
  3. import Vue from 'vue';
  4. describe('TimePicker', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('create', () => {
  10. vm = createTest(TimePicker, {
  11. placeholder: 'test',
  12. readonly: true
  13. });
  14. expect(vm.$el.querySelector('input').getAttribute('placeholder')).to.equal('test');
  15. expect(vm.$el.querySelector('input').getAttribute('readonly')).to.ok;
  16. destroyVM(vm);
  17. });
  18. it('format', () => {
  19. vm = createTest(TimePicker, {
  20. format: 'HH-mm-ss',
  21. value: new Date(2016, 9, 10, 18, 40)
  22. });
  23. expect(vm.$el.querySelector('input').value).to.equal('18-40-00');
  24. destroyVM(vm);
  25. });
  26. it('default value', done => {
  27. vm = createTest(TimePicker, {
  28. value: new Date(2016, 9, 10, 18, 40)
  29. }, true);
  30. const input = vm.$el.querySelector('input');
  31. input.blur();
  32. input.focus();
  33. input.blur();
  34. Vue.nextTick(_ => {
  35. const times = vm.picker.$el.querySelectorAll('.active');
  36. expect(times[0].textContent).to.equal('18');
  37. expect(times[1].textContent).to.equal('40');
  38. expect(times[2].textContent).to.equal('0');
  39. destroyVM(vm);
  40. done();
  41. });
  42. });
  43. it('select time', done => {
  44. vm = createTest(TimePicker, true);
  45. const input = vm.$el.querySelector('input');
  46. input.blur();
  47. input.focus();
  48. Vue.nextTick(_ => {
  49. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  50. const hoursElm = list[0];
  51. const minutesElm = list[1];
  52. const secondsElm = list[2];
  53. const hourElm = hoursElm.querySelectorAll('.el-time-spinner__item')[4];
  54. const minuteElm = minutesElm.querySelectorAll('.el-time-spinner__item')[36];
  55. const secondElm = secondsElm.querySelectorAll('.el-time-spinner__item')[20];
  56. hourElm.click();
  57. minuteElm.click();
  58. secondElm.click();
  59. Vue.nextTick(_ => {
  60. const date = vm.picker.currentDate;
  61. expect(hourElm.classList.contains('active')).to.true;
  62. expect(minuteElm.classList.contains('active')).to.true;
  63. expect(secondElm.classList.contains('active')).to.true;
  64. expect(date.getHours()).to.equal(4);
  65. expect(date.getMinutes()).to.equal(36);
  66. expect(date.getSeconds()).to.equal(20);
  67. destroyVM(vm);
  68. done();
  69. });
  70. });
  71. });
  72. it('click cancel button', done => {
  73. vm = createTest(TimePicker, true);
  74. const input = vm.$el.querySelector('input');
  75. input.blur();
  76. input.focus();
  77. Vue.nextTick(_ => {
  78. vm.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  79. Vue.nextTick(_ => {
  80. expect(vm.picker.currentDate).to.empty;
  81. done();
  82. });
  83. });
  84. });
  85. it('click confirm button', done => {
  86. vm = createTest(TimePicker, true);
  87. const input = vm.$el.querySelector('input');
  88. input.blur();
  89. input.focus();
  90. Vue.nextTick(_ => {
  91. vm.picker.$el.querySelector('.el-time-panel__btn.confirm').click();
  92. Vue.nextTick(_ => {
  93. expect(vm.picker.currentDate).to.exist;
  94. done();
  95. });
  96. });
  97. });
  98. it('set format', done => {
  99. vm = createTest(TimePicker, {
  100. pickerOptions: {
  101. format: 'HH:mm'
  102. }
  103. }, true);
  104. const input = vm.$el.querySelector('input');
  105. input.blur();
  106. input.focus();
  107. setTimeout(_ => {
  108. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  109. destroyVM(vm);
  110. done();
  111. }, 20);
  112. });
  113. it('set format to empty', done => {
  114. vm = createTest(TimePicker, {
  115. pickerOptions: {
  116. format: ''
  117. }
  118. }, true);
  119. const input = vm.$el.querySelector('input');
  120. input.blur();
  121. input.focus();
  122. setTimeout(_ => {
  123. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  124. destroyVM(vm);
  125. done();
  126. }, 20);
  127. });
  128. it('selectableRange', done => {
  129. vm = createTest(TimePicker, {
  130. pickerOptions: {
  131. selectableRange: '18:30:00 - 20:30:00'
  132. }
  133. }, true);
  134. const input = vm.$el.querySelector('input');
  135. input.blur();
  136. input.focus();
  137. setTimeout(_ => {
  138. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  139. const hoursElm = list[0];
  140. const disabledHours = [].slice
  141. .call(hoursElm.querySelectorAll('.disabled'))
  142. .map(node => Number(node.textContent));
  143. hoursElm.querySelectorAll('.disabled')[0].click();
  144. expect(disabledHours).to.not.include.members([18, 19, 20]);
  145. destroyVM(vm);
  146. done();
  147. }, 20);
  148. });
  149. });
  150. describe('TimePicker(range)', () => {
  151. let vm;
  152. beforeEach(done => {
  153. vm = createTest(TimePicker, {
  154. isRange: true,
  155. value: [new Date(2016, 9, 10, 18, 40), new Date(2016, 9, 10, 19, 40)]
  156. }, true);
  157. const input = vm.$el.querySelector('input');
  158. input.blur();
  159. input.focus();
  160. input.blur();
  161. setTimeout(done, 20);
  162. });
  163. afterEach(() => destroyVM(vm));
  164. it('create', () => {
  165. expect(vm.picker.$el.querySelectorAll('.el-time-range-picker__cell')).to.length(2);
  166. });
  167. it('default value', () => {
  168. expect(vm.picker.minTime.getTime()).to.equal(new Date(2016, 9, 10, 18, 40).getTime());
  169. expect(vm.picker.maxTime.getTime()).to.equal(new Date(2016, 9, 10, 19, 40).getTime());
  170. });
  171. it('minTime < maxTime', done => {
  172. const vm2 = createTest(TimePicker, {
  173. isRange: true,
  174. value: [new Date(2016, 9, 10, 23, 40), new Date(2016, 9, 10, 10, 40)]
  175. }, true);
  176. const input = vm2.$el.querySelector('input');
  177. input.blur();
  178. input.focus();
  179. input.blur();
  180. setTimeout(() => {
  181. expect(vm2.picker.maxTime >= vm2.picker.minTime).to.true;
  182. destroyVM(vm2);
  183. done();
  184. }, 100);
  185. });
  186. it('click cancel button', done => {
  187. vm.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  188. Vue.nextTick(_ => {
  189. expect(vm.picker.currentDate).to.empty;
  190. done();
  191. });
  192. });
  193. });