Passed
Pull Request — master (#98)
by Mathieu
01:27
created

server/src/Application/HumanResource/PayStub/CreatePayStubCommandHandler.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
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 {PayStubRepository} from 'src/Infrastructure/HumanResource/Repository/PayStubRepository';
3
import {CreatePayStubCommandHandler} from './CreatePayStubCommandHandler';
4
import {CreatePayStubCommand} from './CreatePayStubCommand';
5
import {User} from 'src/Domain/User/User.entity';
6
import {PayStub} from 'src/Domain/HumanResource/PayStub.entity';
7
import {UserRepository} from 'src/Infrastructure/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/User/Exception/UserNotFoundException';
11
import {IsPayStubAlreadyExist} from 'src/Domain/HumanResource/Specification/IsPayStubAlreadyExist';
12
import {PayStubAlreadyExistException} from 'src/Domain/HumanResource/Exception/PayStubAlreadyExistException';
13
14
describe('CreatePayStubCommandHandler', () => {
15
  let payStubRepository: PayStubRepository;
16
  let userRepository: UserRepository;
17
  let fileRepository: FileRepository;
18
  let isPayStubAlreadyExist: IsPayStubAlreadyExist;
19
  let handler: CreatePayStubCommandHandler;
20
21
  const user = mock(User);
22
  const file = mock(File);
23
  const payStub = mock(PayStub);
24
  const command = new CreatePayStubCommand(
25
    '2020-04-29',
26
    'a491ccc9-df7c-4fc6-8e90-db816208f689',
27
    '3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c'
28
  );
29
30
  beforeEach(() => {
31
    payStubRepository = mock(PayStubRepository);
32
    userRepository = mock(UserRepository);
33
    fileRepository = mock(FileRepository);
34
    isPayStubAlreadyExist = mock(IsPayStubAlreadyExist);
35
36
    handler = new CreatePayStubCommandHandler(
37
      instance(payStubRepository),
38
      instance(userRepository),
39
      instance(fileRepository),
40
      instance(isPayStubAlreadyExist)
41
    );
42
  });
43
44
  it('testPayStubSuccessfullyCreated', 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
      isPayStubAlreadyExist.isSatisfiedBy(
53
        instance(user),
54
        deepEqual(new Date('2020-04-29'))
55
      )
56
    ).thenResolve(false);
57
    when(payStub.getId()).thenReturn('7c35d37c-b0e3-480d-bf6c-3dc1e094886f');
58
    when(
59
      payStubRepository.save(
60
        deepEqual(new PayStub('2020-04-29', instance(file), instance(user)))
61
      )
62
    ).thenResolve(instance(payStub));
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
      isPayStubAlreadyExist.isSatisfiedBy(
77
        instance(user),
78
        deepEqual(new Date('2020-04-29'))
79
      )
80
    ).once();
81
    verify(
82
      payStubRepository.save(
83
        deepEqual(new PayStub('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(payStubRepository.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(payStubRepository.save(anything())).never();
124
    }
125
  });
126
127
  it('testPayStubAlreadyExist', 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
      isPayStubAlreadyExist.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(PayStubAlreadyExistException);
145
      expect(e.message).toBe('accounting.errors.pay_stub_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
        isPayStubAlreadyExist.isSatisfiedBy(
155
          instance(user),
156
          deepEqual(new Date('2020-04-29'))
157
        )
158
      ).once();
159
      verify(payStubRepository.save(anything())).never();
160
    }
161
  });
162
});
163