Passed
Pull Request — master (#256)
by Mathieu
02:22
created

server/src/Application/HumanResource/Savings/Command/AddUserSavingsRecordCommandHandler.spec.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 76
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 60
mnd 1
bc 1
fnc 0
dl 0
loc 76
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 { User } from 'src/Domain/HumanResource/User/User.entity';
3
import { AddUserSavingsRecordCommandHandler } from './AddUserSavingsRecordCommandHandler';
4
import { AddUserSavingsRecordCommand } from './AddUserSavingsRecordCommand';
5
import { SavingsRecordType, UserSavingsRecord } from 'src/Domain/HumanResource/Savings/UserSavingsRecord.entity';
6
import { UserRepository } from 'src/Infrastructure/HumanResource/User/Repository/UserRepository';
7
import { UserSavingsRecordRepository } from 'src/Infrastructure/HumanResource/Savings/Repository/UserSavingsRecordRepository';
8
import { UserNotFoundException } from 'src/Domain/HumanResource/User/Exception/UserNotFoundException';
9
10
describe('AddUserSavingsRecordCommandHandler', () => {
11
  let userRepository: UserRepository;
12
  let userSavingsRecordRepository: UserSavingsRecordRepository;
13
  let handler: AddUserSavingsRecordCommandHandler;
14
15
  const command = new AddUserSavingsRecordCommand(
16
    SavingsRecordType.INPUT,
17
    5000,
18
    'a58c5253-c097-4f44-b8c1-ccd45aab36e3',
19
  );
20
21
  beforeEach(() => {
22
    userRepository = mock(UserRepository);
23
    userSavingsRecordRepository = mock(UserSavingsRecordRepository);
24
25
    handler = new AddUserSavingsRecordCommandHandler(
26
      instance(userRepository),
27
      instance(userSavingsRecordRepository),
28
    );
29
  });
30
31
  it('testUserNotFound', async () => {
32
    when(
33
      userRepository.findOneById('a58c5253-c097-4f44-b8c1-ccd45aab36e3')
34
    ).thenResolve(null);
35
36
    try {
37
      expect(await handler.execute(command)).toBeUndefined();
38
    } catch (e) {
39
      expect(e).toBeInstanceOf(UserNotFoundException);
40
      expect(e.message).toBe(
41
        'human_resources.users.errors.not_found'
42
      );
43
      verify(
44
        userRepository.findOneById('a58c5253-c097-4f44-b8c1-ccd45aab36e3')
45
      ).once();
46
      verify(userSavingsRecordRepository.save(anything())).never();
47
    }
48
  });
49
50
  it('testAddSuccessfully', async () => {
51
    const userSavingsRecord = mock(UserSavingsRecord);
52
    const user = mock(User);
53
54
    when(userSavingsRecord.getId()).thenReturn('5c97487c-7863-46a2-967d-79eb8c94ecb5');
55
    when(
56
      userRepository.findOneById('a58c5253-c097-4f44-b8c1-ccd45aab36e3')
57
    ).thenResolve(instance(user));
58
    when(
59
      userSavingsRecordRepository.save(
60
        deepEqual(new UserSavingsRecord(500000, SavingsRecordType.INPUT, instance(user)))
61
      )
62
    ).thenResolve(instance(userSavingsRecord));
63
64
    expect(await handler.execute(command)).toBe('5c97487c-7863-46a2-967d-79eb8c94ecb5');
65
66
    verify(
67
      userRepository.findOneById('a58c5253-c097-4f44-b8c1-ccd45aab36e3')
68
    ).once();
69
    verify(
70
      userSavingsRecordRepository.save(
71
        deepEqual(new UserSavingsRecord(500000, SavingsRecordType.INPUT, instance(user)))
72
      )
73
    ).once();
74
  });
75
});
76