Passed
Pull Request — master (#109)
by Mathieu
01:37
created

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

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 111
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 94
mnd 2
bc 2
fnc 0
dl 0
loc 111
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 {RefuseHolidayCommandHandler} from './RefuseHolidayCommandHandler';
3
import {HolidayRepository} from 'src/Infrastructure/HumanResource/Holiday/Repository/HolidayRepository';
4
import {RefuseHolidayCommand} from './RefuseHolidayCommand';
5
import {User} from 'src/Domain/HumanResource/User/User.entity';
6
import {
7
  HolidayLeaveType,
8
  Holiday
9
} from 'src/Domain/HumanResource/Holiday/Holiday.entity';
10
import {HolidayAlreadyExistForThisPeriodException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayAlreadyExistForThisPeriodException';
11
import {DateUtilsAdapter} from 'src/Infrastructure/Adapter/DateUtilsAdapter';
12
import {CanHolidayBeRefused} from 'src/Domain/HumanResource/Holiday/Specification/CanHolidayBeRefused';
13
import {HolidayNotFoundException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayNotFoundException';
14
import {HolidayCantBeRefusedException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayCantBeRefusedException';
15
16
describe('RefuseHolidayCommandHandler', () => {
17
  let holidayRepository: HolidayRepository;
18
  let dateUtilsAdapter: DateUtilsAdapter;
19
  let canHolidayBeRefused: CanHolidayBeRefused;
20
  let handler: RefuseHolidayCommandHandler;
21
22
  const user = mock(User);
23
  const holiday = mock(Holiday);
24
  const command = new RefuseHolidayCommand(
25
    instance(user),
26
    'cfdd06eb-cd71-44b9-82c6-46110b30ce05'
27
  );
28
29
  beforeEach(() => {
30
    holidayRepository = mock(HolidayRepository);
31
    dateUtilsAdapter = mock(DateUtilsAdapter);
32
    canHolidayBeRefused = mock(CanHolidayBeRefused);
33
34
    handler = new RefuseHolidayCommandHandler(
35
      instance(holidayRepository),
36
      instance(dateUtilsAdapter),
37
      instance(canHolidayBeRefused)
38
    );
39
  });
40
41
  it('testHolidayNotNotFound', async () => {
42
    when(
43
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
44
    ).thenResolve(null);
45
46
    try {
47
      await handler.execute(command);
48
    } catch (e) {
49
      expect(e).toBeInstanceOf(HolidayNotFoundException);
50
      expect(e.message).toBe('human_resource.errors.holiday_not_found');
51
      verify(
52
        holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
53
      ).once();
54
      verify(canHolidayBeRefused.isSatisfiedBy(anything(), anything())).never();
55
      verify(holiday.refuse(anything(), anything())).never();
56
      verify(holidayRepository.save(anything())).never();
57
    }
58
  });
59
60
  it('testHolidayCantBeRefused', async () => {
61
    when(
62
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
63
    ).thenResolve(instance(holiday));
64
    when(
65
      canHolidayBeRefused.isSatisfiedBy(instance(holiday), instance(user))
66
    ).thenReturn(false);
67
68
    try {
69
      await handler.execute(command);
70
    } catch (e) {
71
      expect(e).toBeInstanceOf(HolidayCantBeRefusedException);
72
      expect(e.message).toBe('human_resource.errors.holiday_cant_be_refused');
73
      verify(
74
        canHolidayBeRefused.isSatisfiedBy(instance(holiday), instance(user))
75
      ).once();
76
      verify(
77
        holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
78
      ).once();
79
      verify(holiday.refuse(anything(), anything())).never();
80
      verify(holidayRepository.save(anything())).never();
81
    }
82
  });
83
84
  it('testHolidaySuccessfullyRefused', async () => {
85
    const date = new Date('2020-09-10T00:00:00.000Z');
86
    when(
87
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
88
    ).thenResolve(instance(holiday));
89
    when(holiday.getId()).thenReturn('cfdd06eb-cd71-44b9-82c6-46110b30ce05');
90
    when(
91
      canHolidayBeRefused.isSatisfiedBy(instance(holiday), instance(user))
92
    ).thenReturn(true);
93
    when(dateUtilsAdapter.getCurrentDate()).thenReturn(date);
94
95
    expect(await handler.execute(command)).toBe(
96
      'cfdd06eb-cd71-44b9-82c6-46110b30ce05'
97
    );
98
99
    verify(
100
      canHolidayBeRefused.isSatisfiedBy(instance(holiday), instance(user))
101
    ).once();
102
    verify(
103
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
104
    ).once();
105
    verify(
106
      holiday.refuse(instance(user), '2020-09-10T00:00:00.000Z')
107
    ).calledBefore(holidayRepository.save(instance(holiday)));
108
    verify(holidayRepository.save(instance(holiday))).once();
109
  });
110
});
111