Completed
Push — master ( 7858c3...314b6e )
by Mathieu
13s queued 11s
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 92
mnd 2
bc 2
fnc 0
dl 0
loc 111
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
rs 10
1
import {mock, instance, when, verify, 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 {Holiday} from 'src/Domain/HumanResource/Holiday/Holiday.entity';
7
import {DateUtilsAdapter} from 'src/Infrastructure/Adapter/DateUtilsAdapter';
8
import {HolidayNotFoundException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayNotFoundException';
9
import {HolidayCantBeModeratedException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayCantBeModeratedException';
10
import {CanHolidayBeModerated} from 'src/Domain/HumanResource/Holiday/Specification/CanHolidayBeModerated';
11
12
describe('RefuseHolidayCommandHandler', () => {
13
  let holidayRepository: HolidayRepository;
14
  let dateUtilsAdapter: DateUtilsAdapter;
15
  let canHolidayBeModerated: CanHolidayBeModerated;
16
  let handler: RefuseHolidayCommandHandler;
17
18
  const user = mock(User);
19
  const holiday = mock(Holiday);
20
  const command = new RefuseHolidayCommand(
21
    instance(user),
22
    'cfdd06eb-cd71-44b9-82c6-46110b30ce05',
23
    'Bad period'
24
  );
25
26
  beforeEach(() => {
27
    holidayRepository = mock(HolidayRepository);
28
    dateUtilsAdapter = mock(DateUtilsAdapter);
29
    canHolidayBeModerated = mock(CanHolidayBeModerated);
30
31
    handler = new RefuseHolidayCommandHandler(
32
      instance(holidayRepository),
33
      instance(dateUtilsAdapter),
34
      instance(canHolidayBeModerated)
35
    );
36
  });
37
38
  it('testHolidayNotNotFound', async () => {
39
    when(
40
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
41
    ).thenResolve(null);
42
43
    try {
44
      await handler.execute(command);
45
    } catch (e) {
46
      expect(e).toBeInstanceOf(HolidayNotFoundException);
47
      expect(e.message).toBe('human_resource.errors.holiday_not_found');
48
      verify(
49
        holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
50
      ).once();
51
      verify(
52
        canHolidayBeModerated.isSatisfiedBy(anything(), anything())
53
      ).never();
54
      verify(holiday.refuse(anything(), anything(), anything())).never();
55
      verify(holidayRepository.save(anything())).never();
56
    }
57
  });
58
59
  it('testHolidayCantBeRefused', async () => {
60
    when(
61
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
62
    ).thenResolve(instance(holiday));
63
    when(
64
      canHolidayBeModerated.isSatisfiedBy(instance(holiday), instance(user))
65
    ).thenReturn(false);
66
67
    try {
68
      await handler.execute(command);
69
    } catch (e) {
70
      expect(e).toBeInstanceOf(HolidayCantBeModeratedException);
71
      expect(e.message).toBe('human_resource.errors.holiday_cant_be_moderated');
72
      verify(
73
        canHolidayBeModerated.isSatisfiedBy(instance(holiday), instance(user))
74
      ).once();
75
      verify(
76
        holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
77
      ).once();
78
      verify(holiday.refuse(anything(), anything(), anything())).never();
79
      verify(holidayRepository.save(anything())).never();
80
    }
81
  });
82
83
  it('testHolidaySuccessfullyRefused', async () => {
84
    when(
85
      holidayRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
86
    ).thenResolve(instance(holiday));
87
    when(holiday.getId()).thenReturn('cfdd06eb-cd71-44b9-82c6-46110b30ce05');
88
    when(
89
      canHolidayBeModerated.isSatisfiedBy(instance(holiday), instance(user))
90
    ).thenReturn(true);
91
    when(dateUtilsAdapter.getCurrentDateToISOString()).thenReturn(
92
      '2020-09-10T00:00:00.000Z'
93
    );
94
95
    expect(await handler.execute(command)).toBe(
96
      'cfdd06eb-cd71-44b9-82c6-46110b30ce05'
97
    );
98
99
    verify(
100
      canHolidayBeModerated.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', 'Bad period')
107
    ).calledBefore(holidayRepository.save(instance(holiday)));
108
    verify(holidayRepository.save(instance(holiday))).once();
109
  });
110
});
111