From 2baea0c77cc765f7cbca9c9a2f4272268892a35c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 14 Jun 2018 18:06:56 +0200 Subject: Add ability for uploaders to schedule video update --- server/tests/api/videos/video-schedule-update.ts | 164 +++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 server/tests/api/videos/video-schedule-update.ts (limited to 'server/tests/api/videos') diff --git a/server/tests/api/videos/video-schedule-update.ts b/server/tests/api/videos/video-schedule-update.ts new file mode 100644 index 000000000..8b87ea855 --- /dev/null +++ b/server/tests/api/videos/video-schedule-update.ts @@ -0,0 +1,164 @@ +/* tslint:disable:no-unused-expression */ + +import * as chai from 'chai' +import 'mocha' +import { VideoPrivacy } from '../../../../shared/models/videos' +import { + doubleFollow, + flushAndRunMultipleServers, getMyVideos, + getVideosList, + killallServers, + ServerInfo, + setAccessTokensToServers, updateVideo, + uploadVideo, + wait +} from '../../utils' +import { join } from 'path' +import { waitJobs } from '../../utils/server/jobs' + +const expect = chai.expect + +function in10Seconds () { + const now = new Date() + now.setSeconds(now.getSeconds() + 10) + + return now +} + +describe('Test video update scheduler', function () { + let servers: ServerInfo[] = [] + let video2UUID: string + + before(async function () { + this.timeout(30000) + + // Run servers + servers = await flushAndRunMultipleServers(2) + + await setAccessTokensToServers(servers) + + await doubleFollow(servers[0], servers[1]) + }) + + it('Should upload a video and schedule an update in 10 seconds', async function () { + this.timeout(10000) + + const videoAttributes = { + name: 'video 1', + privacy: VideoPrivacy.PRIVATE, + scheduleUpdate: { + updateAt: in10Seconds().toISOString(), + privacy: VideoPrivacy.PUBLIC + } + } + + await uploadVideo(servers[0].url, servers[0].accessToken, videoAttributes) + + await waitJobs(servers) + }) + + it('Should not list the video (in privacy mode)', async function () { + for (const server of servers) { + const res = await getVideosList(server.url) + + expect(res.body.total).to.equal(0) + } + }) + + it('Should have my scheduled video in my account videos', async function () { + const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5) + expect(res.body.total).to.equal(1) + + const video = res.body.data[0] + expect(video.name).to.equal('video 1') + expect(video.privacy.id).to.equal(VideoPrivacy.PRIVATE) + expect(new Date(video.scheduledUpdate.updateAt)).to.be.above(new Date()) + expect(video.scheduledUpdate.privacy).to.equal(VideoPrivacy.PUBLIC) + }) + + it('Should wait some seconds and have the video in public privacy', async function () { + this.timeout(20000) + + await wait(10000) + await waitJobs(servers) + + for (const server of servers) { + const res = await getVideosList(server.url) + + expect(res.body.total).to.equal(1) + expect(res.body.data[0].name).to.equal('video 1') + } + }) + + it('Should upload a video without scheduling an update', async function () { + this.timeout(10000) + + const videoAttributes = { + name: 'video 2', + privacy: VideoPrivacy.PRIVATE + } + + const res = await uploadVideo(servers[0].url, servers[0].accessToken, videoAttributes) + video2UUID = res.body.video.uuid + + await waitJobs(servers) + }) + + it('Should update a video by scheduling an update', async function () { + this.timeout(10000) + + const videoAttributes = { + name: 'video 2 updated', + scheduleUpdate: { + updateAt: in10Seconds().toISOString(), + privacy: VideoPrivacy.PUBLIC + } + } + + await updateVideo(servers[0].url, servers[0].accessToken, video2UUID, videoAttributes) + await waitJobs(servers) + }) + + it('Should not display the updated video', async function () { + for (const server of servers) { + const res = await getVideosList(server.url) + + expect(res.body.total).to.equal(1) + } + }) + + it('Should have my scheduled updated video in my account videos', async function () { + const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5) + expect(res.body.total).to.equal(2) + + const video = res.body.data.find(v => v.uuid === video2UUID) + expect(video).not.to.be.undefined + + expect(video.name).to.equal('video 2 updated') + expect(video.privacy.id).to.equal(VideoPrivacy.PRIVATE) + + expect(new Date(video.scheduledUpdate.updateAt)).to.be.above(new Date()) + expect(video.scheduledUpdate.privacy).to.equal(VideoPrivacy.PUBLIC) + }) + + it('Should wait some seconds and have the updated video in public privacy', async function () { + this.timeout(20000) + + await wait(10000) + await waitJobs(servers) + + for (const server of servers) { + const res = await getVideosList(server.url) + + expect(res.body.total).to.equal(2) + + const video = res.body.data.find(v => v.uuid === video2UUID) + expect(video).not.to.be.undefined + expect(video.name).to.equal('video 2 updated') + } + }) + + after(async function () { + killallServers(servers) + }) +}) -- cgit v1.2.3