]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/notifications/user-notifications.ts
Merge branch 'release/v1.3.0' into develop
[github/Chocobozzz/PeerTube.git] / server / tests / api / notifications / user-notifications.ts
1 /* tslint:disable:no-unused-expression */
2
3 import * as chai from 'chai'
4 import 'mocha'
5 import {
6 addVideoToBlacklist,
7 cleanupTests,
8 createUser,
9 doubleFollow,
10 flushAndRunMultipleServers,
11 follow,
12 getCustomConfig,
13 getMyUserInformation,
14 getVideoCommentThreads,
15 getVideoThreadComments,
16 immutableAssign,
17 registerUser,
18 removeVideoFromBlacklist,
19 reportVideoAbuse,
20 updateCustomConfig,
21 updateMyUser,
22 updateVideo,
23 updateVideoChannel,
24 userLogin,
25 wait
26 } from '../../../../shared/extra-utils'
27 import { ServerInfo, uploadVideo } from '../../../../shared/extra-utils/index'
28 import { setAccessTokensToServers } from '../../../../shared/extra-utils/users/login'
29 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
30 import { getUserNotificationSocket } from '../../../../shared/extra-utils/socket/socket-io'
31 import {
32 checkCommentMention,
33 CheckerBaseParams,
34 checkMyVideoImportIsFinished,
35 checkNewActorFollow,
36 checkNewBlacklistOnMyVideo,
37 checkNewCommentOnMyVideo,
38 checkNewInstanceFollower,
39 checkNewVideoAbuseForModerators,
40 checkNewVideoFromSubscription,
41 checkUserRegistered,
42 checkVideoAutoBlacklistForModerators,
43 checkVideoIsPublished,
44 getLastNotification,
45 getUserNotifications,
46 markAsReadAllNotifications,
47 markAsReadNotifications,
48 updateMyNotificationSettings
49 } from '../../../../shared/extra-utils/users/user-notifications'
50 import {
51 User,
52 UserNotification,
53 UserNotificationSetting,
54 UserNotificationSettingValue,
55 UserNotificationType
56 } from '../../../../shared/models/users'
57 import { MockSmtpServer } from '../../../../shared/extra-utils/miscs/email'
58 import { addUserSubscription, removeUserSubscription } from '../../../../shared/extra-utils/users/user-subscriptions'
59 import { VideoPrivacy } from '../../../../shared/models/videos'
60 import { getBadVideoUrl, getYoutubeVideoUrl, importVideo } from '../../../../shared/extra-utils/videos/video-imports'
61 import { addVideoCommentReply, addVideoCommentThread } from '../../../../shared/extra-utils/videos/video-comments'
62 import * as uuidv4 from 'uuid/v4'
63 import { addAccountToAccountBlocklist, removeAccountFromAccountBlocklist } from '../../../../shared/extra-utils/users/blocklist'
64 import { CustomConfig } from '../../../../shared/models/server'
65 import { VideoCommentThreadTree } from '../../../../shared/models/videos/video-comment.model'
66
67 const expect = chai.expect
68
69 async function uploadVideoByRemoteAccount (servers: ServerInfo[], additionalParams: any = {}) {
70 const name = 'remote video ' + uuidv4()
71
72 const data = Object.assign({ name }, additionalParams)
73 const res = await uploadVideo(servers[ 1 ].url, servers[ 1 ].accessToken, data)
74
75 await waitJobs(servers)
76
77 return { uuid: res.body.video.uuid, name }
78 }
79
80 async function uploadVideoByLocalAccount (servers: ServerInfo[], additionalParams: any = {}) {
81 const name = 'local video ' + uuidv4()
82
83 const data = Object.assign({ name }, additionalParams)
84 const res = await uploadVideo(servers[ 0 ].url, servers[ 0 ].accessToken, data)
85
86 await waitJobs(servers)
87
88 return { uuid: res.body.video.uuid, name }
89 }
90
91 describe('Test users notifications', function () {
92 let servers: ServerInfo[] = []
93 let userAccessToken: string
94 let userNotifications: UserNotification[] = []
95 let adminNotifications: UserNotification[] = []
96 let adminNotificationsServer2: UserNotification[] = []
97 const emails: object[] = []
98 let channelId: number
99
100 const allNotificationSettings: UserNotificationSetting = {
101 newVideoFromSubscription: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
102 newCommentOnMyVideo: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
103 videoAbuseAsModerator: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
104 videoAutoBlacklistAsModerator: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
105 blacklistOnMyVideo: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
106 myVideoImportFinished: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
107 myVideoPublished: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
108 commentMention: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
109 newFollow: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
110 newUserRegistration: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
111 newInstanceFollower: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL
112 }
113
114 before(async function () {
115 this.timeout(120000)
116
117 const port = await MockSmtpServer.Instance.collectEmails(emails)
118
119 const overrideConfig = {
120 smtp: {
121 hostname: 'localhost',
122 port
123 }
124 }
125 servers = await flushAndRunMultipleServers(3, overrideConfig)
126
127 // Get the access tokens
128 await setAccessTokensToServers(servers)
129
130 // Server 1 and server 2 follow each other
131 await doubleFollow(servers[0], servers[1])
132
133 await waitJobs(servers)
134
135 const user = {
136 username: 'user_1',
137 password: 'super password'
138 }
139 await createUser({
140 url: servers[ 0 ].url,
141 accessToken: servers[ 0 ].accessToken,
142 username: user.username,
143 password: user.password,
144 videoQuota: 10 * 1000 * 1000
145 })
146 userAccessToken = await userLogin(servers[0], user)
147
148 await updateMyNotificationSettings(servers[0].url, userAccessToken, allNotificationSettings)
149 await updateMyNotificationSettings(servers[0].url, servers[0].accessToken, allNotificationSettings)
150 await updateMyNotificationSettings(servers[1].url, servers[1].accessToken, allNotificationSettings)
151
152 {
153 const socket = getUserNotificationSocket(servers[ 0 ].url, userAccessToken)
154 socket.on('new-notification', n => userNotifications.push(n))
155 }
156 {
157 const socket = getUserNotificationSocket(servers[ 0 ].url, servers[0].accessToken)
158 socket.on('new-notification', n => adminNotifications.push(n))
159 }
160 {
161 const socket = getUserNotificationSocket(servers[ 1 ].url, servers[1].accessToken)
162 socket.on('new-notification', n => adminNotificationsServer2.push(n))
163 }
164
165 {
166 const resChannel = await getMyUserInformation(servers[0].url, servers[0].accessToken)
167 channelId = resChannel.body.videoChannels[0].id
168 }
169 })
170
171 describe('New video from my subscription notification', function () {
172 let baseParams: CheckerBaseParams
173
174 before(() => {
175 baseParams = {
176 server: servers[0],
177 emails,
178 socketNotifications: userNotifications,
179 token: userAccessToken
180 }
181 })
182
183 it('Should not send notifications if the user does not follow the video publisher', async function () {
184 this.timeout(10000)
185
186 await uploadVideoByLocalAccount(servers)
187
188 const notification = await getLastNotification(servers[ 0 ].url, userAccessToken)
189 expect(notification).to.be.undefined
190
191 expect(emails).to.have.lengthOf(0)
192 expect(userNotifications).to.have.lengthOf(0)
193 })
194
195 it('Should send a new video notification if the user follows the local video publisher', async function () {
196 this.timeout(15000)
197
198 await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:' + servers[0].port)
199 await waitJobs(servers)
200
201 const { name, uuid } = await uploadVideoByLocalAccount(servers)
202 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
203 })
204
205 it('Should send a new video notification from a remote account', async function () {
206 this.timeout(50000) // Server 2 has transcoding enabled
207
208 await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:' + servers[1].port)
209 await waitJobs(servers)
210
211 const { name, uuid } = await uploadVideoByRemoteAccount(servers)
212 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
213 })
214
215 it('Should send a new video notification on a scheduled publication', async function () {
216 this.timeout(20000)
217
218 // In 2 seconds
219 let updateAt = new Date(new Date().getTime() + 2000)
220
221 const data = {
222 privacy: VideoPrivacy.PRIVATE,
223 scheduleUpdate: {
224 updateAt: updateAt.toISOString(),
225 privacy: VideoPrivacy.PUBLIC
226 }
227 }
228 const { name, uuid } = await uploadVideoByLocalAccount(servers, data)
229
230 await wait(6000)
231 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
232 })
233
234 it('Should send a new video notification on a remote scheduled publication', async function () {
235 this.timeout(50000)
236
237 // In 2 seconds
238 let updateAt = new Date(new Date().getTime() + 2000)
239
240 const data = {
241 privacy: VideoPrivacy.PRIVATE,
242 scheduleUpdate: {
243 updateAt: updateAt.toISOString(),
244 privacy: VideoPrivacy.PUBLIC
245 }
246 }
247 const { name, uuid } = await uploadVideoByRemoteAccount(servers, data)
248 await waitJobs(servers)
249
250 await wait(6000)
251 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
252 })
253
254 it('Should not send a notification before the video is published', async function () {
255 this.timeout(20000)
256
257 let updateAt = new Date(new Date().getTime() + 1000000)
258
259 const data = {
260 privacy: VideoPrivacy.PRIVATE,
261 scheduleUpdate: {
262 updateAt: updateAt.toISOString(),
263 privacy: VideoPrivacy.PUBLIC
264 }
265 }
266 const { name, uuid } = await uploadVideoByLocalAccount(servers, data)
267
268 await wait(6000)
269 await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence')
270 })
271
272 it('Should send a new video notification when a video becomes public', async function () {
273 this.timeout(10000)
274
275 const data = { privacy: VideoPrivacy.PRIVATE }
276 const { name, uuid } = await uploadVideoByLocalAccount(servers, data)
277
278 await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence')
279
280 await updateVideo(servers[0].url, servers[0].accessToken, uuid, { privacy: VideoPrivacy.PUBLIC })
281
282 await wait(500)
283 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
284 })
285
286 it('Should send a new video notification when a remote video becomes public', async function () {
287 this.timeout(20000)
288
289 const data = { privacy: VideoPrivacy.PRIVATE }
290 const { name, uuid } = await uploadVideoByRemoteAccount(servers, data)
291
292 await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence')
293
294 await updateVideo(servers[1].url, servers[1].accessToken, uuid, { privacy: VideoPrivacy.PUBLIC })
295
296 await waitJobs(servers)
297 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
298 })
299
300 it('Should not send a new video notification when a video becomes unlisted', async function () {
301 this.timeout(20000)
302
303 const data = { privacy: VideoPrivacy.PRIVATE }
304 const { name, uuid } = await uploadVideoByLocalAccount(servers, data)
305
306 await updateVideo(servers[0].url, servers[0].accessToken, uuid, { privacy: VideoPrivacy.UNLISTED })
307
308 await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence')
309 })
310
311 it('Should not send a new video notification when a remote video becomes unlisted', async function () {
312 this.timeout(20000)
313
314 const data = { privacy: VideoPrivacy.PRIVATE }
315 const { name, uuid } = await uploadVideoByRemoteAccount(servers, data)
316
317 await updateVideo(servers[1].url, servers[1].accessToken, uuid, { privacy: VideoPrivacy.UNLISTED })
318
319 await waitJobs(servers)
320 await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence')
321 })
322
323 it('Should send a new video notification after a video import', async function () {
324 this.timeout(100000)
325
326 const name = 'video import ' + uuidv4()
327
328 const attributes = {
329 name,
330 channelId,
331 privacy: VideoPrivacy.PUBLIC,
332 targetUrl: getYoutubeVideoUrl()
333 }
334 const res = await importVideo(servers[0].url, servers[0].accessToken, attributes)
335 const uuid = res.body.video.uuid
336
337 await waitJobs(servers)
338
339 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
340 })
341 })
342
343 describe('Comment on my video notifications', function () {
344 let baseParams: CheckerBaseParams
345
346 before(() => {
347 baseParams = {
348 server: servers[0],
349 emails,
350 socketNotifications: userNotifications,
351 token: userAccessToken
352 }
353 })
354
355 it('Should not send a new comment notification after a comment on another video', async function () {
356 this.timeout(10000)
357
358 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
359 const uuid = resVideo.body.video.uuid
360
361 const resComment = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, 'comment')
362 const commentId = resComment.body.comment.id
363
364 await wait(500)
365 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'absence')
366 })
367
368 it('Should not send a new comment notification if I comment my own video', async function () {
369 this.timeout(10000)
370
371 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
372 const uuid = resVideo.body.video.uuid
373
374 const resComment = await addVideoCommentThread(servers[0].url, userAccessToken, uuid, 'comment')
375 const commentId = resComment.body.comment.id
376
377 await wait(500)
378 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'absence')
379 })
380
381 it('Should not send a new comment notification if the account is muted', async function () {
382 this.timeout(10000)
383
384 await addAccountToAccountBlocklist(servers[ 0 ].url, userAccessToken, 'root')
385
386 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
387 const uuid = resVideo.body.video.uuid
388
389 const resComment = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, 'comment')
390 const commentId = resComment.body.comment.id
391
392 await wait(500)
393 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'absence')
394
395 await removeAccountFromAccountBlocklist(servers[ 0 ].url, userAccessToken, 'root')
396 })
397
398 it('Should send a new comment notification after a local comment on my video', async function () {
399 this.timeout(10000)
400
401 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
402 const uuid = resVideo.body.video.uuid
403
404 const resComment = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, 'comment')
405 const commentId = resComment.body.comment.id
406
407 await wait(500)
408 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'presence')
409 })
410
411 it('Should send a new comment notification after a remote comment on my video', async function () {
412 this.timeout(10000)
413
414 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
415 const uuid = resVideo.body.video.uuid
416
417 await waitJobs(servers)
418
419 await addVideoCommentThread(servers[1].url, servers[1].accessToken, uuid, 'comment')
420
421 await waitJobs(servers)
422
423 const resComment = await getVideoCommentThreads(servers[0].url, uuid, 0, 5)
424 expect(resComment.body.data).to.have.lengthOf(1)
425 const commentId = resComment.body.data[0].id
426
427 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'presence')
428 })
429
430 it('Should send a new comment notification after a local reply on my video', async function () {
431 this.timeout(10000)
432
433 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
434 const uuid = resVideo.body.video.uuid
435
436 const resThread = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, 'comment')
437 const threadId = resThread.body.comment.id
438
439 const resComment = await addVideoCommentReply(servers[0].url, servers[0].accessToken, uuid, threadId, 'reply')
440 const commentId = resComment.body.comment.id
441
442 await wait(500)
443 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, threadId, 'presence')
444 })
445
446 it('Should send a new comment notification after a remote reply on my video', async function () {
447 this.timeout(10000)
448
449 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
450 const uuid = resVideo.body.video.uuid
451 await waitJobs(servers)
452
453 {
454 const resThread = await addVideoCommentThread(servers[ 1 ].url, servers[ 1 ].accessToken, uuid, 'comment')
455 const threadId = resThread.body.comment.id
456 await addVideoCommentReply(servers[ 1 ].url, servers[ 1 ].accessToken, uuid, threadId, 'reply')
457 }
458
459 await waitJobs(servers)
460
461 const resThread = await getVideoCommentThreads(servers[0].url, uuid, 0, 5)
462 expect(resThread.body.data).to.have.lengthOf(1)
463 const threadId = resThread.body.data[0].id
464
465 const resComments = await getVideoThreadComments(servers[0].url, uuid, threadId)
466 const tree = resComments.body as VideoCommentThreadTree
467
468 expect(tree.children).to.have.lengthOf(1)
469 const commentId = tree.children[0].comment.id
470
471 await checkNewCommentOnMyVideo(baseParams, uuid, commentId, threadId, 'presence')
472 })
473 })
474
475 describe('Mention notifications', function () {
476 let baseParams: CheckerBaseParams
477
478 before(async () => {
479 baseParams = {
480 server: servers[0],
481 emails,
482 socketNotifications: userNotifications,
483 token: userAccessToken
484 }
485
486 await updateMyUser({
487 url: servers[0].url,
488 accessToken: servers[0].accessToken,
489 displayName: 'super root name'
490 })
491
492 await updateMyUser({
493 url: servers[1].url,
494 accessToken: servers[1].accessToken,
495 displayName: 'super root 2 name'
496 })
497 })
498
499 it('Should not send a new mention comment notification if I mention the video owner', async function () {
500 this.timeout(10000)
501
502 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
503 const uuid = resVideo.body.video.uuid
504
505 const resComment = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, '@user_1 hello')
506 const commentId = resComment.body.comment.id
507
508 await wait(500)
509 await checkCommentMention(baseParams, uuid, commentId, commentId, 'super root name', 'absence')
510 })
511
512 it('Should not send a new mention comment notification if I mention myself', async function () {
513 this.timeout(10000)
514
515 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
516 const uuid = resVideo.body.video.uuid
517
518 const resComment = await addVideoCommentThread(servers[0].url, userAccessToken, uuid, '@user_1 hello')
519 const commentId = resComment.body.comment.id
520
521 await wait(500)
522 await checkCommentMention(baseParams, uuid, commentId, commentId, 'super root name', 'absence')
523 })
524
525 it('Should not send a new mention notification if the account is muted', async function () {
526 this.timeout(10000)
527
528 await addAccountToAccountBlocklist(servers[ 0 ].url, userAccessToken, 'root')
529
530 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
531 const uuid = resVideo.body.video.uuid
532
533 const resComment = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, '@user_1 hello')
534 const commentId = resComment.body.comment.id
535
536 await wait(500)
537 await checkCommentMention(baseParams, uuid, commentId, commentId, 'super root name', 'absence')
538
539 await removeAccountFromAccountBlocklist(servers[ 0 ].url, userAccessToken, 'root')
540 })
541
542 it('Should not send a new mention notification if the remote account mention a local account', async function () {
543 this.timeout(20000)
544
545 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
546 const uuid = resVideo.body.video.uuid
547
548 await waitJobs(servers)
549 const resThread = await addVideoCommentThread(servers[1].url, servers[1].accessToken, uuid, '@user_1 hello')
550 const threadId = resThread.body.comment.id
551
552 await waitJobs(servers)
553 await checkCommentMention(baseParams, uuid, threadId, threadId, 'super root 2 name', 'absence')
554 })
555
556 it('Should send a new mention notification after local comments', async function () {
557 this.timeout(10000)
558
559 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
560 const uuid = resVideo.body.video.uuid
561
562 const resThread = await addVideoCommentThread(servers[0].url, servers[0].accessToken, uuid, '@user_1 hello 1')
563 const threadId = resThread.body.comment.id
564
565 await wait(500)
566 await checkCommentMention(baseParams, uuid, threadId, threadId, 'super root name', 'presence')
567
568 const resComment = await addVideoCommentReply(servers[0].url, servers[0].accessToken, uuid, threadId, 'hello 2 @user_1')
569 const commentId = resComment.body.comment.id
570
571 await wait(500)
572 await checkCommentMention(baseParams, uuid, commentId, threadId, 'super root name', 'presence')
573 })
574
575 it('Should send a new mention notification after remote comments', async function () {
576 this.timeout(20000)
577
578 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
579 const uuid = resVideo.body.video.uuid
580
581 await waitJobs(servers)
582
583 const text1 = `hello @user_1@localhost:${servers[ 0 ].port} 1`
584 const resThread = await addVideoCommentThread(servers[1].url, servers[1].accessToken, uuid, text1)
585 const server2ThreadId = resThread.body.comment.id
586
587 await waitJobs(servers)
588
589 const resThread2 = await getVideoCommentThreads(servers[0].url, uuid, 0, 5)
590 expect(resThread2.body.data).to.have.lengthOf(1)
591 const server1ThreadId = resThread2.body.data[0].id
592 await checkCommentMention(baseParams, uuid, server1ThreadId, server1ThreadId, 'super root 2 name', 'presence')
593
594 const text2 = `@user_1@localhost:${servers[ 0 ].port} hello 2 @root@localhost:${servers[ 0 ].port}`
595 await addVideoCommentReply(servers[1].url, servers[1].accessToken, uuid, server2ThreadId, text2)
596
597 await waitJobs(servers)
598
599 const resComments = await getVideoThreadComments(servers[0].url, uuid, server1ThreadId)
600 const tree = resComments.body as VideoCommentThreadTree
601
602 expect(tree.children).to.have.lengthOf(1)
603 const commentId = tree.children[0].comment.id
604
605 await checkCommentMention(baseParams, uuid, commentId, server1ThreadId, 'super root 2 name', 'presence')
606 })
607 })
608
609 describe('Video abuse for moderators notification' , function () {
610 let baseParams: CheckerBaseParams
611
612 before(() => {
613 baseParams = {
614 server: servers[0],
615 emails,
616 socketNotifications: adminNotifications,
617 token: servers[0].accessToken
618 }
619 })
620
621 it('Should send a notification to moderators on local video abuse', async function () {
622 this.timeout(10000)
623
624 const name = 'video for abuse ' + uuidv4()
625 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name })
626 const uuid = resVideo.body.video.uuid
627
628 await reportVideoAbuse(servers[0].url, servers[0].accessToken, uuid, 'super reason')
629
630 await waitJobs(servers)
631 await checkNewVideoAbuseForModerators(baseParams, uuid, name, 'presence')
632 })
633
634 it('Should send a notification to moderators on remote video abuse', async function () {
635 this.timeout(10000)
636
637 const name = 'video for abuse ' + uuidv4()
638 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name })
639 const uuid = resVideo.body.video.uuid
640
641 await waitJobs(servers)
642
643 await reportVideoAbuse(servers[1].url, servers[1].accessToken, uuid, 'super reason')
644
645 await waitJobs(servers)
646 await checkNewVideoAbuseForModerators(baseParams, uuid, name, 'presence')
647 })
648 })
649
650 describe('Video blacklist on my video', function () {
651 let baseParams: CheckerBaseParams
652
653 before(() => {
654 baseParams = {
655 server: servers[0],
656 emails,
657 socketNotifications: userNotifications,
658 token: userAccessToken
659 }
660 })
661
662 it('Should send a notification to video owner on blacklist', async function () {
663 this.timeout(10000)
664
665 const name = 'video for abuse ' + uuidv4()
666 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name })
667 const uuid = resVideo.body.video.uuid
668
669 await addVideoToBlacklist(servers[0].url, servers[0].accessToken, uuid)
670
671 await waitJobs(servers)
672 await checkNewBlacklistOnMyVideo(baseParams, uuid, name, 'blacklist')
673 })
674
675 it('Should send a notification to video owner on unblacklist', async function () {
676 this.timeout(10000)
677
678 const name = 'video for abuse ' + uuidv4()
679 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name })
680 const uuid = resVideo.body.video.uuid
681
682 await addVideoToBlacklist(servers[0].url, servers[0].accessToken, uuid)
683
684 await waitJobs(servers)
685 await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, uuid)
686 await waitJobs(servers)
687
688 await wait(500)
689 await checkNewBlacklistOnMyVideo(baseParams, uuid, name, 'unblacklist')
690 })
691 })
692
693 describe('My video is published', function () {
694 let baseParams: CheckerBaseParams
695
696 before(() => {
697 baseParams = {
698 server: servers[1],
699 emails,
700 socketNotifications: adminNotificationsServer2,
701 token: servers[1].accessToken
702 }
703 })
704
705 it('Should not send a notification if transcoding is not enabled', async function () {
706 this.timeout(10000)
707
708 const { name, uuid } = await uploadVideoByLocalAccount(servers)
709 await waitJobs(servers)
710
711 await checkVideoIsPublished(baseParams, name, uuid, 'absence')
712 })
713
714 it('Should not send a notification if the wait transcoding is false', async function () {
715 this.timeout(50000)
716
717 await uploadVideoByRemoteAccount(servers, { waitTranscoding: false })
718 await waitJobs(servers)
719
720 const notification = await getLastNotification(servers[ 0 ].url, userAccessToken)
721 if (notification) {
722 expect(notification.type).to.not.equal(UserNotificationType.MY_VIDEO_PUBLISHED)
723 }
724 })
725
726 it('Should send a notification even if the video is not transcoded in other resolutions', async function () {
727 this.timeout(50000)
728
729 const { name, uuid } = await uploadVideoByRemoteAccount(servers, { waitTranscoding: true, fixture: 'video_short_240p.mp4' })
730 await waitJobs(servers)
731
732 await checkVideoIsPublished(baseParams, name, uuid, 'presence')
733 })
734
735 it('Should send a notification with a transcoded video', async function () {
736 this.timeout(50000)
737
738 const { name, uuid } = await uploadVideoByRemoteAccount(servers, { waitTranscoding: true })
739 await waitJobs(servers)
740
741 await checkVideoIsPublished(baseParams, name, uuid, 'presence')
742 })
743
744 it('Should send a notification when an imported video is transcoded', async function () {
745 this.timeout(50000)
746
747 const name = 'video import ' + uuidv4()
748
749 const attributes = {
750 name,
751 channelId,
752 privacy: VideoPrivacy.PUBLIC,
753 targetUrl: getYoutubeVideoUrl(),
754 waitTranscoding: true
755 }
756 const res = await importVideo(servers[1].url, servers[1].accessToken, attributes)
757 const uuid = res.body.video.uuid
758
759 await waitJobs(servers)
760 await checkVideoIsPublished(baseParams, name, uuid, 'presence')
761 })
762
763 it('Should send a notification when the scheduled update has been proceeded', async function () {
764 this.timeout(70000)
765
766 // In 2 seconds
767 let updateAt = new Date(new Date().getTime() + 2000)
768
769 const data = {
770 privacy: VideoPrivacy.PRIVATE,
771 scheduleUpdate: {
772 updateAt: updateAt.toISOString(),
773 privacy: VideoPrivacy.PUBLIC
774 }
775 }
776 const { name, uuid } = await uploadVideoByRemoteAccount(servers, data)
777
778 await wait(6000)
779 await checkVideoIsPublished(baseParams, name, uuid, 'presence')
780 })
781
782 it('Should not send a notification before the video is published', async function () {
783 this.timeout(20000)
784
785 let updateAt = new Date(new Date().getTime() + 100000)
786
787 const data = {
788 privacy: VideoPrivacy.PRIVATE,
789 scheduleUpdate: {
790 updateAt: updateAt.toISOString(),
791 privacy: VideoPrivacy.PUBLIC
792 }
793 }
794 const { name, uuid } = await uploadVideoByRemoteAccount(servers, data)
795
796 await wait(6000)
797 await checkVideoIsPublished(baseParams, name, uuid, 'absence')
798 })
799 })
800
801 describe('My video is imported', function () {
802 let baseParams: CheckerBaseParams
803
804 before(() => {
805 baseParams = {
806 server: servers[0],
807 emails,
808 socketNotifications: adminNotifications,
809 token: servers[0].accessToken
810 }
811 })
812
813 it('Should send a notification when the video import failed', async function () {
814 this.timeout(70000)
815
816 const name = 'video import ' + uuidv4()
817
818 const attributes = {
819 name,
820 channelId,
821 privacy: VideoPrivacy.PRIVATE,
822 targetUrl: getBadVideoUrl()
823 }
824 const res = await importVideo(servers[0].url, servers[0].accessToken, attributes)
825 const uuid = res.body.video.uuid
826
827 await waitJobs(servers)
828 await checkMyVideoImportIsFinished(baseParams, name, uuid, getBadVideoUrl(), false, 'presence')
829 })
830
831 it('Should send a notification when the video import succeeded', async function () {
832 this.timeout(70000)
833
834 const name = 'video import ' + uuidv4()
835
836 const attributes = {
837 name,
838 channelId,
839 privacy: VideoPrivacy.PRIVATE,
840 targetUrl: getYoutubeVideoUrl()
841 }
842 const res = await importVideo(servers[0].url, servers[0].accessToken, attributes)
843 const uuid = res.body.video.uuid
844
845 await waitJobs(servers)
846 await checkMyVideoImportIsFinished(baseParams, name, uuid, getYoutubeVideoUrl(), true, 'presence')
847 })
848 })
849
850 describe('New registration', function () {
851 let baseParams: CheckerBaseParams
852
853 before(() => {
854 baseParams = {
855 server: servers[0],
856 emails,
857 socketNotifications: adminNotifications,
858 token: servers[0].accessToken
859 }
860 })
861
862 it('Should send a notification only to moderators when a user registers on the instance', async function () {
863 this.timeout(10000)
864
865 await registerUser(servers[0].url, 'user_45', 'password')
866
867 await waitJobs(servers)
868
869 await checkUserRegistered(baseParams, 'user_45', 'presence')
870
871 const userOverride = { socketNotifications: userNotifications, token: userAccessToken, check: { web: true, mail: false } }
872 await checkUserRegistered(immutableAssign(baseParams, userOverride), 'user_45', 'absence')
873 })
874 })
875
876 describe('New instance follower', function () {
877 let baseParams: CheckerBaseParams
878
879 before(async () => {
880 baseParams = {
881 server: servers[0],
882 emails,
883 socketNotifications: adminNotifications,
884 token: servers[0].accessToken
885 }
886 })
887
888 it('Should send a notification only to admin when there is a new instance follower', async function () {
889 this.timeout(20000)
890
891 await follow(servers[2].url, [ servers[0].url ], servers[2].accessToken)
892
893 await waitJobs(servers)
894
895 await checkNewInstanceFollower(baseParams, 'localhost:' + servers[2].port, 'presence')
896
897 const userOverride = { socketNotifications: userNotifications, token: userAccessToken, check: { web: true, mail: false } }
898 await checkNewInstanceFollower(immutableAssign(baseParams, userOverride), 'localhost:' + servers[2].port, 'absence')
899 })
900 })
901
902 describe('New actor follow', function () {
903 let baseParams: CheckerBaseParams
904 let myChannelName = 'super channel name'
905 let myUserName = 'super user name'
906
907 before(async () => {
908 baseParams = {
909 server: servers[0],
910 emails,
911 socketNotifications: userNotifications,
912 token: userAccessToken
913 }
914
915 await updateMyUser({
916 url: servers[0].url,
917 accessToken: servers[0].accessToken,
918 displayName: 'super root name'
919 })
920
921 await updateMyUser({
922 url: servers[0].url,
923 accessToken: userAccessToken,
924 displayName: myUserName
925 })
926
927 await updateMyUser({
928 url: servers[1].url,
929 accessToken: servers[1].accessToken,
930 displayName: 'super root 2 name'
931 })
932
933 await updateVideoChannel(servers[0].url, userAccessToken, 'user_1_channel', { displayName: myChannelName })
934 })
935
936 it('Should notify when a local channel is following one of our channel', async function () {
937 this.timeout(10000)
938
939 await addUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
940 await waitJobs(servers)
941
942 await checkNewActorFollow(baseParams, 'channel', 'root', 'super root name', myChannelName, 'presence')
943
944 await removeUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
945 })
946
947 it('Should notify when a remote channel is following one of our channel', async function () {
948 this.timeout(10000)
949
950 await addUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
951 await waitJobs(servers)
952
953 await checkNewActorFollow(baseParams, 'channel', 'root', 'super root 2 name', myChannelName, 'presence')
954
955 await removeUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
956 })
957
958 it('Should notify when a local account is following one of our channel', async function () {
959 this.timeout(10000)
960
961 await addUserSubscription(servers[0].url, servers[0].accessToken, 'user_1@localhost:' + servers[0].port)
962
963 await waitJobs(servers)
964
965 await checkNewActorFollow(baseParams, 'account', 'root', 'super root name', myUserName, 'presence')
966 })
967
968 it('Should notify when a remote account is following one of our channel', async function () {
969 this.timeout(10000)
970
971 await addUserSubscription(servers[1].url, servers[1].accessToken, 'user_1@localhost:' + servers[0].port)
972
973 await waitJobs(servers)
974
975 await checkNewActorFollow(baseParams, 'account', 'root', 'super root 2 name', myUserName, 'presence')
976 })
977 })
978
979 describe('Video-related notifications when video auto-blacklist is enabled', function () {
980 let userBaseParams: CheckerBaseParams
981 let adminBaseParamsServer1: CheckerBaseParams
982 let adminBaseParamsServer2: CheckerBaseParams
983 let videoUUID: string
984 let videoName: string
985 let currentCustomConfig: CustomConfig
986
987 before(async () => {
988
989 adminBaseParamsServer1 = {
990 server: servers[0],
991 emails,
992 socketNotifications: adminNotifications,
993 token: servers[0].accessToken
994 }
995
996 adminBaseParamsServer2 = {
997 server: servers[1],
998 emails,
999 socketNotifications: adminNotificationsServer2,
1000 token: servers[1].accessToken
1001 }
1002
1003 userBaseParams = {
1004 server: servers[0],
1005 emails,
1006 socketNotifications: userNotifications,
1007 token: userAccessToken
1008 }
1009
1010 const resCustomConfig = await getCustomConfig(servers[0].url, servers[0].accessToken)
1011 currentCustomConfig = resCustomConfig.body
1012 const autoBlacklistTestsCustomConfig = immutableAssign(currentCustomConfig, {
1013 autoBlacklist: {
1014 videos: {
1015 ofUsers: {
1016 enabled: true
1017 }
1018 }
1019 }
1020 })
1021 // enable transcoding otherwise own publish notification after transcoding not expected
1022 autoBlacklistTestsCustomConfig.transcoding.enabled = true
1023 await updateCustomConfig(servers[0].url, servers[0].accessToken, autoBlacklistTestsCustomConfig)
1024
1025 await addUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
1026 await addUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
1027
1028 })
1029
1030 it('Should send notification to moderators on new video with auto-blacklist', async function () {
1031 this.timeout(20000)
1032
1033 videoName = 'video with auto-blacklist ' + uuidv4()
1034 const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: videoName })
1035 videoUUID = resVideo.body.video.uuid
1036
1037 await waitJobs(servers)
1038 await checkVideoAutoBlacklistForModerators(adminBaseParamsServer1, videoUUID, videoName, 'presence')
1039 })
1040
1041 it('Should not send video publish notification if auto-blacklisted', async function () {
1042 await checkVideoIsPublished(userBaseParams, videoName, videoUUID, 'absence')
1043 })
1044
1045 it('Should not send a local user subscription notification if auto-blacklisted', async function () {
1046 await checkNewVideoFromSubscription(adminBaseParamsServer1, videoName, videoUUID, 'absence')
1047 })
1048
1049 it('Should not send a remote user subscription notification if auto-blacklisted', async function () {
1050 await checkNewVideoFromSubscription(adminBaseParamsServer2, videoName, videoUUID, 'absence')
1051 })
1052
1053 it('Should send video published and unblacklist after video unblacklisted', async function () {
1054 this.timeout(20000)
1055
1056 await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, videoUUID)
1057
1058 await waitJobs(servers)
1059
1060 // FIXME: Can't test as two notifications sent to same user and util only checks last one
1061 // One notification might be better anyways
1062 // await checkNewBlacklistOnMyVideo(userBaseParams, videoUUID, videoName, 'unblacklist')
1063 // await checkVideoIsPublished(userBaseParams, videoName, videoUUID, 'presence')
1064 })
1065
1066 it('Should send a local user subscription notification after removed from blacklist', async function () {
1067 await checkNewVideoFromSubscription(adminBaseParamsServer1, videoName, videoUUID, 'presence')
1068 })
1069
1070 it('Should send a remote user subscription notification after removed from blacklist', async function () {
1071 await checkNewVideoFromSubscription(adminBaseParamsServer2, videoName, videoUUID, 'presence')
1072 })
1073
1074 it('Should send unblacklist but not published/subscription notes after unblacklisted if scheduled update pending', async function () {
1075 this.timeout(20000)
1076
1077 let updateAt = new Date(new Date().getTime() + 100000)
1078
1079 const name = 'video with auto-blacklist and future schedule ' + uuidv4()
1080
1081 const data = {
1082 name,
1083 privacy: VideoPrivacy.PRIVATE,
1084 scheduleUpdate: {
1085 updateAt: updateAt.toISOString(),
1086 privacy: VideoPrivacy.PUBLIC
1087 }
1088 }
1089
1090 const resVideo = await uploadVideo(servers[0].url, userAccessToken, data)
1091 const uuid = resVideo.body.video.uuid
1092
1093 await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, uuid)
1094
1095 await waitJobs(servers)
1096 await checkNewBlacklistOnMyVideo(userBaseParams, uuid, name, 'unblacklist')
1097
1098 // FIXME: Can't test absence as two notifications sent to same user and util only checks last one
1099 // One notification might be better anyways
1100 // await checkVideoIsPublished(userBaseParams, name, uuid, 'absence')
1101
1102 await checkNewVideoFromSubscription(adminBaseParamsServer1, name, uuid, 'absence')
1103 await checkNewVideoFromSubscription(adminBaseParamsServer2, name, uuid, 'absence')
1104 })
1105
1106 it('Should not send publish/subscription notifications after scheduled update if video still auto-blacklisted', async function () {
1107 this.timeout(20000)
1108
1109 // In 2 seconds
1110 let updateAt = new Date(new Date().getTime() + 2000)
1111
1112 const name = 'video with schedule done and still auto-blacklisted ' + uuidv4()
1113
1114 const data = {
1115 name,
1116 privacy: VideoPrivacy.PRIVATE,
1117 scheduleUpdate: {
1118 updateAt: updateAt.toISOString(),
1119 privacy: VideoPrivacy.PUBLIC
1120 }
1121 }
1122
1123 const resVideo = await uploadVideo(servers[0].url, userAccessToken, data)
1124 const uuid = resVideo.body.video.uuid
1125
1126 await wait(6000)
1127 await checkVideoIsPublished(userBaseParams, name, uuid, 'absence')
1128 await checkNewVideoFromSubscription(adminBaseParamsServer1, name, uuid, 'absence')
1129 await checkNewVideoFromSubscription(adminBaseParamsServer2, name, uuid, 'absence')
1130 })
1131
1132 it('Should not send a notification to moderators on new video without auto-blacklist', async function () {
1133 this.timeout(20000)
1134
1135 const name = 'video without auto-blacklist ' + uuidv4()
1136
1137 // admin with blacklist right will not be auto-blacklisted
1138 const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name })
1139 const uuid = resVideo.body.video.uuid
1140
1141 await waitJobs(servers)
1142 await checkVideoAutoBlacklistForModerators(adminBaseParamsServer1, uuid, name, 'absence')
1143 })
1144
1145 after(async () => {
1146 await updateCustomConfig(servers[0].url, servers[0].accessToken, currentCustomConfig)
1147
1148 await removeUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
1149 await removeUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
1150 })
1151 })
1152
1153 describe('Mark as read', function () {
1154 it('Should mark as read some notifications', async function () {
1155 const res = await getUserNotifications(servers[ 0 ].url, userAccessToken, 2, 3)
1156 const ids = res.body.data.map(n => n.id)
1157
1158 await markAsReadNotifications(servers[ 0 ].url, userAccessToken, ids)
1159 })
1160
1161 it('Should have the notifications marked as read', async function () {
1162 const res = await getUserNotifications(servers[ 0 ].url, userAccessToken, 0, 10)
1163
1164 const notifications = res.body.data as UserNotification[]
1165 expect(notifications[ 0 ].read).to.be.false
1166 expect(notifications[ 1 ].read).to.be.false
1167 expect(notifications[ 2 ].read).to.be.true
1168 expect(notifications[ 3 ].read).to.be.true
1169 expect(notifications[ 4 ].read).to.be.true
1170 expect(notifications[ 5 ].read).to.be.false
1171 })
1172
1173 it('Should only list read notifications', async function () {
1174 const res = await getUserNotifications(servers[ 0 ].url, userAccessToken, 0, 10, false)
1175
1176 const notifications = res.body.data as UserNotification[]
1177 for (const notification of notifications) {
1178 expect(notification.read).to.be.true
1179 }
1180 })
1181
1182 it('Should only list unread notifications', async function () {
1183 const res = await getUserNotifications(servers[ 0 ].url, userAccessToken, 0, 10, true)
1184
1185 const notifications = res.body.data as UserNotification[]
1186 for (const notification of notifications) {
1187 expect(notification.read).to.be.false
1188 }
1189 })
1190
1191 it('Should mark as read all notifications', async function () {
1192 await markAsReadAllNotifications(servers[ 0 ].url, userAccessToken)
1193
1194 const res = await getUserNotifications(servers[ 0 ].url, userAccessToken, 0, 10, true)
1195
1196 expect(res.body.total).to.equal(0)
1197 expect(res.body.data).to.have.lengthOf(0)
1198 })
1199 })
1200
1201 describe('Notification settings', function () {
1202 let baseParams: CheckerBaseParams
1203
1204 before(() => {
1205 baseParams = {
1206 server: servers[0],
1207 emails,
1208 socketNotifications: userNotifications,
1209 token: userAccessToken
1210 }
1211 })
1212
1213 it('Should not have notifications', async function () {
1214 this.timeout(20000)
1215
1216 await updateMyNotificationSettings(servers[0].url, userAccessToken, immutableAssign(allNotificationSettings, {
1217 newVideoFromSubscription: UserNotificationSettingValue.NONE
1218 }))
1219
1220 {
1221 const res = await getMyUserInformation(servers[0].url, userAccessToken)
1222 const info = res.body as User
1223 expect(info.notificationSettings.newVideoFromSubscription).to.equal(UserNotificationSettingValue.NONE)
1224 }
1225
1226 const { name, uuid } = await uploadVideoByLocalAccount(servers)
1227
1228 const check = { web: true, mail: true }
1229 await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'absence')
1230 })
1231
1232 it('Should only have web notifications', async function () {
1233 this.timeout(20000)
1234
1235 await updateMyNotificationSettings(servers[0].url, userAccessToken, immutableAssign(allNotificationSettings, {
1236 newVideoFromSubscription: UserNotificationSettingValue.WEB
1237 }))
1238
1239 {
1240 const res = await getMyUserInformation(servers[0].url, userAccessToken)
1241 const info = res.body as User
1242 expect(info.notificationSettings.newVideoFromSubscription).to.equal(UserNotificationSettingValue.WEB)
1243 }
1244
1245 const { name, uuid } = await uploadVideoByLocalAccount(servers)
1246
1247 {
1248 const check = { mail: true, web: false }
1249 await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'absence')
1250 }
1251
1252 {
1253 const check = { mail: false, web: true }
1254 await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'presence')
1255 }
1256 })
1257
1258 it('Should only have mail notifications', async function () {
1259 this.timeout(20000)
1260
1261 await updateMyNotificationSettings(servers[0].url, userAccessToken, immutableAssign(allNotificationSettings, {
1262 newVideoFromSubscription: UserNotificationSettingValue.EMAIL
1263 }))
1264
1265 {
1266 const res = await getMyUserInformation(servers[0].url, userAccessToken)
1267 const info = res.body as User
1268 expect(info.notificationSettings.newVideoFromSubscription).to.equal(UserNotificationSettingValue.EMAIL)
1269 }
1270
1271 const { name, uuid } = await uploadVideoByLocalAccount(servers)
1272
1273 {
1274 const check = { mail: false, web: true }
1275 await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'absence')
1276 }
1277
1278 {
1279 const check = { mail: true, web: false }
1280 await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'presence')
1281 }
1282 })
1283
1284 it('Should have email and web notifications', async function () {
1285 this.timeout(20000)
1286
1287 await updateMyNotificationSettings(servers[0].url, userAccessToken, immutableAssign(allNotificationSettings, {
1288 newVideoFromSubscription: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL
1289 }))
1290
1291 {
1292 const res = await getMyUserInformation(servers[0].url, userAccessToken)
1293 const info = res.body as User
1294 expect(info.notificationSettings.newVideoFromSubscription).to.equal(
1295 UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL
1296 )
1297 }
1298
1299 const { name, uuid } = await uploadVideoByLocalAccount(servers)
1300
1301 await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence')
1302 })
1303 })
1304
1305 after(async function () {
1306 MockSmtpServer.Instance.kill()
1307
1308 await cleanupTests(servers)
1309 })
1310 })