Passed
Pull Request — master (#87)
by Mathieu
01:26
created

server/src/Application/Accounting/Command/PayStub/CreatePayStubCommandHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 109
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 89
mnd 2
bc 2
fnc 0
dl 0
loc 109
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/Accounting/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/Accounting/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
12
describe('CreatePayStubCommandHandler', () => {
13
  let payStubRepository: PayStubRepository;
14
  let userRepository: UserRepository;
15
  let fileRepository: FileRepository;
16
  let handler: CreatePayStubCommandHandler;
17
18
  const user = mock(User);
19
  const file = mock(File);
20
  const payStub = mock(PayStub);
21
  const command = new CreatePayStubCommand(
22
    '2020-04-29',
23
    'a491ccc9-df7c-4fc6-8e90-db816208f689',
24
    '3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c'
25
  );
26
27
  beforeEach(() => {
28
    payStubRepository = mock(PayStubRepository);
29
    userRepository = mock(UserRepository);
30
    fileRepository = mock(FileRepository);
31
32
    handler = new CreatePayStubCommandHandler(
33
      instance(payStubRepository),
34
      instance(userRepository),
35
      instance(fileRepository)
36
    );
37
  });
38
39
  it('testPayStubSuccessfullyCreated', async () => {
40
    when(
41
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
42
    ).thenResolve(instance(user));
43
    when(
44
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
45
    ).thenResolve(instance(file));
46
    when(payStub.getId()).thenReturn('7c35d37c-b0e3-480d-bf6c-3dc1e094886f');
47
    when(
48
      payStubRepository.save(
49
        deepEqual(new PayStub('2020-04-29', instance(file), instance(user)))
50
      )
51
    ).thenResolve(instance(payStub));
52
53
    expect(await handler.execute(command)).toBe(
54
      '7c35d37c-b0e3-480d-bf6c-3dc1e094886f'
55
    );
56
57
    verify(
58
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
59
    ).once();
60
    verify(
61
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
62
    ).once();
63
    verify(
64
      payStubRepository.save(
65
        deepEqual(new PayStub('2020-04-29', instance(file), instance(user)))
66
      )
67
    ).once();
68
  });
69
70
  it('testUserNotFound', async () => {
71
    when(
72
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
73
    ).thenResolve(null);
74
75
    try {
76
      await handler.execute(command);
77
    } catch (e) {
78
      expect(e).toBeInstanceOf(UserNotFoundException);
79
      expect(e.message).toBe('user.errors.not_found');
80
      verify(
81
        userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
82
      ).once();
83
      verify(fileRepository.findOneById(anything())).never();
84
      verify(payStubRepository.save(anything())).never();
85
    }
86
  });
87
88
  it('testFileNotFound', async () => {
89
    when(
90
      userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
91
    ).thenResolve(instance(user));
92
    when(
93
      fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
94
    ).thenResolve(null);
95
96
    try {
97
      await handler.execute(command);
98
    } catch (e) {
99
      verify(
100
        userRepository.findOneById('a491ccc9-df7c-4fc6-8e90-db816208f689')
101
      ).once();
102
      verify(
103
        fileRepository.findOneById('3d0a282f-3b3e-4ef3-948f-5ab3cb77a04c')
104
      ).once();
105
      verify(payStubRepository.save(anything())).never();
106
    }
107
  });
108
});
109