-
-
Notifications
You must be signed in to change notification settings - Fork 404
/
Copy pathtime-panel.test.js
113 lines (104 loc) · 3.48 KB
/
time-panel.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { mount } from '@vue/test-utils';
import TimePanel from '../src/time/time-panel';
import ListColumns from '../src/time/list-columns.vue';
let wrapper;
afterEach(() => {
wrapper.destroy();
});
describe('TimePanel', () => {
it('render: correct classes of the columns', () => {
wrapper = mount(TimePanel, {
propsData: {
value: new Date(2019, 9, 4, 12, 30, 30),
disabledTime: date => date.getHours() < 10,
},
});
expect(wrapper.element).toMatchSnapshot();
});
it('render: correct columns by format', () => {
wrapper = mount(TimePanel, {
propsData: {
value: new Date(2019, 9, 4),
format: 'hh:mm a',
minuteStep: 30,
hourOptions: Array.from({ length: 10 }).map((_, i) => i + 8),
},
});
expect(wrapper.element).toMatchSnapshot();
});
it('render: correct classes of the fixed time list', () => {
wrapper = mount(TimePanel, {
propsData: {
value: new Date(2019, 10, 9, 12, 30),
disabledTime: date => date.getHours() < 10,
timePickerOptions: {
start: '08:30',
step: '00:30',
end: '18:30',
},
format: 'HH:mm',
},
});
expect(wrapper.element).toMatchSnapshot();
});
it('render: correct 12hours in the fixed time list', () => {
wrapper = mount(TimePanel, {
propsData: {
value: new Date(2019, 10, 9, 12, 30),
timePickerOptions: {
start: '08:30',
step: '00:30',
end: '18:30',
},
format: 'hh:mm A',
},
});
expect(wrapper.element).toMatchSnapshot();
});
it('feat: emit select event when click', async () => {
wrapper = mount(TimePanel, {
propsData: {
format: 'hh:mm:ss a',
defaultValue: new Date(2019, 9, 10, 2),
},
});
const hour = wrapper.find('[data-type=hour] li:nth-child(2)');
await hour.trigger('click');
expect(wrapper.emitted().select[0][0]).toEqual(new Date(2019, 9, 10, 1));
await wrapper.setProps({ value: new Date(2019, 9, 10, 1) });
const minute = wrapper.find('[data-type=minute] li:nth-child(2)');
await minute.trigger('click');
expect(wrapper.emitted().select[1][0]).toEqual(new Date(2019, 9, 10, 1, 1));
await wrapper.setProps({ value: new Date(2019, 9, 10, 1, 1) });
const second = wrapper.find('[data-type=second] li:nth-child(2)');
await second.trigger('click');
expect(wrapper.emitted().select[2][0]).toEqual(new Date(2019, 9, 10, 1, 1, 1));
await wrapper.setProps({ value: new Date(2019, 9, 10, 1, 1, 1) });
const pm = wrapper.find('[data-type=ampm] li:nth-child(2)');
await pm.trigger('click');
expect(wrapper.emitted().select[3][0]).toEqual(new Date(2019, 9, 10, 13, 1, 1));
});
it('feat: disabledTime should not emit event', () => {
wrapper = mount(TimePanel, {
propsData: {
value: new Date(2019, 9, 4, 12, 30, 30),
disabledTime: date => date.getHours() < 10,
},
});
const hour = wrapper.find('[data-type=hour] li:nth-child(2)');
hour.trigger('click');
expect(wrapper.emitted().select).toBeUndefined();
});
it('fix: when the custom format pass into time panel', () => {
wrapper = mount(TimePanel, {
propsData: {
value: new Date(),
format: {},
},
});
const cols = wrapper.findComponent(ListColumns);
expect(cols.props('showHour')).toBe(true);
expect(cols.props('showMinute')).toBe(true);
expect(cols.props('showSecond')).toBe(true);
});
});