Passed
Pull Request — master (#122)
by
unknown
01:40
created

server/src/Application/HumanResource/User/Command/UpdateUserCommandHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 97
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 80
mnd 2
bc 2
fnc 0
dl 0
loc 97
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { UserAdministrativeMissingException } from 'src/Domain/HumanResource/User/Exception/UserAdministrativeMissingException';
2
import {UserNotFoundException} from 'src/Domain/HumanResource/User/Exception/UserNotFoundException';
3
import {IUserAdministrativeRepository} from 'src/Domain/HumanResource/User/Repository/IUserAdministrativeRepository';
4
import {IUserRepository} from 'src/Domain/HumanResource/User/Repository/IUserRepository';
5
import {User, UserRole} from 'src/Domain/HumanResource/User/User.entity';
6
import {ContractType, UserAdministrative} from 'src/Domain/HumanResource/User/UserAdministrative.entity';
7
import {UserAdministrativeRepository} from 'src/Infrastructure/HumanResource/User/Repository/UserAdministrativeRepository';
8
import {UserRepository} from 'src/Infrastructure/HumanResource/User/Repository/UserRepository';
9
import {anything, deepEqual, instance, mock, verify, when} from 'ts-mockito';
10
11
import {UpdateUserCommand} from './UpdateUserCommand';
12
import {UpdateUserCommandHandler} from './UpdateUserCommandHandler';
13
14
describe('UpdateProfileCommandHandler', () => {
15
  let userRepository: IUserRepository;
16
  let userAdministrativeRepository: IUserAdministrativeRepository;
17
  let commandHandler: UpdateUserCommandHandler;
18
19
  const command: UpdateUserCommand = new UpdateUserCommand(
20
    'c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed',
21
    UserRole.COOPERATOR,
22
    50000,
23
    ContractType.CDI,
24
    true,
25
    true,
26
    '2018-01-01',
27
    null,
28
    75.2
29
  );
30
31
  beforeEach(() => {
32
    userRepository = mock(UserRepository);
33
    userAdministrativeRepository = mock(UserAdministrativeRepository);
34
35
    commandHandler = new UpdateUserCommandHandler(instance(userRepository), instance(userAdministrativeRepository));
36
  });
37
38
  it('testUserNotFound', async () => {
39
    const user = mock(User);
40
41
    when(userRepository.findOneById('c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed')).thenResolve(null);
42
43
    try {
44
      await commandHandler.execute(command);
45
    } catch (e) {
46
      expect(e).toBeInstanceOf(UserNotFoundException);
47
      expect(e.message).toBe('human_resources.users.errors.not_found');
48
      verify(userRepository.findOneById('c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed')).once();
49
      verify(userRepository.save(anything())).never();
50
      verify(userAdministrativeRepository.save(anything())).never();
51
    }
52
  });
53
54
  it('testUserUpdated', async () => {
55
    const userAdministrative = new UserAdministrative(30000, false, false, ContractType.CTT, '2017-08-01', '2018-12-31', null);
56
    const user = new User('John', 'Doe', '[email protected]', '123456789', 'password', UserRole.EMPLOYEE, userAdministrative);
57
58
    when(userRepository.findOneById('c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed')).thenResolve(user);
59
    when(userAdministrativeRepository.findOneByUserId('c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed')).thenResolve(userAdministrative);
60
61
    await commandHandler.execute(command);
62
    const updatedUserAdministrative = new UserAdministrative(
63
      5000000,
64
      true,
65
      true,
66
      ContractType.CDI,
67
      '2018-01-01',
68
      null,
69
      7520
70
    );
71
    verify(userRepository.save(
72
      deepEqual(new User(
73
          'John', 'Doe', '[email protected]', '123456789', 'password', UserRole.COOPERATOR, updatedUserAdministrative
74
        )
75
      )
76
    )).once();
77
    verify(userAdministrativeRepository.save(deepEqual(updatedUserAdministrative))).once();
78
  });
79
80
  it('testUserAdministrativeMissingException', async () => {
81
    const userAdministrative = new UserAdministrative(30000, false, false, ContractType.CTT, '2017-08-01', '2018-12-31', null);
82
    const user = new User('John', 'Doe', '[email protected]', '123456789', 'password', UserRole.EMPLOYEE, userAdministrative);
83
84
    when(userRepository.findOneById('c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed')).thenResolve(user);
85
    when(userAdministrativeRepository.findOneByUserId('c07c4d56-5ff1-4ef9-b38e-631a6b9e92ed')).thenResolve(null);
86
87
    try {
88
      await commandHandler.execute(command);
89
    } catch (e) {
90
      expect(e).toBeInstanceOf(UserAdministrativeMissingException);
91
      expect(e.message).toBe('human_resources.users.errors.user_administrative_missing');
92
      verify(userRepository.save(anything())).never();
93
      verify(userAdministrativeRepository.save(anything())).never();
94
    }
95
  });
96
});
97