From 80fdaf064562aff968f4c9cea1cf220bc12a70da Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 7 May 2020 14:58:24 +0200 Subject: Add moderation helpers to plugins --- server/tests/plugins/plugin-helpers.ts | 204 ++++++++++++++++++++++++++++----- 1 file changed, 174 insertions(+), 30 deletions(-) (limited to 'server/tests/plugins') diff --git a/server/tests/plugins/plugin-helpers.ts b/server/tests/plugins/plugin-helpers.ts index dfe8ebe55..0915603d0 100644 --- a/server/tests/plugins/plugin-helpers.ts +++ b/server/tests/plugins/plugin-helpers.ts @@ -1,66 +1,210 @@ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ import 'mocha' -import { cleanupTests, flushAndRunServer, ServerInfo, waitUntilLog } from '../../../shared/extra-utils/server/servers' import { checkVideoFilesWereRemoved, + doubleFollow, getPluginTestPath, getVideo, installPlugin, + makePostBodyRequest, setAccessTokensToServers, uploadVideoAndGetId, - viewVideo + viewVideo, + getVideosList, + waitJobs } from '../../../shared/extra-utils' +import { cleanupTests, flushAndRunMultipleServers, ServerInfo, waitUntilLog } from '../../../shared/extra-utils/server/servers' +import { expect } from 'chai' + +function postCommand (server: ServerInfo, command: string, bodyArg?: object) { + const body = { command } + if (bodyArg) Object.assign(body, bodyArg) + + return makePostBodyRequest({ + url: server.url, + path: '/plugins/test-four/router/commander', + fields: body, + statusCodeExpected: 204 + }) +} describe('Test plugin helpers', function () { - let server: ServerInfo + let servers: ServerInfo[] before(async function () { - this.timeout(30000) + this.timeout(60000) + + servers = await flushAndRunMultipleServers(2) + await setAccessTokensToServers(servers) - server = await flushAndRunServer(1) - await setAccessTokensToServers([ server ]) + await doubleFollow(servers[0], servers[1]) await installPlugin({ - url: server.url, - accessToken: server.accessToken, + url: servers[0].url, + accessToken: servers[0].accessToken, path: getPluginTestPath('-four') }) }) - it('Should have logged things', async function () { - await waitUntilLog(server, 'localhost:' + server.port + ' peertube-plugin-test-four', 1, false) - await waitUntilLog(server, 'Hello world from plugin four', 1) + describe('Logger', function () { + + it('Should have logged things', async function () { + await waitUntilLog(servers[0], 'localhost:' + servers[0].port + ' peertube-plugin-test-four', 1, false) + await waitUntilLog(servers[0], 'Hello world from plugin four', 1) + }) }) - it('Should have made a query', async function () { - await waitUntilLog(server, `root email is admin${server.internalServerNumber}@example.com`, 1) + describe('Database', function () { + + it('Should have made a query', async function () { + await waitUntilLog(servers[0], `root email is admin${servers[0].internalServerNumber}@example.com`) + }) + }) + + describe('Config', function () { + + it('Should have the correct webserver url', async function () { + await waitUntilLog(servers[0], `server url is http://localhost:${servers[0].port}`) + }) + }) + + describe('Server', function () { + + it('Should get the server actor', async function () { + await waitUntilLog(servers[0], 'server actor name is peertube') + }) + }) + + describe('Moderation', function () { + let videoUUIDServer1: string + + before(async function () { + this.timeout(15000) + + { + const res = await uploadVideoAndGetId({ server: servers[0], videoName: 'video server 1' }) + videoUUIDServer1 = res.uuid + } + + { + await uploadVideoAndGetId({ server: servers[1], videoName: 'video server 2' }) + } + + await waitJobs(servers) + + const res = await getVideosList(servers[0].url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(2) + }) + + it('Should mute server 2', async function () { + this.timeout(10000) + await postCommand(servers[0], 'blockServer', { hostToBlock: `localhost:${servers[1].port}` }) + + const res = await getVideosList(servers[0].url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(1) + expect(videos[0].name).to.equal('video server 1') + }) + + it('Should unmute server 2', async function () { + await postCommand(servers[0], 'unblockServer', { hostToUnblock: `localhost:${servers[1].port}` }) + + const res = await getVideosList(servers[0].url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(2) + }) + + it('Should mute account of server 2', async function () { + await postCommand(servers[0], 'blockAccount', { handleToBlock: `root@localhost:${servers[1].port}` }) + + const res = await getVideosList(servers[0].url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(1) + expect(videos[0].name).to.equal('video server 1') + }) + + it('Should unmute account of server 2', async function () { + await postCommand(servers[0], 'unblockAccount', { handleToUnblock: `root@localhost:${servers[1].port}` }) + + const res = await getVideosList(servers[0].url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(2) + }) + + it('Should blacklist video', async function () { + this.timeout(10000) + + await postCommand(servers[0], 'blacklist', { videoUUID: videoUUIDServer1, unfederate: true }) + + await waitJobs(servers) + + for (const server of servers) { + const res = await getVideosList(server.url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(1) + expect(videos[0].name).to.equal('video server 2') + } + }) + + it('Should unblacklist video', async function () { + this.timeout(10000) + + await postCommand(servers[0], 'unblacklist', { videoUUID: videoUUIDServer1 }) + + await waitJobs(servers) + + for (const server of servers) { + const res = await getVideosList(server.url) + const videos = res.body.data + + expect(videos).to.have.lengthOf(2) + } + }) }) - it('Should remove a video after a view', async function () { - this.timeout(20000) + describe('Videos', function () { + let videoUUID: string + + before(async () => { + const res = await uploadVideoAndGetId({ server: servers[0], videoName: 'video1' }) + videoUUID = res.uuid + }) - const videoUUID = (await uploadVideoAndGetId({ server: server, videoName: 'video1' })).uuid + it('Should remove a video after a view', async function () { + this.timeout(20000) - // Should not throw -> video exists - await getVideo(server.url, videoUUID) - // Should delete the video - await viewVideo(server.url, videoUUID) + // Should not throw -> video exists + await getVideo(servers[0].url, videoUUID) + // Should delete the video + await viewVideo(servers[0].url, videoUUID) - await waitUntilLog(server, 'Video deleted by plugin four.', 1) + await waitUntilLog(servers[0], 'Video deleted by plugin four.') - try { - // Should throw because the video should have been deleted - await getVideo(server.url, videoUUID) - throw new Error('Video exists') - } catch (err) { - if (err.message.includes('exists')) throw err - } + try { + // Should throw because the video should have been deleted + await getVideo(servers[0].url, videoUUID) + throw new Error('Video exists') + } catch (err) { + if (err.message.includes('exists')) throw err + } - await checkVideoFilesWereRemoved(videoUUID, server.internalServerNumber) + await checkVideoFilesWereRemoved(videoUUID, servers[0].internalServerNumber) + }) + + it('Should have fetched the video by URL', async function () { + await waitUntilLog(servers[0], `video from DB uuid is ${videoUUID}`) + }) }) after(async function () { - await cleanupTests([ server ]) + await cleanupTests(servers) }) }) -- cgit v1.2.3