Passed
Pull Request — master (#104)
by Mathieu
01:36
created

server/src/Application/HumanResource/PaySlip/Command/CreatePaySlipCommandHandler.spec.ts   A

Complexity

Total Complexity 3
Complexity/F 0

Size

Lines of Code 163
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 133
mnd 3
bc 3
fnc 0
dl 0
loc 163
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
rs 10
1
import {mock, instance, when, verify, deepEqual, anything} from 'ts-mockito';
2
import {PaySlipRepository} from 'src/Infrastructure/HumanResource/PaySlip/Repository/PaySlipRepository';
3
import {CreatePaySlipCommandHandler} from './CreatePaySlipCommandHandler';
4
import {CreatePaySlipCommand} from './CreatePaySlipCommand';
5
import {User} from 'src/Domain/HumanResource/User/User.entity';
6
import {PaySlip} from 'src/Domain/HumanResource/PaySlip/PaySlip.entity';
7
import {UserRepository} from 'src/Infrastructure/HumanResource/User/Repository/UserRepository';
8
import {FileRepository} from 'src/Infrastructure/File/Repository/FileRepository';
9
import {File} from 'src/Domain/File/File.entity';
10
import {UserNotFoundException} from 'src/Domain/HumanResource/User/Exception/UserNotFoundException';
11
import {IsPaySlipAlreadyExist} from 'src/Domain/HumanResource/PaySlip/Specification/IsPaySlipAlreadyExist';
12
import {PaySlipAlreadyExistException} from 'src/Domain/HumanResource/PaySlip/Exception/PaySlipAlreadyExistException';
13
14
describe('CreatePaySlipCommandHandler', () => {
15
  let paySlipRepository: PaySlipRepository;
16
  let userRepository: UserRepository;
17
  let fileRepository: FileRepository;
18
  let isPaySlipAlreadyExist: IsPaySlipAlreadyExist;
19
  let handler: CreatePaySlipCommandHandler;
20
21
  const user = mock(User);
22
  const file = mock(File);
23
  const paySlip = mock(PaySlip);
24
  const command = new CreatePaySlipCommand(
25
    '2020-04-29',
26
    'a491ccc9-df7c-4fc6-8e90-db816208f689',
27
    '3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c'
28
  );
29
30
  beforeEach(() => {
31
    paySlipRepository = mock(PaySlipRepository);
32
    userRepository = mock(UserRepository);
33
    fileRepository = mock(FileRepository);
34
    isPaySlipAlreadyExist = mock(IsPaySlipAlreadyExist);
35
36
    handler = new CreatePaySlipCommandHandler(
37
      instance(paySlipRepository),
38
      instance(userRepository),
39
      instance(fileRepository),
40
      instance(isPaySlipAlreadyExist)
41
    );
42
  });
43
44
  it('testPaySlipSuccessfullyCreated', async () => {
45
    when(
46
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
47
    ).thenResolve(instance(user));
48
    when(
49
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
50
    ).thenResolve(instance(file));
51
    when(
52
      isPaySlipAlreadyExist.isSatisfiedBy(
53
        instance(user),
54
        deepEqual(new Date('2020-04-29'))
55
      )
56
    ).thenResolve(false);
57
    when(paySlip.getId()).thenReturn('7c35d37c-b0e3-480d-bf6c-3dc1e094886f');
58
    when(
59
      paySlipRepository.save(
60
        deepEqual(new PaySlip('2020-04-29', instance(file), instance(user)))
61
      )
62
    ).thenResolve(instance(paySlip));
63
64
    expect(await handler.execute(command)).toBe(
65
      '7c35d37c-b0e3-480d-bf6c-3dc1e094886f'
66
    );
67
68
    verify(
69
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
70
    ).once();
71
    verify(
72
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
73
    ).once();
74
    verify(fileRepository.remove(anything())).never();
75
    verify(
76
      isPaySlipAlreadyExist.isSatisfiedBy(
77
        instance(user),
78
        deepEqual(new Date('2020-04-29'))
79
      )
80
    ).once();
81
    verify(
82
      paySlipRepository.save(
83
        deepEqual(new PaySlip('2020-04-29', instance(file), instance(user)))
84
      )
85
    ).once();
86
  });
87
88
  it('testUserNotFound', async () => {
89
    when(
90
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
91
    ).thenResolve(null);
92
93
    try {
94
      await handler.execute(command);
95
    } catch (e) {
96
      expect(e).toBeInstanceOf(UserNotFoundException);
97
      expect(e.message).toBe('user.errors.not_found');
98
      verify(
99
        userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
100
      ).once();
101
      verify(fileRepository.findOneById(anything())).never();
102
      verify(paySlipRepository.save(anything())).never();
103
    }
104
  });
105
106
  it('testFileNotFound', async () => {
107
    when(
108
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
109
    ).thenResolve(instance(user));
110
    when(
111
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
112
    ).thenResolve(null);
113
114
    try {
115
      await handler.execute(command);
116
    } catch (e) {
117
      verify(
118
        userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
119
      ).once();
120
      verify(
121
        fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
122
      ).once();
123
      verify(paySlipRepository.save(anything())).never();
124
    }
125
  });
126
127
  it('testPaySlipAlreadyExist', async () => {
128
    when(
129
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
130
    ).thenResolve(instance(user));
131
    when(
132
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
133
    ).thenResolve(instance(file));
134
    when(
135
      isPaySlipAlreadyExist.isSatisfiedBy(
136
        instance(user),
137
        deepEqual(new Date('2020-04-29'))
138
      )
139
    ).thenResolve(true);
140
141
    try {
142
      await handler.execute(command);
143
    } catch (e) {
144
      expect(e).toBeInstanceOf(PaySlipAlreadyExistException);
145
      expect(e.message).toBe('accounting.errors.pay_slip_already_exist');
146
      verify(
147
        userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
148
      ).once();
149
      verify(
150
        fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
151
      ).once();
152
      verify(fileRepository.remove(instance(file))).once();
153
      verify(
154
        isPaySlipAlreadyExist.isSatisfiedBy(
155
          instance(user),
156
          deepEqual(new Date('2020-04-29'))
157
        )
158
      ).once();
159
      verify(paySlipRepository.save(anything())).never();
160
    }
161
  });
162
});
163