Passed
Pull Request — master (#188)
by Mathieu
02:07
created

server/src/Application/HumanResource/Leave/Command/DeleteLeaveRequestCommandHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 95
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 78
dl 0
loc 95
rs 10
c 0
b 0
f 0
wmc 2
mnd 2
bc 2
fnc 0
bpm 0
cpm 0
noi 0
1
import { mock, instance, when, verify, anything, deepEqual } from 'ts-mockito';
2
import { DeleteLeaveRequestCommandHandler } from './DeleteLeaveRequestCommandHandler';
3
import { DeleteLeaveRequestCommand } from './DeleteLeaveRequestCommand';
4
import { User } from 'src/Domain/HumanResource/User/User.entity';
5
import { LeaveRequestNotFoundException } from 'src/Domain/HumanResource/Leave/Exception/LeaveRequestNotFoundException';
6
import { CanLeaveRequestBeRemoved } from 'src/Domain/HumanResource/Leave/Specification/CanLeaveRequestBeRemoved';
7
import { LeaveRequest } from 'src/Domain/HumanResource/Leave/LeaveRequest.entity';
8
import { LeaveRequestRepository } from 'src/Infrastructure/HumanResource/Leave/Repository/LeaveRequestRepository';
9
import { LeaveRequestCantBeRemovedException } from 'src/Domain/HumanResource/Leave/Exception/LeaveRequestCantBeRemovedException';
10
11
describe('DeleteLeaveRequestCommandHandler', () => {
12
  let leaveRequestRepository: LeaveRequestRepository;
13
  let canLeaveRequestBeRemoved: CanLeaveRequestBeRemoved;
14
  let handler: DeleteLeaveRequestCommandHandler;
15
16
  const user = mock(User);
17
  const leaveRequest = mock(LeaveRequest);
18
  const command = new DeleteLeaveRequestCommand(
19
    'cfdd06eb-cd71-44b9-82c6-46110b30ce05',
20
    instance(user)
21
  );
22
23
  beforeEach(() => {
24
    leaveRequestRepository = mock(LeaveRequestRepository);
25
    canLeaveRequestBeRemoved = mock(CanLeaveRequestBeRemoved);
26
27
    handler = new DeleteLeaveRequestCommandHandler(
28
      instance(leaveRequestRepository),
29
      instance(canLeaveRequestBeRemoved),
30
    );
31
  });
32
33
  it('testLeaveRequestNotNotFound', async () => {
34
    when(
35
      leaveRequestRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
36
    ).thenResolve(null);
37
38
    try {
39
      expect(await handler.execute(command)).toBeUndefined();
40
    } catch (e) {
41
      expect(e).toBeInstanceOf(LeaveRequestNotFoundException);
42
      expect(e.message).toBe('human_resources.leaves.requests.errors.not_found');
43
      verify(
44
        leaveRequestRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
45
      ).once();
46
      verify(
47
        canLeaveRequestBeRemoved.isSatisfiedBy(anything(), anything())
48
      ).never();
49
      verify(leaveRequestRepository.remove(anything())).never();
50
    }
51
  });
52
53
  it('testLeaveRequestCantBeRemoved', async () => {
54
    when(
55
      leaveRequestRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
56
    ).thenResolve(instance(leaveRequest));
57
    when(
58
      canLeaveRequestBeRemoved.isSatisfiedBy(instance(leaveRequest), instance(user))
59
    ).thenReturn(false);
60
61
    try {
62
      expect(await handler.execute(command)).toBeUndefined();
63
    } catch (e) {
64
      expect(e).toBeInstanceOf(LeaveRequestCantBeRemovedException);
65
      expect(e.message).toBe('human_resources.leaves.requests.errors.cant_be_removed');
66
      verify(
67
        canLeaveRequestBeRemoved.isSatisfiedBy(instance(leaveRequest), instance(user))
68
      ).once();
69
      verify(
70
        leaveRequestRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
71
      ).once();
72
      verify(leaveRequestRepository.remove(anything())).never();
73
    }
74
  });
75
76
  it('testLeaveSuccessfullyDeleted', async () => {
77
    when(
78
      leaveRequestRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
79
    ).thenResolve(instance(leaveRequest));
80
    when(
81
      canLeaveRequestBeRemoved.isSatisfiedBy(instance(leaveRequest), instance(user))
82
    ).thenReturn(true);
83
    
84
    expect(await handler.execute(command)).toBeUndefined();
85
86
    verify(
87
      canLeaveRequestBeRemoved.isSatisfiedBy(instance(leaveRequest), instance(user))
88
    ).once();
89
    verify(
90
      leaveRequestRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
91
    ).once();
92
    verify(leaveRequestRepository.remove(instance(leaveRequest))).once();
93
  });
94
});
95