From 590fb5069038e69898123bb795f789683216d837 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 3 Aug 2018 16:23:45 +0200 Subject: Add tests regarding video import --- server/tests/api/check-params/video-imports.ts | 39 +++++- server/tests/api/index-slow.ts | 2 + server/tests/api/videos/video-imports.ts | 161 +++++++++++++++++++++++++ 3 files changed, 197 insertions(+), 5 deletions(-) create mode 100644 server/tests/api/videos/video-imports.ts (limited to 'server/tests/api') diff --git a/server/tests/api/check-params/video-imports.ts b/server/tests/api/check-params/video-imports.ts index 7f58efb74..0ead34a47 100644 --- a/server/tests/api/check-params/video-imports.ts +++ b/server/tests/api/check-params/video-imports.ts @@ -16,9 +16,11 @@ import { runServer, ServerInfo, setAccessTokensToServers, + updateCustomSubConfig, userLogin } from '../../utils' import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '../../utils/requests/check-api-params' +import { getYoutubeVideoUrl } from '../../utils/videos/video-imports' describe('Test video imports API validator', function () { const path = '/api/v1/videos/imports' @@ -77,7 +79,7 @@ describe('Test video imports API validator', function () { before(function () { baseCorrectParams = { - targetUrl: 'https://youtu.be/msX3jv1XdvM', + targetUrl: getYoutubeVideoUrl(), name: 'my super name', category: 5, licence: 1, @@ -98,6 +100,17 @@ describe('Test video imports API validator', function () { await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) }) + it('Should fail without a target url', async function () { + const fields = omit(baseCorrectParams, 'targetUrl') + await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields, statusCodeExpected: 400 }) + }) + + it('Should fail with a bad target url', async function () { + const fields = immutableAssign(baseCorrectParams, { targetUrl: 'htt://hello' }) + + await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) + }) + it('Should fail with a long name', async function () { const fields = immutableAssign(baseCorrectParams, { name: 'super'.repeat(65) }) @@ -219,20 +232,36 @@ describe('Test video imports API validator', function () { it('Should succeed with the correct parameters', async function () { this.timeout(10000) - const fields = baseCorrectParams - { await makePostBodyRequest({ url: server.url, path, token: server.accessToken, - fields, + fields: baseCorrectParams, statusCodeExpected: 200 }) } }) - it('Should forbid importing') + it('Should forbid to import videos', async function () { + await updateCustomSubConfig(server.url, server.accessToken, { + import: { + videos: { + http: { + enabled: false + } + } + } + }) + + await makePostBodyRequest({ + url: server.url, + path, + token: server.accessToken, + fields: baseCorrectParams, + statusCodeExpected: 409 + }) + }) }) after(async function () { diff --git a/server/tests/api/index-slow.ts b/server/tests/api/index-slow.ts index d987442b3..243c941cb 100644 --- a/server/tests/api/index-slow.ts +++ b/server/tests/api/index-slow.ts @@ -1,4 +1,5 @@ // Order of the tests we want to execute +import './videos/video-channels' import './videos/video-transcoder' import './videos/multiple-servers' import './server/follows' @@ -7,3 +8,4 @@ import './videos/video-comments' import './users/users-multiple-servers' import './server/handle-down' import './videos/video-schedule-update' +import './videos/video-imports' diff --git a/server/tests/api/videos/video-imports.ts b/server/tests/api/videos/video-imports.ts new file mode 100644 index 000000000..f21ade5c3 --- /dev/null +++ b/server/tests/api/videos/video-imports.ts @@ -0,0 +1,161 @@ +/* tslint:disable:no-unused-expression */ + +import * as chai from 'chai' +import 'mocha' +import { VideoDetails, VideoPrivacy } from '../../../../shared/models/videos' +import { + doubleFollow, + flushAndRunMultipleServers, + getMyUserInformation, + getMyVideos, + getVideo, + getVideosList, + killallServers, + ServerInfo, + setAccessTokensToServers +} from '../../utils' +import { waitJobs } from '../../utils/server/jobs' +import { getMyVideoImports, getYoutubeVideoUrl, importVideo } from '../../utils/videos/video-imports' + +const expect = chai.expect + +describe('Test video imports', function () { + let servers: ServerInfo[] = [] + let channelIdServer1: number + let channelIdServer2: number + + async function checkVideoServer1 (url: string, id: number | string) { + const res = await getVideo(url, id) + const video: VideoDetails = res.body + + expect(video.name).to.equal('small video - youtube') + expect(video.category.label).to.equal('News') + expect(video.licence.label).to.equal('Attribution') + expect(video.language.label).to.equal('Unknown') + expect(video.nsfw).to.be.false + expect(video.description).to.equal('this is a super description') + expect(video.tags).to.deep.equal([ 'tag1', 'tag2' ]) + + expect(video.files).to.have.lengthOf(1) + } + + async function checkVideoServer2 (url: string, id: number | string) { + const res = await getVideo(url, id) + const video = res.body + + expect(video.name).to.equal('my super name') + expect(video.category.label).to.equal('Entertainment') + expect(video.licence.label).to.equal('Public Domain Dedication') + expect(video.language.label).to.equal('English') + expect(video.nsfw).to.be.false + expect(video.description).to.equal('my super description') + expect(video.tags).to.deep.equal([ 'supertag1', 'supertag2' ]) + + expect(video.files).to.have.lengthOf(1) + } + + before(async function () { + this.timeout(30000) + + // Run servers + servers = await flushAndRunMultipleServers(2) + + await setAccessTokensToServers(servers) + + { + const res = await getMyUserInformation(servers[0].url, servers[0].accessToken) + channelIdServer1 = res.body.videoChannels[ 0 ].id + } + + { + const res = await getMyUserInformation(servers[1].url, servers[1].accessToken) + channelIdServer2 = res.body.videoChannels[ 0 ].id + } + + await doubleFollow(servers[0], servers[1]) + }) + + it('Should import a video on server 1', async function () { + this.timeout(60000) + + const attributes = { + targetUrl: getYoutubeVideoUrl(), + channelId: channelIdServer1, + privacy: VideoPrivacy.PUBLIC + } + const res = await importVideo(servers[0].url, servers[0].accessToken, attributes) + expect(res.body.video.name).to.equal('small video - youtube') + }) + + it('Should list the video to import in my videos on server 1', async function () { + const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5) + + expect(res.body.total).to.equal(1) + + const videos = res.body.data + expect(videos).to.have.lengthOf(1) + expect(videos[0].name).to.equal('small video - youtube') + }) + + it('Should list the video to import in my imports on server 1', async function () { + const res = await getMyVideoImports(servers[0].url, servers[0].accessToken) + + expect(res.body.total).to.equal(1) + const videoImports = res.body.data + expect(videoImports).to.have.lengthOf(1) + + expect(videoImports[0].targetUrl).to.equal(getYoutubeVideoUrl()) + expect(videoImports[0].video.name).to.equal('small video - youtube') + }) + + it('Should have the video listed on the two instances1', async function () { + this.timeout(120000) + + 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).to.have.lengthOf(1) + + await checkVideoServer1(server.url, res.body.data[0].uuid) + } + }) + + it('Should import a video on server 2 with some fields', async function () { + this.timeout(60000) + + const attributes = { + targetUrl: getYoutubeVideoUrl(), + channelId: channelIdServer1, + privacy: VideoPrivacy.PUBLIC, + category: 10, + licence: 7, + language: 'en', + name: 'my super name', + description: 'my super description', + tags: [ 'supertag1', 'supertag2' ] + } + const res = await importVideo(servers[1].url, servers[1].accessToken, attributes) + expect(res.body.video.name).to.equal('my super name') + }) + + it('Should have the video listed on the two instances', async function () { + this.timeout(120000) + + await waitJobs(servers) + + for (const server of servers) { + const res = await getVideosList(server.url) + expect(res.body.total).to.equal(2) + expect(res.body.data).to.have.lengthOf(2) + + await checkVideoServer2(server.url, res.body.data[0].uuid) + await checkVideoServer1(server.url, res.body.data[1].uuid) + } + }) + + after(async function () { + killallServers(servers) + }) +}) -- cgit v1.2.3