From e030bfb59dd5ee65f20a64686ec9b22ca39f70ae Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 2 Jun 2021 18:15:41 +0200 Subject: Refactor server errors handler --- server/tests/api/check-params/videos.ts | 78 ++++++++++++++++++++++++++- server/tests/api/server/follow-constraints.ts | 16 +++++- 2 files changed, 92 insertions(+), 2 deletions(-) (limited to 'server/tests/api') diff --git a/server/tests/api/check-params/videos.ts b/server/tests/api/check-params/videos.ts index c970c4a15..a6eecb13a 100644 --- a/server/tests/api/check-params/videos.ts +++ b/server/tests/api/check-params/videos.ts @@ -4,6 +4,8 @@ import 'mocha' import * as chai from 'chai' import { omit } from 'lodash' import { join } from 'path' +import { randomInt } from '@shared/core-utils' +import { PeerTubeProblemDocument } from '@shared/models' import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { checkUploadVideoParam, @@ -30,7 +32,6 @@ import { checkBadStartPagination } from '../../../../shared/extra-utils/requests/check-api-params' import { VideoPrivacy } from '../../../../shared/models/videos/video-privacy.enum' -import { randomInt } from '@shared/core-utils' const expect = chai.expect @@ -411,6 +412,31 @@ describe('Test videos API validator', function () { await checkUploadVideoParam(server.url, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode) }) + it('Should report the appropriate error', async function () { + const fields = immutableAssign(baseCorrectParams, { language: 'a'.repeat(15) }) + const attaches = baseCorrectAttaches + + const attributes = { ...fields, ...attaches } + const res = await checkUploadVideoParam(server.url, server.accessToken, attributes, HttpStatusCode.BAD_REQUEST_400, mode) + + const error = res.body as PeerTubeProblemDocument + + if (mode === 'legacy') { + expect(error.docs).to.equal('https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadLegacy') + } else { + expect(error.docs).to.equal('https://docs.joinpeertube.org/api-rest-reference.html#operation/uploadResumableInit') + } + + expect(error.type).to.equal('about:blank') + expect(error.title).to.equal('Bad Request') + + expect(error.detail).to.equal('Incorrect request parameters: language') + expect(error.error).to.equal('Incorrect request parameters: language') + + expect(error.status).to.equal(HttpStatusCode.BAD_REQUEST_400) + expect(error['invalid-params'].language).to.exist + }) + it('Should succeed with the correct parameters', async function () { this.timeout(10000) @@ -645,6 +671,24 @@ describe('Test videos API validator', function () { it('Should fail with a video of another server') + it('Shoud report the appropriate error', async function () { + const fields = immutableAssign(baseCorrectParams, { licence: 125 }) + + const res = await makePutBodyRequest({ url: server.url, path: path + videoId, token: server.accessToken, fields }) + const error = res.body as PeerTubeProblemDocument + + expect(error.docs).to.equal('https://docs.joinpeertube.org/api-rest-reference.html#operation/putVideo') + + expect(error.type).to.equal('about:blank') + expect(error.title).to.equal('Bad Request') + + expect(error.detail).to.equal('Incorrect request parameters: licence') + expect(error.error).to.equal('Incorrect request parameters: licence') + + expect(error.status).to.equal(HttpStatusCode.BAD_REQUEST_400) + expect(error['invalid-params'].licence).to.exist + }) + it('Should succeed with the correct parameters', async function () { const fields = baseCorrectParams @@ -678,6 +722,22 @@ describe('Test videos API validator', function () { await getVideo(server.url, '4da6fde3-88f7-4d16-b119-108df5630b06', HttpStatusCode.NOT_FOUND_404) }) + it('Shoud report the appropriate error', async function () { + const res = await getVideo(server.url, 'hi', HttpStatusCode.BAD_REQUEST_400) + const error = res.body as PeerTubeProblemDocument + + expect(error.docs).to.equal('https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo') + + expect(error.type).to.equal('about:blank') + expect(error.title).to.equal('Bad Request') + + expect(error.detail).to.equal('Incorrect request parameters: id') + expect(error.error).to.equal('Incorrect request parameters: id') + + expect(error.status).to.equal(HttpStatusCode.BAD_REQUEST_400) + expect(error['invalid-params'].id).to.exist + }) + it('Should succeed with the correct parameters', async function () { await getVideo(server.url, videoId) }) @@ -755,6 +815,22 @@ describe('Test videos API validator', function () { it('Should fail with a video of another server') + it('Shoud report the appropriate error', async function () { + const res = await removeVideo(server.url, server.accessToken, 'hello', HttpStatusCode.BAD_REQUEST_400) + const error = res.body as PeerTubeProblemDocument + + expect(error.docs).to.equal('https://docs.joinpeertube.org/api-rest-reference.html#operation/delVideo') + + expect(error.type).to.equal('about:blank') + expect(error.title).to.equal('Bad Request') + + expect(error.detail).to.equal('Incorrect request parameters: id') + expect(error.error).to.equal('Incorrect request parameters: id') + + expect(error.status).to.equal(HttpStatusCode.BAD_REQUEST_400) + expect(error['invalid-params'].id).to.exist + }) + it('Should succeed with the correct parameters', async function () { await removeVideo(server.url, server.accessToken, videoId) }) diff --git a/server/tests/api/server/follow-constraints.ts b/server/tests/api/server/follow-constraints.ts index 8a91fbba3..3f2f71f46 100644 --- a/server/tests/api/server/follow-constraints.ts +++ b/server/tests/api/server/follow-constraints.ts @@ -18,6 +18,7 @@ import { unfollow } from '../../../../shared/extra-utils/server/follows' import { userLogin } from '../../../../shared/extra-utils/users/login' import { createUser } from '../../../../shared/extra-utils/users/users' import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' +import { PeerTubeProblemDocument, ServerErrorCode } from '@shared/models' const expect = chai.expect @@ -153,7 +154,20 @@ describe('Test follow constraints', function () { }) it('Should not get the remote video', async function () { - await getVideo(servers[0].url, video2UUID, HttpStatusCode.FORBIDDEN_403) + const res = await getVideo(servers[0].url, video2UUID, HttpStatusCode.FORBIDDEN_403) + + const error = res.body as PeerTubeProblemDocument + + const doc = 'https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/does_not_respect_follow_constraints' + expect(error.type).to.equal(doc) + expect(error.code).to.equal(ServerErrorCode.DOES_NOT_RESPECT_FOLLOW_CONSTRAINTS) + + expect(error.detail).to.equal('Cannot get this video regarding follow constraints') + expect(error.error).to.equal(error.detail) + + expect(error.status).to.equal(HttpStatusCode.FORBIDDEN_403) + + expect(error.originUrl).to.contains(servers[1].url) }) it('Should list local account videos', async function () { -- cgit v1.2.3