api/src/Application/Calendar/Command/UpdateEventCommandHandler.spec.ts   A
last analyzed

Complexity

Total Complexity 3
Complexity/F 0

Size

Lines of Code 161
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 136
mnd 3
bc 3
fnc 0
dl 0
loc 161
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { Event } from 'src/Domain/Calendar/Event.entity';
2
import { EventNotFoundException } from 'src/Domain/Calendar/Exception/EventNotFoundException';
3
import { SchoolNotFoundException } from 'src/Domain/School/Exception/SchoolNotFoundException';
4
import { School } from 'src/Domain/School/School.entity';
5
import { UserNotFoundException } from 'src/Domain/User/Exception/UserNotFoundException';
6
import { User } from 'src/Domain/User/User.entity';
7
import { EventRepository } from 'src/Infrastructure/Calendar/Repository/EventRepository';
8
import { SchoolRepository } from 'src/Infrastructure/School/Repository/SchoolRepository';
9
import { UserRepository } from 'src/Infrastructure/User/Repository/UserRepository';
10
import {
11
  mock,
12
  instance,
13
  when,
14
  verify,
15
  anything,
16
  deepEqual
17
} from 'ts-mockito';
18
import { UpdateEventCommand } from './UpdateEventCommand';
19
import { UpdateEventCommandHandler } from './UpdateEventCommandHandler';
20
21
describe('UpdateEventCommandHandler', () => {
22
  let schoolRepository: SchoolRepository;
23
  let userRepository: UserRepository;
24
  let eventRepository: EventRepository;
25
  let handler: UpdateEventCommandHandler;
26
27
  const user = mock(User);
28
  const school = mock(School);
29
  const event = mock(Event);
30
  const command = new UpdateEventCommand(
31
    'dbcf03dc-c300-458e-a7a6-46c962d36842',
32
    new Date('2020-10-19'),
33
    'e3fc9666-2932-4dc1-b2b9-d904388293fb',
34
    '50e624ef-3609-4053-a437-f74844a2d2de',
35
    'Prise de vue'
36
  );
37
38
  beforeEach(() => {
39
    schoolRepository = mock(SchoolRepository);
40
    userRepository = mock(UserRepository);
41
    eventRepository = mock(EventRepository);
42
43
    handler = new UpdateEventCommandHandler(
44
      instance(schoolRepository),
45
      instance(userRepository),
46
      instance(eventRepository),
47
    );
48
  });
49
50
  it('testEventNotFound', async () => {
51
    when(
52
      eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
53
    ).thenResolve(null);
54
55
    try {
56
      expect(await handler.execute(command)).toBeUndefined();
57
    } catch (e) {
58
      expect(e).toBeInstanceOf(EventNotFoundException);
59
      expect(e.message).toBe('calendar.errors.event_not_found');
60
      verify(schoolRepository.findOneById(anything())).never();
61
      verify(userRepository.findOneById(anything())).never();
62
      verify(
63
        eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
64
      ).once();
65
      verify(eventRepository.save(anything())).never();
66
    }
67
  });
68
69
  it('testSchoolNotFound', async () => {
70
    when(
71
      eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
72
    ).thenResolve(instance(event));
73
    when(
74
      userRepository.findOneById('e3fc9666-2932-4dc1-b2b9-d904388293fb')
75
    ).thenResolve(instance(user));
76
    when(
77
      schoolRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
78
    ).thenResolve(null);
79
80
    try {
81
      expect(await handler.execute(command)).toBeUndefined();
82
    } catch (e) {
83
      expect(e).toBeInstanceOf(SchoolNotFoundException);
84
      expect(e.message).toBe('schools.errors.not_found');
85
      verify(
86
        schoolRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
87
      ).once();
88
      verify(
89
        userRepository.findOneById('e3fc9666-2932-4dc1-b2b9-d904388293fb')
90
      ).once();
91
      verify(
92
        eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
93
      ).once();
94
      verify(eventRepository.save(anything())).never();
95
    }
96
  });
97
98
  it('testUserNotFound', async () => {
99
    when(
100
      eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
101
    ).thenResolve(instance(event));
102
    when(
103
      schoolRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
104
    ).thenResolve(instance(school));
105
    when(
106
      userRepository.findOneById('e3fc9666-2932-4dc1-b2b9-d904388293fb')
107
    ).thenResolve(null);
108
109
    try {
110
      await handler.execute(command);
111
    } catch (e) {
112
      expect(e).toBeInstanceOf(UserNotFoundException);
113
      expect(e.message).toBe('users.errors.not_found');
114
      verify(
115
        schoolRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
116
      ).once();
117
      verify(
118
        userRepository.findOneById('e3fc9666-2932-4dc1-b2b9-d904388293fb')
119
      ).once();
120
      verify(
121
        eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
122
      ).once();
123
      verify(eventRepository.save(anything())).never();
124
    }
125
  });
126
127
  it('testEventUpdated', async () => {
128
    when(event.getId()).thenReturn('6d48fae8-d579-4ab7-9155-1978dd650f0e');
129
130
    when(
131
      schoolRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
132
    ).thenResolve(instance(school));
133
    when(
134
      userRepository.findOneById('e3fc9666-2932-4dc1-b2b9-d904388293fb')
135
    ).thenResolve(instance(user));
136
    when(
137
      eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
138
    ).thenResolve(instance(event));
139
140
    expect(await handler.execute(command)).toBe('6d48fae8-d579-4ab7-9155-1978dd650f0e');
141
    verify(
142
      schoolRepository.findOneById('50e624ef-3609-4053-a437-f74844a2d2de')
143
    ).once();
144
    verify(
145
      userRepository.findOneById('e3fc9666-2932-4dc1-b2b9-d904388293fb')
146
    ).once();
147
    verify(
148
        eventRepository.findOneById('dbcf03dc-c300-458e-a7a6-46c962d36842')
149
      ).once();
150
    verify(
151
      event.update(
152
        deepEqual(new Date('2020-10-19')),
153
        instance(user),
154
        instance(school),
155
        'Prise de vue'
156
      )
157
    ).once();
158
    verify(eventRepository.save(instance(event))).once();
159
  });
160
});
161