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