From 268eebed921ac13a9ce0f4717f4923aa24190657 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 10 Aug 2018 16:54:01 +0200 Subject: Add state and moderationComment for abuses on server side --- server/tests/api/check-params/video-abuses.ts | 115 ++++++++++++++++++++++---- server/tests/api/videos/video-abuse.ts | 50 +++++++++-- server/tests/utils/videos/video-abuses.ts | 38 ++++++++- 3 files changed, 177 insertions(+), 26 deletions(-) (limited to 'server/tests') diff --git a/server/tests/api/check-params/video-abuses.ts b/server/tests/api/check-params/video-abuses.ts index 68b965bbe..d2bed6a2a 100644 --- a/server/tests/api/check-params/video-abuses.ts +++ b/server/tests/api/check-params/video-abuses.ts @@ -3,14 +3,26 @@ import 'mocha' import { - createUser, flushTests, killallServers, makeGetRequest, makePostBodyRequest, runServer, ServerInfo, setAccessTokensToServers, - uploadVideo, userLogin + createUser, + deleteVideoAbuse, + flushTests, + killallServers, + makeGetRequest, + makePostBodyRequest, + runServer, + ServerInfo, + setAccessTokensToServers, + updateVideoAbuse, + uploadVideo, + userLogin } from '../../utils' import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '../../utils/requests/check-api-params' +import { VideoAbuseState } from '../../../../shared/models/videos' describe('Test video abuses API validators', function () { let server: ServerInfo let userAccessToken = '' + let videoAbuseId: number // --------------------------------------------------------------- @@ -67,44 +79,111 @@ describe('Test video abuses API validators', function () { describe('When reporting a video abuse', function () { const basePath = '/api/v1/videos/' + let path: string + + before(() => { + path = basePath + server.video.id + '/abuse' + }) it('Should fail with nothing', async function () { - const path = basePath + server.video.id + '/abuse' const fields = {} await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) }) it('Should fail with a wrong video', async function () { const wrongPath = '/api/v1/videos/blabla/abuse' - const fields = { - reason: 'my super reason' - } + const fields = { reason: 'my super reason' } + await makePostBodyRequest({ url: server.url, path: wrongPath, token: server.accessToken, fields }) }) it('Should fail with a non authenticated user', async function () { - const path = basePath + server.video.id + '/abuse' - const fields = { - reason: 'my super reason' - } + const fields = { reason: 'my super reason' } + await makePostBodyRequest({ url: server.url, path, token: 'hello', fields, statusCodeExpected: 401 }) }) it('Should fail with a reason too short', async function () { - const path = basePath + server.video.id + '/abuse' - const fields = { - reason: 'h' - } + const fields = { reason: 'h' } + await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) }) it('Should fail with a reason too big', async function () { - const path = basePath + server.video.id + '/abuse' - const fields = { - reason: 'super'.repeat(61) - } + const fields = { reason: 'super'.repeat(61) } + await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) }) + + it('Should succeed with the correct parameters', async function () { + const fields = { reason: 'super reason' } + + const res = await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields, statusCodeExpected: 200 }) + videoAbuseId = res.body.videoAbuse.id + }) + }) + + describe('When updating a video abuse', function () { + const basePath = '/api/v1/videos/' + let path: string + + before(() => { + path = basePath + server.video.id + '/abuse/' + videoAbuseId + }) + + it('Should fail with a non authenticated user', async function () { + await updateVideoAbuse(server.url, 'blabla', server.video.uuid, videoAbuseId, {}, 401) + }) + + it('Should fail with a non admin user', async function () { + await updateVideoAbuse(server.url, userAccessToken, server.video.uuid, videoAbuseId, {}, 403) + }) + + it('Should fail with a bad video id or bad video abuse id', async function () { + await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, 45, {}, 404) + await updateVideoAbuse(server.url, server.accessToken, 52, videoAbuseId, {}, 404) + }) + + it('Should fail with a bad state', async function () { + const body = { state: 5 } + await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId, body, 400) + }) + + it('Should fail with a bad moderation comment', async function () { + const body = { moderationComment: 'b'.repeat(305) } + await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId, body, 400) + }) + + it('Should succeed with the correct params', async function () { + const body = { state: VideoAbuseState.ACCEPTED } + await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId, body) + }) + }) + + describe('When deleting a video abuse', function () { + const basePath = '/api/v1/videos/' + let path: string + + before(() => { + path = basePath + server.video.id + '/abuse/' + videoAbuseId + }) + + it('Should fail with a non authenticated user', async function () { + await deleteVideoAbuse(server.url, 'blabla', server.video.uuid, videoAbuseId, 401) + }) + + it('Should fail with a non admin user', async function () { + await deleteVideoAbuse(server.url, userAccessToken, server.video.uuid, videoAbuseId, 403) + }) + + it('Should fail with a bad video id or bad video abuse id', async function () { + await deleteVideoAbuse(server.url, server.accessToken, server.video.uuid, 45, 404) + await deleteVideoAbuse(server.url, server.accessToken, 52, videoAbuseId, 404) + }) + + it('Should succeed with the correct params', async function () { + await deleteVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId) + }) }) after(async function () { diff --git a/server/tests/api/videos/video-abuse.ts b/server/tests/api/videos/video-abuse.ts index dde309b96..a17f3c8de 100644 --- a/server/tests/api/videos/video-abuse.ts +++ b/server/tests/api/videos/video-abuse.ts @@ -2,8 +2,9 @@ import * as chai from 'chai' import 'mocha' -import { VideoAbuse } from '../../../../shared/models/videos' +import { VideoAbuse, VideoAbuseState } from '../../../../shared/models/videos' import { + deleteVideoAbuse, flushAndRunMultipleServers, getVideoAbusesList, getVideosList, @@ -11,6 +12,7 @@ import { reportVideoAbuse, ServerInfo, setAccessTokensToServers, + updateVideoAbuse, uploadVideo } from '../../utils/index' import { doubleFollow } from '../../utils/server/follows' @@ -20,6 +22,7 @@ const expect = chai.expect describe('Test video abuses', function () { let servers: ServerInfo[] = [] + let abuseServer2: VideoAbuse before(async function () { this.timeout(50000) @@ -105,7 +108,7 @@ describe('Test video abuses', function () { await waitJobs(servers) }) - it('Should have 2 video abuse on server 1 and 1 on server 2', async function () { + it('Should have 2 video abuses on server 1 and 1 on server 2', async function () { const res1 = await getVideoAbusesList(servers[0].url, servers[0].accessToken) expect(res1.body.total).to.equal(2) expect(res1.body.data).to.be.an('array') @@ -116,22 +119,57 @@ describe('Test video abuses', function () { expect(abuse1.reporterAccount.name).to.equal('root') expect(abuse1.reporterAccount.host).to.equal('localhost:9001') expect(abuse1.video.id).to.equal(servers[0].video.id) + expect(abuse1.state.id).to.equal(VideoAbuseState.PENDING) + expect(abuse1.state.label).to.equal('Pending') + expect(abuse1.moderationComment).to.be.null const abuse2: VideoAbuse = res1.body.data[1] expect(abuse2.reason).to.equal('my super bad reason 2') expect(abuse2.reporterAccount.name).to.equal('root') expect(abuse2.reporterAccount.host).to.equal('localhost:9001') expect(abuse2.video.id).to.equal(servers[1].video.id) + expect(abuse2.state.id).to.equal(VideoAbuseState.PENDING) + expect(abuse2.state.label).to.equal('Pending') + expect(abuse2.moderationComment).to.be.null const res2 = await getVideoAbusesList(servers[1].url, servers[1].accessToken) expect(res2.body.total).to.equal(1) expect(res2.body.data).to.be.an('array') expect(res2.body.data.length).to.equal(1) - const abuse3: VideoAbuse = res2.body.data[0] - expect(abuse3.reason).to.equal('my super bad reason 2') - expect(abuse3.reporterAccount.name).to.equal('root') - expect(abuse3.reporterAccount.host).to.equal('localhost:9001') + abuseServer2 = res2.body.data[0] + expect(abuseServer2.reason).to.equal('my super bad reason 2') + expect(abuseServer2.reporterAccount.name).to.equal('root') + expect(abuseServer2.reporterAccount.host).to.equal('localhost:9001') + expect(abuseServer2.state.id).to.equal(VideoAbuseState.PENDING) + expect(abuseServer2.state.label).to.equal('Pending') + expect(abuseServer2.moderationComment).to.be.null + }) + + it('Should update the state of a video abuse', async function () { + const body = { state: VideoAbuseState.REJECTED } + await updateVideoAbuse(servers[1].url, servers[1].accessToken, abuseServer2.video.uuid, abuseServer2.id, body) + + const res = await getVideoAbusesList(servers[1].url, servers[1].accessToken) + expect(res.body.data[0].state.id).to.equal(VideoAbuseState.REJECTED) + }) + + it('Should add a moderation comment', async function () { + const body = { state: VideoAbuseState.ACCEPTED, moderationComment: 'It is valid' } + await updateVideoAbuse(servers[1].url, servers[1].accessToken, abuseServer2.video.uuid, abuseServer2.id, body) + + const res = await getVideoAbusesList(servers[1].url, servers[1].accessToken) + expect(res.body.data[0].state.id).to.equal(VideoAbuseState.ACCEPTED) + expect(res.body.data[0].moderationComment).to.equal('It is valid') + }) + + it('Should delete the video abuse', async function () { + await deleteVideoAbuse(servers[1].url, servers[1].accessToken, abuseServer2.video.uuid, abuseServer2.id) + + const res = await getVideoAbusesList(servers[1].url, servers[1].accessToken) + expect(res.body.total).to.equal(0) + expect(res.body.data).to.be.an('array') + expect(res.body.data.length).to.equal(0) }) after(async function () { diff --git a/server/tests/utils/videos/video-abuses.ts b/server/tests/utils/videos/video-abuses.ts index 0d72bf457..5f138d6b3 100644 --- a/server/tests/utils/videos/video-abuses.ts +++ b/server/tests/utils/videos/video-abuses.ts @@ -1,6 +1,8 @@ import * as request from 'supertest' +import { VideoAbuseUpdate } from '../../../../shared/models/videos/video-abuse-update.model' +import { makeDeleteRequest, makePutBodyRequest } from '..' -function reportVideoAbuse (url: string, token: string, videoId: number | string, reason: string, specialStatus = 204) { +function reportVideoAbuse (url: string, token: string, videoId: number | string, reason: string, specialStatus = 200) { const path = '/api/v1/videos/' + videoId + '/abuse' return request(url) @@ -23,9 +25,41 @@ function getVideoAbusesList (url: string, token: string) { .expect('Content-Type', /json/) } +function updateVideoAbuse ( + url: string, + token: string, + videoId: string | number, + videoAbuseId: number, + body: VideoAbuseUpdate, + statusCodeExpected = 204 +) { + const path = '/api/v1/videos/' + videoId + '/abuse/' + videoAbuseId + + return makePutBodyRequest({ + url, + token, + path, + fields: body, + statusCodeExpected + }) +} + +function deleteVideoAbuse (url: string, token: string, videoId: string | number, videoAbuseId: number, statusCodeExpected = 204) { + const path = '/api/v1/videos/' + videoId + '/abuse/' + videoAbuseId + + return makeDeleteRequest({ + url, + token, + path, + statusCodeExpected + }) +} + // --------------------------------------------------------------------------- export { reportVideoAbuse, - getVideoAbusesList + getVideoAbusesList, + updateVideoAbuse, + deleteVideoAbuse } -- cgit v1.2.3