checkNewActorFollow,
checkNewVideoFromSubscription,
checkVideoIsPublished,
+ checkVideoStudioEditionIsFinished,
FIXTURE_URLS,
MockSmtpServer,
prepareNotificationsTest,
} from '@server/tests/shared'
import { wait } from '@shared/core-utils'
import { buildUUID } from '@shared/extra-utils'
-import { UserNotification, UserNotificationType, VideoPrivacy } from '@shared/models'
-import { cleanupTests, PeerTubeServer, waitJobs } from '@shared/server-commands'
+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 () {
})
})
+ 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' })
+ })
+ })
+
describe('My video is imported', function () {
let baseParams: CheckerBaseParams