X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Fnotifications%2Fuser-notifications.ts;h=a11289236934ac0512e7290e2c0a161f89bb719c;hb=714e33a7428b71ef98129ce85a4bd64140bcd912;hp=b7c22d11890b0ae8545417a8446263d9baaf54f9;hpb=254d3579f5338f5fd775c17d15cdfc37078bcfb4;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/notifications/user-notifications.ts b/server/tests/api/notifications/user-notifications.ts index b7c22d118..a11289236 100644 --- a/server/tests/api/notifications/user-notifications.ts +++ b/server/tests/api/notifications/user-notifications.ts @@ -2,33 +2,34 @@ import 'mocha' import * as chai from 'chai' -import { buildUUID } from '@server/helpers/uuid' import { CheckerBaseParams, checkMyVideoImportIsFinished, checkNewActorFollow, checkNewVideoFromSubscription, checkVideoIsPublished, - cleanupTests, - ImportsCommand, + checkVideoStudioEditionIsFinished, + FIXTURE_URLS, MockSmtpServer, prepareNotificationsTest, - PeerTubeServer, - uploadRandomVideoOnServers, - wait, - waitJobs -} from '@shared/extra-utils' -import { UserNotification, UserNotificationType, VideoPrivacy } from '@shared/models' + uploadRandomVideoOnServers +} from '@server/tests/shared' +import { wait } from '@shared/core-utils' +import { buildUUID } from '@shared/extra-utils' +import { UserNotification, UserNotificationType, VideoPrivacy, VideoStudioTask } from '@shared/models' +import { cleanupTests, findExternalSavedVideo, PeerTubeServer, stopFfmpeg, waitJobs } from '@shared/server-commands' const expect = chai.expect describe('Test user notifications', function () { let servers: PeerTubeServer[] = [] let userAccessToken: string + let userNotifications: UserNotification[] = [] let adminNotifications: UserNotification[] = [] let adminNotificationsServer2: UserNotification[] = [] let emails: object[] = [] + let channelId: number before(async function () { @@ -61,7 +62,7 @@ describe('Test user notifications', function () { await uploadRandomVideoOnServers(servers, 1) - const notification = await servers[0].notifications.getLastest({ token: userAccessToken }) + const notification = await servers[0].notifications.getLatest({ token: userAccessToken }) expect(notification).to.be.undefined expect(emails).to.have.lengthOf(0) @@ -74,8 +75,8 @@ describe('Test user notifications', function () { await servers[0].subscriptions.add({ token: userAccessToken, targetUri: 'root_channel@localhost:' + servers[0].port }) await waitJobs(servers) - const { name, uuid } = await uploadRandomVideoOnServers(servers, 1) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 1) + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should send a new video notification from a remote account', async function () { @@ -84,8 +85,8 @@ describe('Test user notifications', function () { await servers[0].subscriptions.add({ token: userAccessToken, targetUri: 'root_channel@localhost:' + servers[1].port }) await waitJobs(servers) - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 2) + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should send a new video notification on a scheduled publication', async function () { @@ -101,10 +102,10 @@ describe('Test user notifications', function () { privacy: VideoPrivacy.PUBLIC as VideoPrivacy.PUBLIC } } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 1, data) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 1, data) await wait(6000) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should send a new video notification on a remote scheduled publication', async function () { @@ -120,15 +121,15 @@ describe('Test user notifications', function () { privacy: VideoPrivacy.PUBLIC as VideoPrivacy.PUBLIC } } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, data) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 2, data) await waitJobs(servers) await wait(6000) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should not send a notification before the video is published', async function () { - this.timeout(50000) + this.timeout(150000) const updateAt = new Date(new Date().getTime() + 1000000) @@ -139,61 +140,61 @@ describe('Test user notifications', function () { privacy: VideoPrivacy.PUBLIC as VideoPrivacy.PUBLIC } } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 1, data) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 1, data) await wait(6000) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) }) it('Should send a new video notification when a video becomes public', async function () { this.timeout(50000) const data = { privacy: VideoPrivacy.PRIVATE } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 1, data) + const { name, uuid, shortUUID } = await uploadRandomVideoOnServers(servers, 1, data) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) await servers[0].videos.update({ id: uuid, attributes: { privacy: VideoPrivacy.PUBLIC } }) await waitJobs(servers) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should send a new video notification when a remote video becomes public', async function () { this.timeout(50000) const data = { privacy: VideoPrivacy.PRIVATE } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, data) + const { name, uuid, shortUUID } = await uploadRandomVideoOnServers(servers, 2, data) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) await servers[1].videos.update({ id: uuid, attributes: { privacy: VideoPrivacy.PUBLIC } }) await waitJobs(servers) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should not send a new video notification when a video becomes unlisted', async function () { this.timeout(50000) const data = { privacy: VideoPrivacy.PRIVATE } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 1, data) + const { name, uuid, shortUUID } = await uploadRandomVideoOnServers(servers, 1, data) await servers[0].videos.update({ id: uuid, attributes: { privacy: VideoPrivacy.UNLISTED } }) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) }) it('Should not send a new video notification when a remote video becomes unlisted', async function () { - this.timeout(50000) + this.timeout(100000) const data = { privacy: VideoPrivacy.PRIVATE } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, data) + const { name, uuid, shortUUID } = await uploadRandomVideoOnServers(servers, 2, data) await servers[1].videos.update({ id: uuid, attributes: { privacy: VideoPrivacy.UNLISTED } }) await waitJobs(servers) - await checkNewVideoFromSubscription(baseParams, name, uuid, 'absence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) }) it('Should send a new video notification after a video import', async function () { @@ -205,13 +206,13 @@ describe('Test user notifications', function () { name, channelId, privacy: VideoPrivacy.PUBLIC, - targetUrl: ImportsCommand.getGoodVideoUrl() + targetUrl: FIXTURE_URLS.goodVideo } const { video } = await servers[0].imports.importVideo({ attributes }) await waitJobs(servers) - await checkNewVideoFromSubscription(baseParams, name, video.uuid, 'presence') + await checkNewVideoFromSubscription({ ...baseParams, videoName: name, shortUUID: video.shortUUID, checkType: 'presence' }) }) }) @@ -230,19 +231,19 @@ describe('Test user notifications', function () { it('Should not send a notification if transcoding is not enabled', async function () { this.timeout(50000) - const { name, uuid } = await uploadRandomVideoOnServers(servers, 1) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 1) await waitJobs(servers) - await checkVideoIsPublished(baseParams, name, uuid, 'absence') + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) }) it('Should not send a notification if the wait transcoding is false', async function () { - this.timeout(50000) + this.timeout(100_000) await uploadRandomVideoOnServers(servers, 2, { waitTranscoding: false }) await waitJobs(servers) - const notification = await servers[0].notifications.getLastest({ token: userAccessToken }) + const notification = await servers[0].notifications.getLatest({ token: userAccessToken }) if (notification) { expect(notification.type).to.not.equal(UserNotificationType.MY_VIDEO_PUBLISHED) } @@ -251,23 +252,23 @@ describe('Test user notifications', function () { it('Should send a notification even if the video is not transcoded in other resolutions', async function () { this.timeout(50000) - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, { waitTranscoding: true, fixture: 'video_short_240p.mp4' }) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 2, { waitTranscoding: true, fixture: 'video_short_240p.mp4' }) await waitJobs(servers) - await checkVideoIsPublished(baseParams, name, uuid, 'presence') + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should send a notification with a transcoded video', async function () { this.timeout(50000) - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, { waitTranscoding: true }) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 2, { waitTranscoding: true }) await waitJobs(servers) - await checkVideoIsPublished(baseParams, name, uuid, 'presence') + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should send a notification when an imported video is transcoded', async function () { - this.timeout(50000) + this.timeout(120000) const name = 'video import ' + buildUUID() @@ -275,13 +276,13 @@ describe('Test user notifications', function () { name, channelId, privacy: VideoPrivacy.PUBLIC, - targetUrl: ImportsCommand.getGoodVideoUrl(), + targetUrl: FIXTURE_URLS.goodVideo, waitTranscoding: true } const { video } = await servers[1].imports.importVideo({ attributes }) await waitJobs(servers) - await checkVideoIsPublished(baseParams, name, video.uuid, 'presence') + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID: video.shortUUID, checkType: 'presence' }) }) it('Should send a notification when the scheduled update has been proceeded', async function () { @@ -297,10 +298,10 @@ describe('Test user notifications', function () { privacy: VideoPrivacy.PUBLIC as VideoPrivacy.PUBLIC } } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, data) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 2, data) await wait(6000) - await checkVideoIsPublished(baseParams, name, uuid, 'presence') + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) it('Should not send a notification before the video is published', async function () { @@ -315,10 +316,116 @@ describe('Test user notifications', function () { privacy: VideoPrivacy.PUBLIC as VideoPrivacy.PUBLIC } } - const { name, uuid } = await uploadRandomVideoOnServers(servers, 2, data) + const { name, shortUUID } = await uploadRandomVideoOnServers(servers, 2, data) await wait(6000) - await checkVideoIsPublished(baseParams, name, uuid, 'absence') + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID, checkType: 'absence' }) + }) + }) + + describe('My live replay is published', function () { + + let baseParams: CheckerBaseParams + + before(() => { + baseParams = { + server: servers[1], + emails, + socketNotifications: adminNotificationsServer2, + token: servers[1].accessToken + } + }) + + it('Should send a notification is a live replay of a non permanent live is published', async function () { + this.timeout(120000) + + const { shortUUID } = await servers[1].live.create({ + fields: { + name: 'non permanent live', + privacy: VideoPrivacy.PUBLIC, + channelId: servers[1].store.channel.id, + saveReplay: true, + permanentLive: false + } + }) + + const ffmpegCommand = await servers[1].live.sendRTMPStreamInVideo({ videoId: shortUUID }) + + await waitJobs(servers) + await servers[1].live.waitUntilPublished({ videoId: shortUUID }) + + await stopFfmpeg(ffmpegCommand) + await servers[1].live.waitUntilReplacedByReplay({ videoId: shortUUID }) + + await waitJobs(servers) + await checkVideoIsPublished({ ...baseParams, videoName: 'non permanent live', shortUUID, checkType: 'presence' }) + }) + + it('Should send a notification is a live replay of a permanent live is published', async function () { + this.timeout(120000) + + const { shortUUID } = await servers[1].live.create({ + fields: { + name: 'permanent live', + privacy: VideoPrivacy.PUBLIC, + channelId: servers[1].store.channel.id, + saveReplay: true, + permanentLive: true + } + }) + + const ffmpegCommand = await servers[1].live.sendRTMPStreamInVideo({ videoId: shortUUID }) + + await waitJobs(servers) + await servers[1].live.waitUntilPublished({ videoId: shortUUID }) + + const liveDetails = await servers[1].videos.get({ id: shortUUID }) + + await stopFfmpeg(ffmpegCommand) + + await servers[1].live.waitUntilWaiting({ videoId: shortUUID }) + await waitJobs(servers) + + const video = await findExternalSavedVideo(servers[1], liveDetails) + expect(video).to.exist + + await checkVideoIsPublished({ ...baseParams, videoName: video.name, shortUUID: video.shortUUID, checkType: 'presence' }) + }) + }) + + describe('Video studio', function () { + let baseParams: CheckerBaseParams + + before(() => { + baseParams = { + server: servers[1], + emails, + socketNotifications: adminNotificationsServer2, + token: servers[1].accessToken + } + }) + + it('Should send a notification after studio edition', async function () { + this.timeout(240000) + + const { name, shortUUID, id } = await uploadRandomVideoOnServers(servers, 2, { waitTranscoding: true }) + + await waitJobs(servers) + await checkVideoIsPublished({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) + + const tasks: VideoStudioTask[] = [ + { + name: 'cut', + options: { + start: 0, + end: 1 + } + } + ] + await servers[1].videoStudio.createEditionTasks({ videoId: id, tasks }) + await waitJobs(servers) + + await checkVideoStudioEditionIsFinished({ ...baseParams, videoName: name, shortUUID, checkType: 'presence' }) }) }) @@ -343,12 +450,14 @@ describe('Test user notifications', function () { name, channelId, privacy: VideoPrivacy.PRIVATE, - targetUrl: ImportsCommand.getBadVideoUrl() + targetUrl: FIXTURE_URLS.badVideo } - const { video } = await servers[0].imports.importVideo({ attributes }) + const { video: { shortUUID } } = await servers[0].imports.importVideo({ attributes }) await waitJobs(servers) - await checkMyVideoImportIsFinished(baseParams, name, video.uuid, ImportsCommand.getBadVideoUrl(), false, 'presence') + + const url = FIXTURE_URLS.badVideo + await checkMyVideoImportIsFinished({ ...baseParams, videoName: name, shortUUID, url, success: false, checkType: 'presence' }) }) it('Should send a notification when the video import succeeded', async function () { @@ -360,12 +469,14 @@ describe('Test user notifications', function () { name, channelId, privacy: VideoPrivacy.PRIVATE, - targetUrl: ImportsCommand.getGoodVideoUrl() + targetUrl: FIXTURE_URLS.goodVideo } - const { video } = await servers[0].imports.importVideo({ attributes }) + const { video: { shortUUID } } = await servers[0].imports.importVideo({ attributes }) await waitJobs(servers) - await checkMyVideoImportIsFinished(baseParams, name, video.uuid, ImportsCommand.getGoodVideoUrl(), true, 'presence') + + const url = FIXTURE_URLS.goodVideo + await checkMyVideoImportIsFinished({ ...baseParams, videoName: name, shortUUID, url, success: true, checkType: 'presence' }) }) }) @@ -404,7 +515,14 @@ describe('Test user notifications', function () { await servers[0].subscriptions.add({ targetUri: 'user_1_channel@localhost:' + servers[0].port }) await waitJobs(servers) - await checkNewActorFollow(baseParams, 'channel', 'root', 'super root name', myChannelName, 'presence') + await checkNewActorFollow({ + ...baseParams, + followType: 'channel', + followerName: 'root', + followerDisplayName: 'super root name', + followingDisplayName: myChannelName, + checkType: 'presence' + }) await servers[0].subscriptions.remove({ uri: 'user_1_channel@localhost:' + servers[0].port }) }) @@ -415,12 +533,19 @@ describe('Test user notifications', function () { await servers[1].subscriptions.add({ targetUri: 'user_1_channel@localhost:' + servers[0].port }) await waitJobs(servers) - await checkNewActorFollow(baseParams, 'channel', 'root', 'super root 2 name', myChannelName, 'presence') + await checkNewActorFollow({ + ...baseParams, + followType: 'channel', + followerName: 'root', + followerDisplayName: 'super root 2 name', + followingDisplayName: myChannelName, + checkType: 'presence' + }) await servers[1].subscriptions.remove({ uri: 'user_1_channel@localhost:' + servers[0].port }) }) - // PeerTube does not support accout -> account follows + // PeerTube does not support account -> account follows // it('Should notify when a local account is following one of our channel', async function () { // this.timeout(50000) //