Passed
Pull Request — master (#107)
by Mathieu
01:52
created

server/src/Application/HumanResource/Holiday/Command/CreateHolidayCommandHandler.spec.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 122
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 96
mnd 1
bc 1
fnc 0
dl 0
loc 122
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
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