1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
4 import { omit } from 'lodash'
5 import { HttpStatusCode, PlaybackMetricCreate, VideoResolution } from '@shared/models'
6 import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
8 describe('Test metrics API validators', function () {
9 let server: PeerTubeServer
12 // ---------------------------------------------------------------
14 before(async function () {
17 server = await createSingleServer(1, {
25 await setAccessTokensToServers([ server ])
27 const { uuid } = await server.videos.quickUpload({ name: 'video' })
31 describe('When adding playback metrics', function () {
32 const path = '/api/v1/metrics/playback'
33 let baseParams: PlaybackMetricCreate
37 playerMode: 'p2p-media-loader',
38 resolution: VideoResolution.H_1080P,
42 downloadedBytesP2P: 0,
43 downloadedBytesHTTP: 0,
49 it('Should fail with an invalid resolution', async function () {
50 await makePostBodyRequest({
53 fields: { ...baseParams, resolution: 'toto' }
57 it('Should fail with an invalid fps', async function () {
58 await makePostBodyRequest({
61 fields: { ...baseParams, fps: 'toto' }
65 it('Should fail with a missing/invalid player mode', async function () {
66 await makePostBodyRequest({
69 fields: omit(baseParams, 'playerMode')
72 await makePostBodyRequest({
75 fields: { ...baseParams, playerMode: 'toto' }
79 it('Should fail with an missing/invalid resolution changes', async function () {
80 await makePostBodyRequest({
83 fields: omit(baseParams, 'resolutionChanges')
86 await makePostBodyRequest({
89 fields: { ...baseParams, resolutionChanges: 'toto' }
93 it('Should fail with a missing errors', async function () {
97 it('Should fail with an missing/invalid errors', async function () {
98 await makePostBodyRequest({
101 fields: omit(baseParams, 'errors')
104 await makePostBodyRequest({
107 fields: { ...baseParams, errors: 'toto' }
111 it('Should fail with an missing/invalid downloadedBytesP2P', async function () {
112 await makePostBodyRequest({
115 fields: omit(baseParams, 'downloadedBytesP2P')
118 await makePostBodyRequest({
121 fields: { ...baseParams, downloadedBytesP2P: 'toto' }
125 it('Should fail with an missing/invalid downloadedBytesHTTP', async function () {
126 await makePostBodyRequest({
129 fields: omit(baseParams, 'downloadedBytesHTTP')
132 await makePostBodyRequest({
135 fields: { ...baseParams, downloadedBytesHTTP: 'toto' }
139 it('Should fail with an missing/invalid uploadedBytesP2P', async function () {
140 await makePostBodyRequest({
143 fields: omit(baseParams, 'uploadedBytesP2P')
146 await makePostBodyRequest({
149 fields: { ...baseParams, uploadedBytesP2P: 'toto' }
153 it('Should fail with a bad video id', async function () {
154 await makePostBodyRequest({
157 fields: { ...baseParams, videoId: 'toto' }
161 it('Should fail with an unknown video', async function () {
162 await makePostBodyRequest({
165 fields: { ...baseParams, videoId: 42 },
166 expectedStatus: HttpStatusCode.NOT_FOUND_404
170 it('Should succeed with the correct params', async function () {
171 await makePostBodyRequest({
175 expectedStatus: HttpStatusCode.NO_CONTENT_204
180 after(async function () {
181 await cleanupTests([ server ])