1
|
|
|
import {mock, instance, when, verify, deepEqual, anything} from 'ts-mockito'; |
2
|
|
|
import {DoesHolidayExistForPeriod} from 'src/Domain/HumanResource/Holiday/Specification/DoesHolidayExistForPeriod'; |
3
|
|
|
import {CreateHolidayCommandHandler} from './CreateHolidayCommandHandler'; |
4
|
|
|
import {HolidayRepository} from 'src/Infrastructure/HumanResource/Holiday/Repository/HolidayRepository'; |
5
|
|
|
import {CreateHolidayCommand} from './CreateHolidayCommand'; |
6
|
|
|
import {User} from 'src/Domain/HumanResource/User/User.entity'; |
7
|
|
|
import { |
8
|
|
|
HolidayLeaveType, |
9
|
|
|
Holiday |
10
|
|
|
} from 'src/Domain/HumanResource/Holiday/Holiday.entity'; |
11
|
|
|
import {HolidayAlreadyExistForThisPeriodException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayAlreadyExistForThisPeriodException'; |
12
|
|
|
|
13
|
|
|
describe('CreateHolidayCommandHandler', () => { |
14
|
|
|
let holidayRepository: HolidayRepository; |
15
|
|
|
let doesHolidayExistForPeriod: DoesHolidayExistForPeriod; |
16
|
|
|
let handler: CreateHolidayCommandHandler; |
17
|
|
|
|
18
|
|
|
const user = mock(User); |
19
|
|
|
const command = new CreateHolidayCommand( |
20
|
|
|
instance(user), |
21
|
|
|
HolidayLeaveType.PAID, |
22
|
|
|
'2019-01-04', |
23
|
|
|
true, |
24
|
|
|
'2019-01-06', |
25
|
|
|
true, |
26
|
|
|
'H&M wedding' |
27
|
|
|
); |
28
|
|
|
|
29
|
|
|
beforeEach(() => { |
30
|
|
|
holidayRepository = mock(HolidayRepository); |
31
|
|
|
doesHolidayExistForPeriod = mock(DoesHolidayExistForPeriod); |
32
|
|
|
|
33
|
|
|
handler = new CreateHolidayCommandHandler( |
34
|
|
|
instance(holidayRepository), |
35
|
|
|
instance(doesHolidayExistForPeriod) |
36
|
|
|
); |
37
|
|
|
}); |
38
|
|
|
|
39
|
|
|
it('testHolidayAlreadyExist', async () => { |
40
|
|
|
when( |
41
|
|
|
doesHolidayExistForPeriod.isSatisfiedBy( |
42
|
|
|
instance(user), |
43
|
|
|
'2019-01-04', |
44
|
|
|
'2019-01-06' |
45
|
|
|
) |
46
|
|
|
).thenResolve(true); |
47
|
|
|
|
48
|
|
|
try { |
49
|
|
|
await handler.execute(command); |
50
|
|
|
} catch (e) { |
51
|
|
|
expect(e).toBeInstanceOf(HolidayAlreadyExistForThisPeriodException); |
52
|
|
|
expect(e.message).toBe( |
53
|
|
|
'human_resource.errors.holiday_already_exist_for_this_period' |
54
|
|
|
); |
55
|
|
|
verify( |
56
|
|
|
doesHolidayExistForPeriod.isSatisfiedBy( |
57
|
|
|
instance(user), |
58
|
|
|
'2019-01-04', |
59
|
|
|
'2019-01-06' |
60
|
|
|
) |
61
|
|
|
).once(); |
62
|
|
|
verify(holidayRepository.save(anything())).never(); |
63
|
|
|
} |
64
|
|
|
}); |
65
|
|
|
|
66
|
|
|
it('testCreateHolidaysSuccessfully', async () => { |
67
|
|
|
const holiday = mock(Holiday); |
68
|
|
|
when(holiday.getId()).thenReturn('cfdd06eb-cd71-44b9-82c6-46110b30ce05'); |
69
|
|
|
|
70
|
|
|
when( |
71
|
|
|
doesHolidayExistForPeriod.isSatisfiedBy( |
72
|
|
|
instance(user), |
73
|
|
|
'2019-01-04', |
74
|
|
|
'2019-01-06' |
75
|
|
|
) |
76
|
|
|
).thenResolve(false); |
77
|
|
|
|
78
|
|
|
when( |
79
|
|
|
holidayRepository.save( |
80
|
|
|
deepEqual( |
81
|
|
|
new Holiday( |
82
|
|
|
instance(user), |
83
|
|
|
HolidayLeaveType.PAID, |
84
|
|
|
'2019-01-04', |
85
|
|
|
true, |
86
|
|
|
'2019-01-06', |
87
|
|
|
true, |
88
|
|
|
'H&M wedding' |
89
|
|
|
) |
90
|
|
|
) |
91
|
|
|
) |
92
|
|
|
).thenResolve(instance(holiday)); |
93
|
|
|
|
94
|
|
|
expect(await handler.execute(command)).toBe( |
95
|
|
|
'cfdd06eb-cd71-44b9-82c6-46110b30ce05' |
96
|
|
|
); |
97
|
|
|
|
98
|
|
|
verify( |
99
|
|
|
doesHolidayExistForPeriod.isSatisfiedBy( |
100
|
|
|
instance(user), |
101
|
|
|
'2019-01-04', |
102
|
|
|
'2019-01-06' |
103
|
|
|
) |
104
|
|
|
).once(); |
105
|
|
|
verify( |
106
|
|
|
holidayRepository.save( |
107
|
|
|
deepEqual( |
108
|
|
|
new Holiday( |
109
|
|
|
instance(user), |
110
|
|
|
HolidayLeaveType.PAID, |
111
|
|
|
'2019-01-04', |
112
|
|
|
true, |
113
|
|
|
'2019-01-06', |
114
|
|
|
true, |
115
|
|
|
'H&M wedding' |
116
|
|
|
) |
117
|
|
|
) |
118
|
|
|
) |
119
|
|
|
).once(); |
120
|
|
|
}); |
121
|
|
|
}); |
122
|
|
|
|