Passed
Pull Request — master (#63)
by Nicolas
01:44
created

server/src/Application/Activity/Command/DeleteActivityCommandHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 114
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 93
mnd 2
bc 2
fnc 0
dl 0
loc 114
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import {
2
    mock,
3
    instance,
4
    when,
5
    verify,
6
    anything
7
} from 'ts-mockito';
8
9
import {ActivityRepository} from 'src/Infrastructure/Activity/Repository/ActivityRepository';
10
import {DeleteActivityCommandHandler} from './DeleteActivityCommandHandler';
11
import {DeleteActivityCommand} from './DeleteActivityCommand';
12
import {User} from 'src/Domain/User/User.entity';
13
import {Activity} from 'src/Domain/Activity/Activity.entity';
14
import { ActivityNotFoundException } from 'src/Domain/Activity/Exception/ActivityNotFoundException';
15
import { NotActivityOwnerException } from 'src/Domain/Activity/Exception/NotActivityOwnerException';
16
import { Project } from 'src/Domain/Project/Project.entity';
17
import { Task } from 'src/Domain/Task/Task.entity';
18
  
19
describe('DeleteActivityCommandHandler', () => {
20
  let activityRepository: ActivityRepository;
21
  let handler: DeleteActivityCommandHandler;
22
23
  const user = mock(User);
24
  const otherUser = mock(User);
25
  const project = mock(Project);
26
  const task = mock(Task);
27
28
  const activity = new Activity(
29
    instance(project),
30
    instance(task),
31
    instance(user),
32
    1,
33
    'date',
34
    'summary'
35
  );
36
37
  const command = new DeleteActivityCommand(
38
    instance(user),
39
    '50e624ef-3609-4053-a437-f74844a2d2de'
40
  );
41
42
  beforeEach(() => {
43
    activityRepository = mock(ActivityRepository);
44
45
    handler = new DeleteActivityCommandHandler(
46
      instance(activityRepository)
47
    );
48
  });
49
50
  it('testActivityNotFound', async () => {
51
    when(
52
      activityRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
53
    ).thenResolve(null);
54
55
    try {
56
      await handler.execute(command);
57
    } catch (e) {
58
      expect(e).toBeInstanceOf(ActivityNotFoundException);
59
      expect(e.message).toBe('activity.errors.not_found');
60
      verify(
61
        activityRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
62
      ).once();
63
      verify(activityRepository.deleteById(anything())).never();
64
    }
65
  });
66
67
  it('testNotActivityOwner', async () => {
68
    const otherActivity = new Activity(
69
      instance(project),
70
      instance(task),
71
      instance(otherUser),
72
      1,
73
      'date',
74
      'summary'
75
    );
76
    when(
77
      activityRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
78
    ).thenResolve(otherActivity);
79
    when(otherUser.getId()).thenReturn(
80
      'e3fc9666-2932-4dc1-b2b9-d904388293fb'
81
    );
82
    when(user.getId()).thenReturn(
83
      'e3fc9666-2932-4dc1-b2b9-d904388293fc'
84
    );
85
86
    try {
87
      await handler.execute(command);
88
    } catch (e) {
89
      expect(e).toBeInstanceOf(NotActivityOwnerException);
90
      expect(e.message).toBe('activity.errors.not_owner');
91
      verify(
92
        activityRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
93
      ).once();
94
      verify(activityRepository.deleteById(anything())).never();
95
    }
96
  });
97
98
  it('testDeleteactivity', async () => {
99
    when(
100
      activityRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
101
    ).thenResolve(activity);
102
    when(user.getId()).thenReturn(
103
      'e3fc9666-2932-4dc1-b2b9-d904388293fb'
104
    );
105
106
    expect(await handler.execute(command));
107
108
    verify(
109
      activityRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
110
    ).once();
111
    verify(activityRepository.deleteById('50e624ef-3609-4053-a437-f74844a2d2de')).once();
112
  });
113
});
114