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

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

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 102
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

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