Passed
Pull Request — master (#188)
by Mathieu
02:07
created

server/src/Application/Task/Command/UpdateTaskCommandHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 90
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 76
dl 0
loc 90
rs 10
c 0
b 0
f 0
wmc 2
mnd 2
bc 2
fnc 0
bpm 0
cpm 0
noi 0
1
import {mock, instance, when, verify, anything} from 'ts-mockito';
2
import {TaskRepository} from 'src/Infrastructure/Task/Repository/TaskRepository';
3
import {IsTaskAlreadyExist} from 'src/Domain/Task/Specification/IsTaskAlreadyExist';
4
import {Task} from 'src/Domain/Task/Task.entity';
5
import {UpdateTaskCommand} from './UpdateTaskCommand';
6
import {TaskNotFoundException} from 'src/Domain/Task/Exception/TaskNotFoundException';
7
import {TaskAlreadyExistException} from 'src/Domain/Task/Exception/TaskAlreadyExistException';
8
import {UpdateTaskCommandHandler} from './UpdateTaskCommandHandler';
9
10
describe('UpdateTaskCommandHandler', () => {
11
  let taskRepository: TaskRepository;
12
  let isTaskAlreadyExist: IsTaskAlreadyExist;
13
  let updatedTask: Task;
14
  let handler: UpdateTaskCommandHandler;
15
16
  const command = new UpdateTaskCommand(
17
    'afda00b1-bf49-4102-9bc2-bce17f3acd48',
18
    'Development mobile'
19
  );
20
21
  beforeEach(() => {
22
    taskRepository = mock(TaskRepository);
23
    isTaskAlreadyExist = mock(IsTaskAlreadyExist);
24
    updatedTask = mock(Task);
25
26
    handler = new UpdateTaskCommandHandler(
27
      instance(taskRepository),
28
      instance(isTaskAlreadyExist)
29
    );
30
  });
31
32
  it('testUpdateSuccessfully', async () => {
33
    when(
34
      taskRepository.findOneById('afda00b1-bf49-4102-9bc2-bce17f3acd48')
35
    ).thenResolve(instance(updatedTask));
36
    when(updatedTask.getName()).thenReturn('Development');
37
    when(isTaskAlreadyExist.isSatisfiedBy('Development mobile')).thenResolve(
38
      false
39
    );
40
41
    // Command return nothing
42
    expect(await handler.execute(command)).toBeUndefined();
43
44
    verify(isTaskAlreadyExist.isSatisfiedBy('Development mobile')).once();
45
    verify(taskRepository.save(instance(updatedTask))).once();
46
    verify(updatedTask.updateName('Development mobile')).once();
47
    verify(updatedTask.updateName('Development mobile')).calledBefore(
48
      taskRepository.save(instance(updatedTask))
49
    );
50
    verify(updatedTask.getName()).once();
51
  });
52
53
  it('testTaskNotFound', async () => {
54
    when(
55
      taskRepository.findOneById('afda00b1-bf49-4102-9bc2-bce17f3acd48')
56
    ).thenResolve(null);
57
58
    try {
59
      await handler.execute(command);
60
    } catch (e) {
61
      expect(e).toBeInstanceOf(TaskNotFoundException);
62
      expect(e.message).toBe('accounting.tasks.errors.not_found');
63
      verify(isTaskAlreadyExist.isSatisfiedBy(anything())).never();
64
      verify(taskRepository.save(anything())).never();
65
      verify(updatedTask.updateName(anything())).never();
66
      verify(updatedTask.getName()).never();
67
    }
68
  });
69
70
  it('testTaskAlreadyExist', async () => {
71
    when(
72
      taskRepository.findOneById('afda00b1-bf49-4102-9bc2-bce17f3acd48')
73
    ).thenResolve(instance(updatedTask));
74
    when(isTaskAlreadyExist.isSatisfiedBy('Development mobile')).thenResolve(
75
      true
76
    );
77
78
    try {
79
      await handler.execute(command);
80
    } catch (e) {
81
      expect(e).toBeInstanceOf(TaskAlreadyExistException);
82
      expect(e.message).toBe('accounting.tasks.errors.already_exist');
83
      verify(isTaskAlreadyExist.isSatisfiedBy('Development mobile')).once();
84
      verify(taskRepository.save(anything())).never();
85
      verify(updatedTask.updateName(anything())).never();
86
      verify(updatedTask.getName()).once();
87
    }
88
  });
89
});
90