123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
- import 'mocha'
- import {
- cleanupTests,
- createUser,
- doubleFollow,
- flushAndRunMultipleServers,
- getBlacklistedVideosList,
- getVideo,
- getVideoWithToken,
- makePostBodyRequest,
- makePutBodyRequest,
- removeVideoFromBlacklist,
- ServerInfo,
- setAccessTokensToServers,
- uploadVideo,
- userLogin,
- waitJobs
- } from '../../../../shared/extra-utils'
- import {
- checkBadCountPagination,
- checkBadSortPagination,
- checkBadStartPagination
- } from '../../../../shared/extra-utils/requests/check-api-params'
- import { VideoBlacklistType, VideoDetails } from '../../../../shared/models/videos'
- import { expect } from 'chai'
- import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
- describe('Test video blacklist API validators', function () {
- let servers: ServerInfo[]
- let notBlacklistedVideoId: number
- let remoteVideoUUID: string
- let userAccessToken1 = ''
- let userAccessToken2 = ''
- // ---------------------------------------------------------------
- before(async function () {
- this.timeout(120000)
- servers = await flushAndRunMultipleServers(2)
- await setAccessTokensToServers(servers)
- await doubleFollow(servers[0], servers[1])
- {
- const username = 'user1'
- const password = 'my super password'
- await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, username: username, password: password })
- userAccessToken1 = await userLogin(servers[0], { username, password })
- }
- {
- const username = 'user2'
- const password = 'my super password'
- await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, username: username, password: password })
- userAccessToken2 = await userLogin(servers[0], { username, password })
- }
- {
- const res = await uploadVideo(servers[0].url, userAccessToken1, {})
- servers[0].video = res.body.video
- }
- {
- const res = await uploadVideo(servers[0].url, servers[0].accessToken, {})
- notBlacklistedVideoId = res.body.video.uuid
- }
- {
- const res = await uploadVideo(servers[1].url, servers[1].accessToken, {})
- remoteVideoUUID = res.body.video.uuid
- }
- await waitJobs(servers)
- })
- describe('When adding a video in blacklist', function () {
- const basePath = '/api/v1/videos/'
- it('Should fail with nothing', async function () {
- const path = basePath + servers[0].video + '/blacklist'
- const fields = {}
- await makePostBodyRequest({ url: servers[0].url, path, token: servers[0].accessToken, fields })
- })
- it('Should fail with a wrong video', async function () {
- const wrongPath = '/api/v1/videos/blabla/blacklist'
- const fields = {}
- await makePostBodyRequest({ url: servers[0].url, path: wrongPath, token: servers[0].accessToken, fields })
- })
- it('Should fail with a non authenticated user', async function () {
- const path = basePath + servers[0].video + '/blacklist'
- const fields = {}
- await makePostBodyRequest({ url: servers[0].url, path, token: 'hello', fields, statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401 })
- })
- it('Should fail with a non admin user', async function () {
- const path = basePath + servers[0].video + '/blacklist'
- const fields = {}
- await makePostBodyRequest({
- url: servers[0].url,
- path,
- token: userAccessToken2,
- fields,
- statusCodeExpected: HttpStatusCode.FORBIDDEN_403
- })
- })
- it('Should fail with an invalid reason', async function () {
- const path = basePath + servers[0].video.uuid + '/blacklist'
- const fields = { reason: 'a'.repeat(305) }
- await makePostBodyRequest({ url: servers[0].url, path, token: servers[0].accessToken, fields })
- })
- it('Should fail to unfederate a remote video', async function () {
- const path = basePath + remoteVideoUUID + '/blacklist'
- const fields = { unfederate: true }
- await makePostBodyRequest({
- url: servers[0].url,
- path,
- token: servers[0].accessToken,
- fields,
- statusCodeExpected: HttpStatusCode.CONFLICT_409
- })
- })
- it('Should succeed with the correct params', async function () {
- const path = basePath + servers[0].video.uuid + '/blacklist'
- const fields = {}
- await makePostBodyRequest({
- url: servers[0].url,
- path,
- token: servers[0].accessToken,
- fields,
- statusCodeExpected: HttpStatusCode.NO_CONTENT_204
- })
- })
- })
- describe('When updating a video in blacklist', function () {
- const basePath = '/api/v1/videos/'
- it('Should fail with a wrong video', async function () {
- const wrongPath = '/api/v1/videos/blabla/blacklist'
- const fields = {}
- await makePutBodyRequest({ url: servers[0].url, path: wrongPath, token: servers[0].accessToken, fields })
- })
- it('Should fail with a video not blacklisted', async function () {
- const path = '/api/v1/videos/' + notBlacklistedVideoId + '/blacklist'
- const fields = {}
- await makePutBodyRequest({
- url: servers[0].url,
- path,
- token: servers[0].accessToken,
- fields,
- statusCodeExpected: HttpStatusCode.NOT_FOUND_404
- })
- })
- it('Should fail with a non authenticated user', async function () {
- const path = basePath + servers[0].video + '/blacklist'
- const fields = {}
- await makePutBodyRequest({ url: servers[0].url, path, token: 'hello', fields, statusCodeExpected: HttpStatusCode.UNAUTHORIZED_401 })
- })
- it('Should fail with a non admin user', async function () {
- const path = basePath + servers[0].video + '/blacklist'
- const fields = {}
- await makePutBodyRequest({
- url: servers[0].url,
- path,
- token: userAccessToken2,
- fields,
- statusCodeExpected: HttpStatusCode.FORBIDDEN_403
- })
- })
- it('Should fail with an invalid reason', async function () {
- const path = basePath + servers[0].video.uuid + '/blacklist'
- const fields = { reason: 'a'.repeat(305) }
- await makePutBodyRequest({ url: servers[0].url, path, token: servers[0].accessToken, fields })
- })
- it('Should succeed with the correct params', async function () {
- const path = basePath + servers[0].video.uuid + '/blacklist'
- const fields = { reason: 'hello' }
- await makePutBodyRequest({
- url: servers[0].url,
- path,
- token: servers[0].accessToken,
- fields,
- statusCodeExpected: HttpStatusCode.NO_CONTENT_204
- })
- })
- })
- describe('When getting blacklisted video', function () {
- it('Should fail with a non authenticated user', async function () {
- await getVideo(servers[0].url, servers[0].video.uuid, HttpStatusCode.UNAUTHORIZED_401)
- })
- it('Should fail with another user', async function () {
- await getVideoWithToken(servers[0].url, userAccessToken2, servers[0].video.uuid, HttpStatusCode.FORBIDDEN_403)
- })
- it('Should succeed with the owner authenticated user', async function () {
- const res = await getVideoWithToken(servers[0].url, userAccessToken1, servers[0].video.uuid, HttpStatusCode.OK_200)
- const video: VideoDetails = res.body
- expect(video.blacklisted).to.be.true
- })
- it('Should succeed with an admin', async function () {
- const res = await getVideoWithToken(servers[0].url, servers[0].accessToken, servers[0].video.uuid, HttpStatusCode.OK_200)
- const video: VideoDetails = res.body
- expect(video.blacklisted).to.be.true
- })
- })
- describe('When removing a video in blacklist', function () {
- it('Should fail with a non authenticated user', async function () {
- await removeVideoFromBlacklist(servers[0].url, 'fake token', servers[0].video.uuid, HttpStatusCode.UNAUTHORIZED_401)
- })
- it('Should fail with a non admin user', async function () {
- await removeVideoFromBlacklist(servers[0].url, userAccessToken2, servers[0].video.uuid, HttpStatusCode.FORBIDDEN_403)
- })
- it('Should fail with an incorrect id', async function () {
- await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, 'hello', HttpStatusCode.BAD_REQUEST_400)
- })
- it('Should fail with a not blacklisted video', async function () {
- // The video was not added to the blacklist so it should fail
- await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, notBlacklistedVideoId, HttpStatusCode.NOT_FOUND_404)
- })
- it('Should succeed with the correct params', async function () {
- await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, servers[0].video.uuid, HttpStatusCode.NO_CONTENT_204)
- })
- })
- describe('When listing videos in blacklist', function () {
- const basePath = '/api/v1/videos/blacklist/'
- it('Should fail with a non authenticated user', async function () {
- await getBlacklistedVideosList({ url: servers[0].url, token: 'fake token', specialStatus: HttpStatusCode.UNAUTHORIZED_401 })
- })
- it('Should fail with a non admin user', async function () {
- await getBlacklistedVideosList({ url: servers[0].url, token: userAccessToken2, specialStatus: HttpStatusCode.FORBIDDEN_403 })
- })
- it('Should fail with a bad start pagination', async function () {
- await checkBadStartPagination(servers[0].url, basePath, servers[0].accessToken)
- })
- it('Should fail with a bad count pagination', async function () {
- await checkBadCountPagination(servers[0].url, basePath, servers[0].accessToken)
- })
- it('Should fail with an incorrect sort', async function () {
- await checkBadSortPagination(servers[0].url, basePath, servers[0].accessToken)
- })
- it('Should fail with an invalid type', async function () {
- await getBlacklistedVideosList({
- url: servers[0].url,
- token: servers[0].accessToken,
- type: 0,
- specialStatus: HttpStatusCode.BAD_REQUEST_400
- })
- })
- it('Should succeed with the correct parameters', async function () {
- await getBlacklistedVideosList({ url: servers[0].url, token: servers[0].accessToken, type: VideoBlacklistType.MANUAL })
- })
- })
- after(async function () {
- await cleanupTests(servers)
- })
- })
|