X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Fserver%2Ffollows.ts;h=a19b47509792d6fb359c0f3be3b6b816e28d44e2;hb=40e87e9ecc54e3513fb586928330a7855eb192c6;hp=f77c0c67c14d3853add86930594a05b9358646b4;hpb=c5d31dba56d669c0df0209761c43c5a6ac7cec4a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/server/follows.ts b/server/tests/api/server/follows.ts index f77c0c67c..a19b47509 100644 --- a/server/tests/api/server/follows.ts +++ b/server/tests/api/server/follows.ts @@ -2,21 +2,32 @@ import * as chai from 'chai' import 'mocha' +import { Video, VideoPrivacy } from '../../../../shared/models/videos' import { VideoComment, VideoCommentThreadTree } from '../../../../shared/models/videos/video-comment.model' - +import { completeVideoCheck } from '../../utils' import { - flushAndRunMultipleServers, flushTests, getVideosList, killallServers, ServerInfo, setAccessTokensToServers, uploadVideo, - wait + flushAndRunMultipleServers, + getVideosList, + killallServers, + ServerInfo, + setAccessTokensToServers, + uploadVideo } from '../../utils/index' -import { dateIsValid, webtorrentAdd } from '../../utils/miscs/miscs' +import { dateIsValid } from '../../utils/miscs/miscs' import { follow, getFollowersListPaginationAndSort, getFollowingListPaginationAndSort, unfollow } from '../../utils/server/follows' -import { getUserAccessToken } from '../../utils/users/login' +import { expectAccountFollows } from '../../utils/users/accounts' +import { userLogin } from '../../utils/users/login' import { createUser } from '../../utils/users/users' import { - addVideoCommentReply, addVideoCommentThread, getVideoCommentThreads, + addVideoCommentReply, + addVideoCommentThread, + getVideoCommentThreads, getVideoThreadComments } from '../../utils/videos/video-comments' -import { getVideo, rateVideo, testVideoImage } from '../../utils/videos/videos' +import { rateVideo } from '../../utils/videos/videos' +import { waitJobs } from '../../utils/server/jobs' +import { createVideoCaption, listVideoCaptions, testCaptionFile } from '../../utils/videos/video-captions' +import { VideoCaption } from '../../../../shared/models/videos/video-caption.model' const expect = chai.expect @@ -24,7 +35,7 @@ describe('Test follows', function () { let servers: ServerInfo[] = [] before(async function () { - this.timeout(20000) + this.timeout(30000) servers = await flushAndRunMultipleServers(3) @@ -59,7 +70,7 @@ describe('Test follows', function () { await follow(servers[0].url, [ servers[1].url, servers[2].url ], servers[0].accessToken) - await wait(7000) + await waitJobs(servers) }) it('Should have 2 followings on server 1', async function () { @@ -114,12 +125,25 @@ describe('Test follows', function () { expect(follows.length).to.equal(0) }) + it('Should have the correct follows counts', async function () { + await expectAccountFollows(servers[0].url, 'peertube@localhost:9001', 0, 2) + await expectAccountFollows(servers[0].url, 'peertube@localhost:9002', 1, 0) + await expectAccountFollows(servers[0].url, 'peertube@localhost:9003', 1, 0) + + // Server 2 and 3 does not know server 1 follow another server (there was not a refresh) + await expectAccountFollows(servers[1].url, 'peertube@localhost:9001', 0, 1) + await expectAccountFollows(servers[1].url, 'peertube@localhost:9002', 1, 0) + + await expectAccountFollows(servers[2].url, 'peertube@localhost:9001', 0, 1) + await expectAccountFollows(servers[2].url, 'peertube@localhost:9003', 1, 0) + }) + it('Should unfollow server 3 on server 1', async function () { this.timeout(5000) await unfollow(servers[0].url, servers[0].accessToken, servers[2]) - await wait(3000) + await waitJobs(servers) }) it('Should not follow server 3 on server 1 anymore', async function () { @@ -142,13 +166,24 @@ describe('Test follows', function () { expect(follows.length).to.equal(0) }) - it('Should upload a video on server 2 ans 3 and propagate only the video of server 2', async function () { + it('Should have the correct follows counts 2', async function () { + await expectAccountFollows(servers[0].url, 'peertube@localhost:9001', 0, 1) + await expectAccountFollows(servers[0].url, 'peertube@localhost:9002', 1, 0) + + await expectAccountFollows(servers[1].url, 'peertube@localhost:9001', 0, 1) + await expectAccountFollows(servers[1].url, 'peertube@localhost:9002', 1, 0) + + await expectAccountFollows(servers[2].url, 'peertube@localhost:9001', 0, 0) + await expectAccountFollows(servers[2].url, 'peertube@localhost:9003', 0, 0) + }) + + it('Should upload a video on server 2 and 3 and propagate only the video of server 2', async function () { this.timeout(10000) await uploadVideo(servers[1].url, servers[1].accessToken, { name: 'server2' }) await uploadVideo(servers[2].url, servers[2].accessToken, { name: 'server3' }) - await wait(5000) + await waitJobs(servers) let res = await getVideosList(servers[0].url) expect(res.body.total).to.equal(1) @@ -163,111 +198,135 @@ describe('Test follows', function () { expect(res.body.data[0].name).to.equal('server3') }) - it('Should propagate previous uploaded videos on a new following', async function () { - this.timeout(20000) + describe('Should propagate data on a new following', async function () { + let video4: Video - const video4Attributes = { - name: 'server3-4', - category: 2, - nsfw: true, - licence: 6, - tags: [ 'tag1', 'tag2', 'tag3' ] - } - - await uploadVideo(servers[2].url, servers[2].accessToken, { name: 'server3-2' }) - await uploadVideo(servers[2].url, servers[2].accessToken, { name: 'server3-3' }) - await uploadVideo(servers[2].url, servers[2].accessToken, video4Attributes) - await uploadVideo(servers[2].url, servers[2].accessToken, { name: 'server3-5' }) - await uploadVideo(servers[2].url, servers[2].accessToken, { name: 'server3-6' }) + before(async function () { + this.timeout(20000) - { - const user = { username: 'captain', password: 'password' } - await createUser(servers[2].url, servers[2].accessToken, user.username, user.password) - const userAccessToken = await getUserAccessToken(servers[2], user) + const video4Attributes = { + name: 'server3-4', + category: 2, + nsfw: true, + licence: 6, + tags: [ 'tag1', 'tag2', 'tag3' ] + } - const resVideos = await getVideosList(servers[ 2 ].url) - const video4 = resVideos.body.data.find(v => v.name === 'server3-4') + await uploadVideo(servers[ 2 ].url, servers[ 2 ].accessToken, { name: 'server3-2' }) + await uploadVideo(servers[ 2 ].url, servers[ 2 ].accessToken, { name: 'server3-3' }) + await uploadVideo(servers[ 2 ].url, servers[ 2 ].accessToken, video4Attributes) + await uploadVideo(servers[ 2 ].url, servers[ 2 ].accessToken, { name: 'server3-5' }) + await uploadVideo(servers[ 2 ].url, servers[ 2 ].accessToken, { name: 'server3-6' }) { - await rateVideo(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, 'like') - await rateVideo(servers[ 2 ].url, userAccessToken, video4.id, 'dislike') + const user = { username: 'captain', password: 'password' } + await createUser(servers[ 2 ].url, servers[ 2 ].accessToken, user.username, user.password) + const userAccessToken = await userLogin(servers[ 2 ], user) + + const resVideos = await getVideosList(servers[ 2 ].url) + video4 = resVideos.body.data.find(v => v.name === 'server3-4') + + { + await rateVideo(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, 'like') + await rateVideo(servers[ 2 ].url, userAccessToken, video4.id, 'dislike') + } + + { + const text = 'my super first comment' + const res = await addVideoCommentThread(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, text) + const threadId = res.body.comment.id + + const text1 = 'my super answer to thread 1' + const childCommentRes = await addVideoCommentReply(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, threadId, text1) + const childCommentId = childCommentRes.body.comment.id + + const text2 = 'my super answer to answer of thread 1' + await addVideoCommentReply(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, childCommentId, text2) + + const text3 = 'my second answer to thread 1' + await addVideoCommentReply(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, threadId, text3) + } + + { + await createVideoCaption({ + url: servers[2].url, + accessToken: servers[2].accessToken, + language: 'ar', + videoId: video4.id, + fixture: 'subtitle-good2.vtt' + }) + } } - { - const text = 'my super first comment' - const res = await addVideoCommentThread(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, text) - const threadId = res.body.comment.id - - const text1 = 'my super answer to thread 1' - const childCommentRes = await addVideoCommentReply(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, threadId, text1) - const childCommentId = childCommentRes.body.comment.id - - const text2 = 'my super answer to answer of thread 1' - await addVideoCommentReply(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, childCommentId, text2) - - const text3 = 'my second answer to thread 1' - await addVideoCommentReply(servers[ 2 ].url, servers[ 2 ].accessToken, video4.id, threadId, text3) + await waitJobs(servers) + + // Server 1 follows server 3 + await follow(servers[ 0 ].url, [ servers[ 2 ].url ], servers[ 0 ].accessToken) + + await waitJobs(servers) + }) + + it('Should have the correct follows counts 3', async function () { + await expectAccountFollows(servers[0].url, 'peertube@localhost:9001', 0, 2) + await expectAccountFollows(servers[0].url, 'peertube@localhost:9002', 1, 0) + await expectAccountFollows(servers[0].url, 'peertube@localhost:9003', 1, 0) + + await expectAccountFollows(servers[1].url, 'peertube@localhost:9001', 0, 1) + await expectAccountFollows(servers[1].url, 'peertube@localhost:9002', 1, 0) + + await expectAccountFollows(servers[2].url, 'peertube@localhost:9001', 0, 2) + await expectAccountFollows(servers[2].url, 'peertube@localhost:9003', 1, 0) + }) + + it('Should have propagated videos', async function () { + const res = await getVideosList(servers[ 0 ].url) + expect(res.body.total).to.equal(7) + + const video2 = res.body.data.find(v => v.name === 'server3-2') + video4 = res.body.data.find(v => v.name === 'server3-4') + const video6 = res.body.data.find(v => v.name === 'server3-6') + + expect(video2).to.not.be.undefined + expect(video4).to.not.be.undefined + expect(video6).to.not.be.undefined + + const isLocal = false + const checkAttributes = { + name: 'server3-4', + category: 2, + licence: 6, + language: 'zh', + nsfw: true, + description: 'my super description', + support: 'my super support text', + account: { + name: 'root', + host: 'localhost:9003' + }, + isLocal, + commentsEnabled: true, + duration: 5, + tags: [ 'tag1', 'tag2', 'tag3' ], + privacy: VideoPrivacy.PUBLIC, + likes: 1, + dislikes: 1, + channel: { + name: 'Default root channel', + description: '', + isLocal + }, + fixture: 'video_short.webm', + files: [ + { + resolution: 720, + size: 218910 + } + ] } - } + await completeVideoCheck(servers[ 0 ].url, video4, checkAttributes) + }) - await wait(5000) - - // Server 1 follows server 3 - await follow(servers[0].url, [ servers[2].url ], servers[0].accessToken) - - await wait(7000) - - let res = await getVideosList(servers[0].url) - expect(res.body.total).to.equal(7) - - const video2 = res.body.data.find(v => v.name === 'server3-2') - const video4 = res.body.data.find(v => v.name === 'server3-4') - const video6 = res.body.data.find(v => v.name === 'server3-6') - - expect(video2).to.not.be.undefined - expect(video4).to.not.be.undefined - expect(video6).to.not.be.undefined - - const res2 = await getVideo(servers[0].url, video4.id) - const videoDetails = res2.body - - expect(videoDetails.name).to.equal('server3-4') - expect(videoDetails.category).to.equal(2) - expect(videoDetails.categoryLabel).to.equal('Films') - expect(videoDetails.licence).to.equal(6) - expect(videoDetails.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives') - expect(videoDetails.language).to.equal(3) - expect(videoDetails.languageLabel).to.equal('Mandarin') - expect(videoDetails.nsfw).to.be.ok - expect(videoDetails.description).to.equal('my super description') - expect(videoDetails.serverHost).to.equal('localhost:9003') - expect(videoDetails.accountName).to.equal('root') - expect(videoDetails.likes).to.equal(1) - expect(videoDetails.dislikes).to.equal(1) - expect(videoDetails.isLocal).to.be.false - expect(videoDetails.tags).to.deep.equal([ 'tag1', 'tag2', 'tag3' ]) - expect(dateIsValid(videoDetails.createdAt)).to.be.true - expect(dateIsValid(videoDetails.updatedAt)).to.be.true - expect(videoDetails.files).to.have.lengthOf(1) - - const file = videoDetails.files[0] - const magnetUri = file.magnetUri - expect(file.magnetUri).to.have.lengthOf.above(2) - expect(file.torrentUrl).to.equal(`${servers[2].url}/static/torrents/${videoDetails.uuid}-${file.resolution}.torrent`) - expect(file.fileUrl).to.equal(`${servers[2].url}/static/webseed/${videoDetails.uuid}-${file.resolution}.webm`) - expect(file.resolution).to.equal(720) - expect(file.resolutionLabel).to.equal('720p') - expect(file.size).to.equal(218910) - - const test = await testVideoImage(servers[2].url, 'video_short.webm', videoDetails.thumbnailPath) - expect(test).to.equal(true) - - const torrent = await webtorrentAdd(magnetUri) - expect(torrent.files).to.be.an('array') - expect(torrent.files.length).to.equal(1) - expect(torrent.files[0].path).to.exist.and.to.not.equal('') - - { + it('Should have propagated comments', async function () { const res1 = await getVideoCommentThreads(servers[0].url, video4.id, 0, 5) expect(res1.body.total).to.equal(1) @@ -304,15 +363,34 @@ describe('Test follows', function () { const secondChild = tree.children[1] expect(secondChild.comment.text).to.equal('my second answer to thread 1') expect(secondChild.children).to.have.lengthOf(0) - } + }) + + it('Should have propagated captions', async function () { + const res = await listVideoCaptions(servers[0].url, video4.id) + expect(res.body.total).to.equal(1) + expect(res.body.data).to.have.lengthOf(1) + + const caption1: VideoCaption = res.body.data[0] + expect(caption1.language.id).to.equal('ar') + expect(caption1.language.label).to.equal('Arabic') + expect(caption1.captionPath).to.equal('/static/video-captions/' + video4.uuid + '-ar.vtt') + await testCaptionFile(servers[0].url, caption1.captionPath, 'Subtitle good 2.') + }) + + it('Should unfollow server 3 on server 1 and does not list server 3 videos', async function () { + this.timeout(5000) + + await unfollow(servers[0].url, servers[0].accessToken, servers[2]) + + await waitJobs(servers) + + let res = await getVideosList(servers[ 0 ].url) + expect(res.body.total).to.equal(1) + }) + }) after(async function () { killallServers(servers) - - // Keep the logs if the test failed - if (this['ok']) { - await flushTests() - } }) })