diff options
-rw-r--r-- | server/helpers/logger.ts | 4 | ||||
-rw-r--r-- | server/tests/api/check-params/config.ts | 7 | ||||
-rw-r--r-- | server/tests/api/check-params/live.ts | 6 | ||||
-rw-r--r-- | server/tests/api/check-params/metrics.ts | 15 | ||||
-rw-r--r-- | server/tests/api/check-params/users-admin.ts | 11 | ||||
-rw-r--r-- | server/tests/api/check-params/users.ts | 6 | ||||
-rw-r--r-- | server/tests/api/check-params/video-channels.ts | 12 | ||||
-rw-r--r-- | server/tests/api/check-params/video-imports.ts | 16 | ||||
-rw-r--r-- | server/tests/api/check-params/videos.ts | 12 | ||||
-rw-r--r-- | server/tests/api/moderation/video-blacklist.ts | 8 | ||||
-rw-r--r-- | server/tests/api/transcoding/transcoder.ts | 8 | ||||
-rw-r--r-- | server/tests/client.ts | 4 | ||||
-rw-r--r-- | shared/core-utils/common/object.ts | 14 | ||||
-rw-r--r-- | shared/server-commands/users/users-command.ts | 5 | ||||
-rw-r--r-- | shared/server-commands/videos/live-command.ts | 5 | ||||
-rw-r--r-- | shared/server-commands/videos/playlists-command.ts | 7 | ||||
-rw-r--r-- | shared/server-commands/videos/videos-command.ts | 5 |
17 files changed, 67 insertions, 78 deletions
diff --git a/server/helpers/logger.ts b/server/helpers/logger.ts index 9625c1b33..6649db40f 100644 --- a/server/helpers/logger.ts +++ b/server/helpers/logger.ts | |||
@@ -1,11 +1,11 @@ | |||
1 | import { stat } from 'fs-extra' | 1 | import { stat } from 'fs-extra' |
2 | import { omit } from 'lodash' | ||
3 | import { join } from 'path' | 2 | import { join } from 'path' |
4 | import { format as sqlFormat } from 'sql-formatter' | 3 | import { format as sqlFormat } from 'sql-formatter' |
5 | import { createLogger, format, transports } from 'winston' | 4 | import { createLogger, format, transports } from 'winston' |
6 | import { FileTransportOptions } from 'winston/lib/winston/transports' | 5 | import { FileTransportOptions } from 'winston/lib/winston/transports' |
7 | import { context } from '@opentelemetry/api' | 6 | import { context } from '@opentelemetry/api' |
8 | import { getSpanContext } from '@opentelemetry/api/build/src/trace/context-utils' | 7 | import { getSpanContext } from '@opentelemetry/api/build/src/trace/context-utils' |
8 | import { omit } from '@shared/core-utils' | ||
9 | import { CONFIG } from '../initializers/config' | 9 | import { CONFIG } from '../initializers/config' |
10 | import { LOG_FILENAME } from '../initializers/constants' | 10 | import { LOG_FILENAME } from '../initializers/constants' |
11 | 11 | ||
@@ -204,5 +204,5 @@ function removeCyclicValues () { | |||
204 | function getAdditionalInfo (info: any) { | 204 | function getAdditionalInfo (info: any) { |
205 | const toOmit = [ 'label', 'timestamp', 'level', 'message', 'sql', 'tags' ] | 205 | const toOmit = [ 'label', 'timestamp', 'level', 'message', 'sql', 'tags' ] |
206 | 206 | ||
207 | return omit(info, ...toOmit) | 207 | return omit(info, toOmit) |
208 | } | 208 | } |
diff --git a/server/tests/api/check-params/config.ts b/server/tests/api/check-params/config.ts index d67e51123..3415625ca 100644 --- a/server/tests/api/check-params/config.ts +++ b/server/tests/api/check-params/config.ts | |||
@@ -1,7 +1,6 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | import { merge } from 'lodash' | |
3 | import 'mocha' | 3 | import { omit } from '@shared/core-utils' |
4 | import { merge, omit } from 'lodash' | ||
5 | import { CustomConfig, HttpStatusCode } from '@shared/models' | 4 | import { CustomConfig, HttpStatusCode } from '@shared/models' |
6 | import { | 5 | import { |
7 | cleanupTests, | 6 | cleanupTests, |
@@ -277,7 +276,7 @@ describe('Test config API validators', function () { | |||
277 | }) | 276 | }) |
278 | 277 | ||
279 | it('Should fail if it misses a key', async function () { | 278 | it('Should fail if it misses a key', async function () { |
280 | const newUpdateParams = omit(updateParams, 'admin.email') | 279 | const newUpdateParams = { ...updateParams, admin: omit(updateParams.admin, [ 'email' ]) } |
281 | 280 | ||
282 | await makePutBodyRequest({ | 281 | await makePutBodyRequest({ |
283 | url: server.url, | 282 | url: server.url, |
diff --git a/server/tests/api/check-params/live.ts b/server/tests/api/check-params/live.ts index b092f16f9..3f553c42b 100644 --- a/server/tests/api/check-params/live.ts +++ b/server/tests/api/check-params/live.ts | |||
@@ -1,9 +1,7 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | ||
4 | import { expect } from 'chai' | 3 | import { expect } from 'chai' |
5 | import { omit } from 'lodash' | 4 | import { buildAbsoluteFixturePath, omit } from '@shared/core-utils' |
6 | import { buildAbsoluteFixturePath } from '@shared/core-utils' | ||
7 | import { HttpStatusCode, LiveVideoLatencyMode, VideoCreateResult, VideoPrivacy } from '@shared/models' | 5 | import { HttpStatusCode, LiveVideoLatencyMode, VideoCreateResult, VideoPrivacy } from '@shared/models' |
8 | import { | 6 | import { |
9 | cleanupTests, | 7 | cleanupTests, |
@@ -132,7 +130,7 @@ describe('Test video lives API validator', function () { | |||
132 | }) | 130 | }) |
133 | 131 | ||
134 | it('Should fail without a channel', async function () { | 132 | it('Should fail without a channel', async function () { |
135 | const fields = omit(baseCorrectParams, 'channelId') | 133 | const fields = omit(baseCorrectParams, [ 'channelId' ]) |
136 | 134 | ||
137 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 135 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
138 | }) | 136 | }) |
diff --git a/server/tests/api/check-params/metrics.ts b/server/tests/api/check-params/metrics.ts index 2d4509406..be8253217 100644 --- a/server/tests/api/check-params/metrics.ts +++ b/server/tests/api/check-params/metrics.ts | |||
@@ -1,7 +1,6 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | 3 | import { omit } from '@shared/core-utils' |
4 | import { omit } from 'lodash' | ||
5 | import { HttpStatusCode, PlaybackMetricCreate, VideoResolution } from '@shared/models' | 4 | import { HttpStatusCode, PlaybackMetricCreate, VideoResolution } from '@shared/models' |
6 | import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' | 5 | import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' |
7 | 6 | ||
@@ -66,7 +65,7 @@ describe('Test metrics API validators', function () { | |||
66 | await makePostBodyRequest({ | 65 | await makePostBodyRequest({ |
67 | url: server.url, | 66 | url: server.url, |
68 | path, | 67 | path, |
69 | fields: omit(baseParams, 'playerMode') | 68 | fields: omit(baseParams, [ 'playerMode' ]) |
70 | }) | 69 | }) |
71 | 70 | ||
72 | await makePostBodyRequest({ | 71 | await makePostBodyRequest({ |
@@ -80,7 +79,7 @@ describe('Test metrics API validators', function () { | |||
80 | await makePostBodyRequest({ | 79 | await makePostBodyRequest({ |
81 | url: server.url, | 80 | url: server.url, |
82 | path, | 81 | path, |
83 | fields: omit(baseParams, 'resolutionChanges') | 82 | fields: omit(baseParams, [ 'resolutionChanges' ]) |
84 | }) | 83 | }) |
85 | 84 | ||
86 | await makePostBodyRequest({ | 85 | await makePostBodyRequest({ |
@@ -98,7 +97,7 @@ describe('Test metrics API validators', function () { | |||
98 | await makePostBodyRequest({ | 97 | await makePostBodyRequest({ |
99 | url: server.url, | 98 | url: server.url, |
100 | path, | 99 | path, |
101 | fields: omit(baseParams, 'errors') | 100 | fields: omit(baseParams, [ 'errors' ]) |
102 | }) | 101 | }) |
103 | 102 | ||
104 | await makePostBodyRequest({ | 103 | await makePostBodyRequest({ |
@@ -112,7 +111,7 @@ describe('Test metrics API validators', function () { | |||
112 | await makePostBodyRequest({ | 111 | await makePostBodyRequest({ |
113 | url: server.url, | 112 | url: server.url, |
114 | path, | 113 | path, |
115 | fields: omit(baseParams, 'downloadedBytesP2P') | 114 | fields: omit(baseParams, [ 'downloadedBytesP2P' ]) |
116 | }) | 115 | }) |
117 | 116 | ||
118 | await makePostBodyRequest({ | 117 | await makePostBodyRequest({ |
@@ -126,7 +125,7 @@ describe('Test metrics API validators', function () { | |||
126 | await makePostBodyRequest({ | 125 | await makePostBodyRequest({ |
127 | url: server.url, | 126 | url: server.url, |
128 | path, | 127 | path, |
129 | fields: omit(baseParams, 'downloadedBytesHTTP') | 128 | fields: omit(baseParams, [ 'downloadedBytesHTTP' ]) |
130 | }) | 129 | }) |
131 | 130 | ||
132 | await makePostBodyRequest({ | 131 | await makePostBodyRequest({ |
@@ -140,7 +139,7 @@ describe('Test metrics API validators', function () { | |||
140 | await makePostBodyRequest({ | 139 | await makePostBodyRequest({ |
141 | url: server.url, | 140 | url: server.url, |
142 | path, | 141 | path, |
143 | fields: omit(baseParams, 'uploadedBytesP2P') | 142 | fields: omit(baseParams, [ 'uploadedBytesP2P' ]) |
144 | }) | 143 | }) |
145 | 144 | ||
146 | await makePostBodyRequest({ | 145 | await makePostBodyRequest({ |
diff --git a/server/tests/api/check-params/users-admin.ts b/server/tests/api/check-params/users-admin.ts index 716c22556..d941ca024 100644 --- a/server/tests/api/check-params/users-admin.ts +++ b/server/tests/api/check-params/users-admin.ts | |||
@@ -1,8 +1,7 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | ||
4 | import { omit } from 'lodash' | ||
5 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, MockSmtpServer } from '@server/tests/shared' | 3 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, MockSmtpServer } from '@server/tests/shared' |
4 | import { omit } from '@shared/core-utils' | ||
6 | import { HttpStatusCode, UserAdminFlag, UserRole } from '@shared/models' | 5 | import { HttpStatusCode, UserAdminFlag, UserRole } from '@shared/models' |
7 | import { | 6 | import { |
8 | cleanupTests, | 7 | cleanupTests, |
@@ -123,7 +122,7 @@ describe('Test users admin API validators', function () { | |||
123 | }) | 122 | }) |
124 | 123 | ||
125 | it('Should fail with a missing email', async function () { | 124 | it('Should fail with a missing email', async function () { |
126 | const fields = omit(baseCorrectParams, 'email') | 125 | const fields = omit(baseCorrectParams, [ 'email' ]) |
127 | 126 | ||
128 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 127 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
129 | }) | 128 | }) |
@@ -223,13 +222,13 @@ describe('Test users admin API validators', function () { | |||
223 | }) | 222 | }) |
224 | 223 | ||
225 | it('Should fail without a videoQuota', async function () { | 224 | it('Should fail without a videoQuota', async function () { |
226 | const fields = omit(baseCorrectParams, 'videoQuota') | 225 | const fields = omit(baseCorrectParams, [ 'videoQuota' ]) |
227 | 226 | ||
228 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 227 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
229 | }) | 228 | }) |
230 | 229 | ||
231 | it('Should fail without a videoQuotaDaily', async function () { | 230 | it('Should fail without a videoQuotaDaily', async function () { |
232 | const fields = omit(baseCorrectParams, 'videoQuotaDaily') | 231 | const fields = omit(baseCorrectParams, [ 'videoQuotaDaily' ]) |
233 | 232 | ||
234 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 233 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
235 | }) | 234 | }) |
@@ -247,7 +246,7 @@ describe('Test users admin API validators', function () { | |||
247 | }) | 246 | }) |
248 | 247 | ||
249 | it('Should fail without a user role', async function () { | 248 | it('Should fail without a user role', async function () { |
250 | const fields = omit(baseCorrectParams, 'role') | 249 | const fields = omit(baseCorrectParams, [ 'role' ]) |
251 | 250 | ||
252 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 251 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
253 | }) | 252 | }) |
diff --git a/server/tests/api/check-params/users.ts b/server/tests/api/check-params/users.ts index 4c4f54958..7acfd8c2c 100644 --- a/server/tests/api/check-params/users.ts +++ b/server/tests/api/check-params/users.ts | |||
@@ -1,8 +1,6 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | |||
3 | import 'mocha' | ||
4 | import { omit } from 'lodash' | ||
5 | import { MockSmtpServer } from '@server/tests/shared' | 2 | import { MockSmtpServer } from '@server/tests/shared' |
3 | import { omit } from '@shared/core-utils' | ||
6 | import { HttpStatusCode, UserRole } from '@shared/models' | 4 | import { HttpStatusCode, UserRole } from '@shared/models' |
7 | import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' | 5 | import { cleanupTests, createSingleServer, makePostBodyRequest, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' |
8 | 6 | ||
@@ -57,7 +55,7 @@ describe('Test users API validators', function () { | |||
57 | }) | 55 | }) |
58 | 56 | ||
59 | it('Should fail with a missing email', async function () { | 57 | it('Should fail with a missing email', async function () { |
60 | const fields = omit(baseCorrectParams, 'email') | 58 | const fields = omit(baseCorrectParams, [ 'email' ]) |
61 | 59 | ||
62 | await makePostBodyRequest({ url: server.url, path: registrationPath, token: server.accessToken, fields }) | 60 | await makePostBodyRequest({ url: server.url, path: registrationPath, token: server.accessToken, fields }) |
63 | }) | 61 | }) |
diff --git a/server/tests/api/check-params/video-channels.ts b/server/tests/api/check-params/video-channels.ts index 9024126c0..1782474fd 100644 --- a/server/tests/api/check-params/video-channels.ts +++ b/server/tests/api/check-params/video-channels.ts | |||
@@ -1,10 +1,8 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | 3 | import { expect } from 'chai' |
4 | import * as chai from 'chai' | ||
5 | import { omit } from 'lodash' | ||
6 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '@server/tests/shared' | 4 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '@server/tests/shared' |
7 | import { buildAbsoluteFixturePath } from '@shared/core-utils' | 5 | import { buildAbsoluteFixturePath, omit } from '@shared/core-utils' |
8 | import { HttpStatusCode, VideoChannelUpdate } from '@shared/models' | 6 | import { HttpStatusCode, VideoChannelUpdate } from '@shared/models' |
9 | import { | 7 | import { |
10 | ChannelsCommand, | 8 | ChannelsCommand, |
@@ -18,8 +16,6 @@ import { | |||
18 | setAccessTokensToServers | 16 | setAccessTokensToServers |
19 | } from '@shared/server-commands' | 17 | } from '@shared/server-commands' |
20 | 18 | ||
21 | const expect = chai.expect | ||
22 | |||
23 | describe('Test video channels API validator', function () { | 19 | describe('Test video channels API validator', function () { |
24 | const videoChannelPath = '/api/v1/video-channels' | 20 | const videoChannelPath = '/api/v1/video-channels' |
25 | let server: PeerTubeServer | 21 | let server: PeerTubeServer |
@@ -121,7 +117,7 @@ describe('Test video channels API validator', function () { | |||
121 | }) | 117 | }) |
122 | 118 | ||
123 | it('Should fail without a name', async function () { | 119 | it('Should fail without a name', async function () { |
124 | const fields = omit(baseCorrectParams, 'name') | 120 | const fields = omit(baseCorrectParams, [ 'name' ]) |
125 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) | 121 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
126 | }) | 122 | }) |
127 | 123 | ||
@@ -131,7 +127,7 @@ describe('Test video channels API validator', function () { | |||
131 | }) | 127 | }) |
132 | 128 | ||
133 | it('Should fail without a name', async function () { | 129 | it('Should fail without a name', async function () { |
134 | const fields = omit(baseCorrectParams, 'displayName') | 130 | const fields = omit(baseCorrectParams, [ 'displayName' ]) |
135 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) | 131 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
136 | }) | 132 | }) |
137 | 133 | ||
diff --git a/server/tests/api/check-params/video-imports.ts b/server/tests/api/check-params/video-imports.ts index 85382b261..7f19b9ee9 100644 --- a/server/tests/api/check-params/video-imports.ts +++ b/server/tests/api/check-params/video-imports.ts | |||
@@ -1,9 +1,7 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | ||
4 | import { omit } from 'lodash' | ||
5 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, FIXTURE_URLS } from '@server/tests/shared' | 3 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, FIXTURE_URLS } from '@server/tests/shared' |
6 | import { buildAbsoluteFixturePath } from '@shared/core-utils' | 4 | import { buildAbsoluteFixturePath, omit } from '@shared/core-utils' |
7 | import { HttpStatusCode, VideoPrivacy } from '@shared/models' | 5 | import { HttpStatusCode, VideoPrivacy } from '@shared/models' |
8 | import { | 6 | import { |
9 | cleanupTests, | 7 | cleanupTests, |
@@ -107,7 +105,7 @@ describe('Test video imports API validator', function () { | |||
107 | }) | 105 | }) |
108 | 106 | ||
109 | it('Should fail without a target url', async function () { | 107 | it('Should fail without a target url', async function () { |
110 | const fields = omit(baseCorrectParams, 'targetUrl') | 108 | const fields = omit(baseCorrectParams, [ 'targetUrl' ]) |
111 | await makePostBodyRequest({ | 109 | await makePostBodyRequest({ |
112 | url: server.url, | 110 | url: server.url, |
113 | path, | 111 | path, |
@@ -189,7 +187,7 @@ describe('Test video imports API validator', function () { | |||
189 | }) | 187 | }) |
190 | 188 | ||
191 | it('Should fail without a channel', async function () { | 189 | it('Should fail without a channel', async function () { |
192 | const fields = omit(baseCorrectParams, 'channelId') | 190 | const fields = omit(baseCorrectParams, [ 'channelId' ]) |
193 | 191 | ||
194 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 192 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
195 | }) | 193 | }) |
@@ -271,7 +269,7 @@ describe('Test video imports API validator', function () { | |||
271 | }) | 269 | }) |
272 | 270 | ||
273 | it('Should fail with an invalid torrent file', async function () { | 271 | it('Should fail with an invalid torrent file', async function () { |
274 | const fields = omit(baseCorrectParams, 'targetUrl') | 272 | const fields = omit(baseCorrectParams, [ 'targetUrl' ]) |
275 | const attaches = { | 273 | const attaches = { |
276 | torrentfile: buildAbsoluteFixturePath('avatar-big.png') | 274 | torrentfile: buildAbsoluteFixturePath('avatar-big.png') |
277 | } | 275 | } |
@@ -280,7 +278,7 @@ describe('Test video imports API validator', function () { | |||
280 | }) | 278 | }) |
281 | 279 | ||
282 | it('Should fail with an invalid magnet URI', async function () { | 280 | it('Should fail with an invalid magnet URI', async function () { |
283 | let fields = omit(baseCorrectParams, 'targetUrl') | 281 | let fields = omit(baseCorrectParams, [ 'targetUrl' ]) |
284 | fields = { ...fields, magnetUri: 'blabla' } | 282 | fields = { ...fields, magnetUri: 'blabla' } |
285 | 283 | ||
286 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 284 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
@@ -339,7 +337,7 @@ describe('Test video imports API validator', function () { | |||
339 | } | 337 | } |
340 | }) | 338 | }) |
341 | 339 | ||
342 | let fields = omit(baseCorrectParams, 'targetUrl') | 340 | let fields = omit(baseCorrectParams, [ 'targetUrl' ]) |
343 | fields = { ...fields, magnetUri: FIXTURE_URLS.magnet } | 341 | fields = { ...fields, magnetUri: FIXTURE_URLS.magnet } |
344 | 342 | ||
345 | await makePostBodyRequest({ | 343 | await makePostBodyRequest({ |
@@ -350,7 +348,7 @@ describe('Test video imports API validator', function () { | |||
350 | expectedStatus: HttpStatusCode.CONFLICT_409 | 348 | expectedStatus: HttpStatusCode.CONFLICT_409 |
351 | }) | 349 | }) |
352 | 350 | ||
353 | fields = omit(fields, 'magnetUri') | 351 | fields = omit(fields, [ 'magnetUri' ]) |
354 | const attaches = { | 352 | const attaches = { |
355 | torrentfile: buildAbsoluteFixturePath('video-720p.torrent') | 353 | torrentfile: buildAbsoluteFixturePath('video-720p.torrent') |
356 | } | 354 | } |
diff --git a/server/tests/api/check-params/videos.ts b/server/tests/api/check-params/videos.ts index e5c9b90c4..572ca8997 100644 --- a/server/tests/api/check-params/videos.ts +++ b/server/tests/api/check-params/videos.ts | |||
@@ -1,11 +1,9 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | 3 | import { expect } from 'chai' |
4 | import * as chai from 'chai' | ||
5 | import { omit } from 'lodash' | ||
6 | import { join } from 'path' | 4 | import { join } from 'path' |
7 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, checkUploadVideoParam } from '@server/tests/shared' | 5 | import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination, checkUploadVideoParam } from '@server/tests/shared' |
8 | import { randomInt, root } from '@shared/core-utils' | 6 | import { omit, randomInt, root } from '@shared/core-utils' |
9 | import { HttpStatusCode, PeerTubeProblemDocument, VideoCreateResult, VideoPrivacy } from '@shared/models' | 7 | import { HttpStatusCode, PeerTubeProblemDocument, VideoCreateResult, VideoPrivacy } from '@shared/models' |
10 | import { | 8 | import { |
11 | cleanupTests, | 9 | cleanupTests, |
@@ -18,8 +16,6 @@ import { | |||
18 | setAccessTokensToServers | 16 | setAccessTokensToServers |
19 | } from '@shared/server-commands' | 17 | } from '@shared/server-commands' |
20 | 18 | ||
21 | const expect = chai.expect | ||
22 | |||
23 | describe('Test videos API validator', function () { | 19 | describe('Test videos API validator', function () { |
24 | const path = '/api/v1/videos/' | 20 | const path = '/api/v1/videos/' |
25 | let server: PeerTubeServer | 21 | let server: PeerTubeServer |
@@ -219,7 +215,7 @@ describe('Test videos API validator', function () { | |||
219 | }) | 215 | }) |
220 | 216 | ||
221 | it('Should fail without name', async function () { | 217 | it('Should fail without name', async function () { |
222 | const fields = omit(baseCorrectParams, 'name') | 218 | const fields = omit(baseCorrectParams, [ 'name' ]) |
223 | const attaches = baseCorrectAttaches | 219 | const attaches = baseCorrectAttaches |
224 | 220 | ||
225 | await checkUploadVideoParam(server, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode) | 221 | await checkUploadVideoParam(server, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode) |
@@ -268,7 +264,7 @@ describe('Test videos API validator', function () { | |||
268 | }) | 264 | }) |
269 | 265 | ||
270 | it('Should fail without a channel', async function () { | 266 | it('Should fail without a channel', async function () { |
271 | const fields = omit(baseCorrectParams, 'channelId') | 267 | const fields = omit(baseCorrectParams, [ 'channelId' ]) |
272 | const attaches = baseCorrectAttaches | 268 | const attaches = baseCorrectAttaches |
273 | 269 | ||
274 | await checkUploadVideoParam(server, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode) | 270 | await checkUploadVideoParam(server, server.accessToken, { ...fields, ...attaches }, HttpStatusCode.BAD_REQUEST_400, mode) |
diff --git a/server/tests/api/moderation/video-blacklist.ts b/server/tests/api/moderation/video-blacklist.ts index 1790210ff..a7620b071 100644 --- a/server/tests/api/moderation/video-blacklist.ts +++ b/server/tests/api/moderation/video-blacklist.ts | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | import 'mocha' | 3 | import 'mocha' |
4 | import * as chai from 'chai' | 4 | import * as chai from 'chai' |
5 | import { orderBy } from 'lodash' | ||
6 | import { FIXTURE_URLS } from '@server/tests/shared' | 5 | import { FIXTURE_URLS } from '@server/tests/shared' |
6 | import { sortObjectComparator } from '@shared/core-utils' | ||
7 | import { UserAdminFlag, UserRole, VideoBlacklist, VideoBlacklistType } from '@shared/models' | 7 | import { UserAdminFlag, UserRole, VideoBlacklist, VideoBlacklistType } from '@shared/models' |
8 | import { | 8 | import { |
9 | BlacklistCommand, | 9 | BlacklistCommand, |
@@ -138,7 +138,7 @@ describe('Test video blacklist', function () { | |||
138 | expect(blacklistedVideos).to.be.an('array') | 138 | expect(blacklistedVideos).to.be.an('array') |
139 | expect(blacklistedVideos.length).to.equal(2) | 139 | expect(blacklistedVideos.length).to.equal(2) |
140 | 140 | ||
141 | const result = orderBy(body.data, [ 'id' ], [ 'desc' ]) | 141 | const result = [ ...body.data ].sort(sortObjectComparator('id', 'desc')) |
142 | expect(blacklistedVideos).to.deep.equal(result) | 142 | expect(blacklistedVideos).to.deep.equal(result) |
143 | }) | 143 | }) |
144 | 144 | ||
@@ -150,7 +150,7 @@ describe('Test video blacklist', function () { | |||
150 | expect(blacklistedVideos).to.be.an('array') | 150 | expect(blacklistedVideos).to.be.an('array') |
151 | expect(blacklistedVideos.length).to.equal(2) | 151 | expect(blacklistedVideos.length).to.equal(2) |
152 | 152 | ||
153 | const result = orderBy(body.data, [ 'name' ], [ 'desc' ]) | 153 | const result = [ ...body.data ].sort(sortObjectComparator('name', 'desc')) |
154 | expect(blacklistedVideos).to.deep.equal(result) | 154 | expect(blacklistedVideos).to.deep.equal(result) |
155 | }) | 155 | }) |
156 | 156 | ||
@@ -162,7 +162,7 @@ describe('Test video blacklist', function () { | |||
162 | expect(blacklistedVideos).to.be.an('array') | 162 | expect(blacklistedVideos).to.be.an('array') |
163 | expect(blacklistedVideos.length).to.equal(2) | 163 | expect(blacklistedVideos.length).to.equal(2) |
164 | 164 | ||
165 | const result = orderBy(body.data, [ 'createdAt' ]) | 165 | const result = [ ...body.data ].sort(sortObjectComparator('createdAt', 'asc')) |
166 | expect(blacklistedVideos).to.deep.equal(result) | 166 | expect(blacklistedVideos).to.deep.equal(result) |
167 | }) | 167 | }) |
168 | }) | 168 | }) |
diff --git a/server/tests/api/transcoding/transcoder.ts b/server/tests/api/transcoding/transcoder.ts index 48a20e1d5..db0127805 100644 --- a/server/tests/api/transcoding/transcoder.ts +++ b/server/tests/api/transcoding/transcoder.ts | |||
@@ -1,11 +1,9 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import 'mocha' | 3 | import { expect } from 'chai' |
4 | import * as chai from 'chai' | ||
5 | import { omit } from 'lodash' | ||
6 | import { canDoQuickTranscode } from '@server/helpers/ffmpeg' | 4 | import { canDoQuickTranscode } from '@server/helpers/ffmpeg' |
7 | import { generateHighBitrateVideo, generateVideoWithFramerate, getAllFiles } from '@server/tests/shared' | 5 | import { generateHighBitrateVideo, generateVideoWithFramerate, getAllFiles } from '@server/tests/shared' |
8 | import { buildAbsoluteFixturePath, getMaxBitrate, getMinLimitBitrate } from '@shared/core-utils' | 6 | import { buildAbsoluteFixturePath, getMaxBitrate, getMinLimitBitrate, omit } from '@shared/core-utils' |
9 | import { | 7 | import { |
10 | buildFileMetadata, | 8 | buildFileMetadata, |
11 | getAudioStream, | 9 | getAudioStream, |
@@ -26,8 +24,6 @@ import { | |||
26 | webtorrentAdd | 24 | webtorrentAdd |
27 | } from '@shared/server-commands' | 25 | } from '@shared/server-commands' |
28 | 26 | ||
29 | const expect = chai.expect | ||
30 | |||
31 | function updateConfigForTranscoding (server: PeerTubeServer) { | 27 | function updateConfigForTranscoding (server: PeerTubeServer) { |
32 | return server.config.updateCustomSubConfig({ | 28 | return server.config.updateCustomSubConfig({ |
33 | newConfig: { | 29 | newConfig: { |
diff --git a/server/tests/client.ts b/server/tests/client.ts index a8a697f99..35b472d76 100644 --- a/server/tests/client.ts +++ b/server/tests/client.ts | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | import 'mocha' | 3 | import 'mocha' |
4 | import * as chai from 'chai' | 4 | import * as chai from 'chai' |
5 | import { omit } from 'lodash' | 5 | import { omit } from '@shared/core-utils' |
6 | import { | 6 | import { |
7 | Account, | 7 | Account, |
8 | HTMLServerConfig, | 8 | HTMLServerConfig, |
@@ -31,7 +31,7 @@ function checkIndexTags (html: string, title: string, description: string, css: | |||
31 | expect(html).to.contain('<meta name="description" content="' + description + '" />') | 31 | expect(html).to.contain('<meta name="description" content="' + description + '" />') |
32 | expect(html).to.contain('<style class="custom-css-style">' + css + '</style>') | 32 | expect(html).to.contain('<style class="custom-css-style">' + css + '</style>') |
33 | 33 | ||
34 | const htmlConfig: HTMLServerConfig = omit(config, 'signup') | 34 | const htmlConfig: HTMLServerConfig = omit(config, [ 'signup' ]) |
35 | const configObjectString = JSON.stringify(htmlConfig) | 35 | const configObjectString = JSON.stringify(htmlConfig) |
36 | const configEscapedString = JSON.stringify(configObjectString) | 36 | const configEscapedString = JSON.stringify(configObjectString) |
37 | 37 | ||
diff --git a/shared/core-utils/common/object.ts b/shared/core-utils/common/object.ts index 49d209819..2330c9403 100644 --- a/shared/core-utils/common/object.ts +++ b/shared/core-utils/common/object.ts | |||
@@ -10,6 +10,19 @@ function pick <O extends object, K extends keyof O> (object: O, keys: K[]): Pick | |||
10 | return result | 10 | return result |
11 | } | 11 | } |
12 | 12 | ||
13 | function omit <O extends object, K extends keyof O> (object: O, keys: K[]): Exclude<O, K> { | ||
14 | const result: any = {} | ||
15 | const keysSet = new Set(keys) as Set<string> | ||
16 | |||
17 | for (const [ key, value ] of Object.entries(object)) { | ||
18 | if (keysSet.has(key)) continue | ||
19 | |||
20 | result[key] = value | ||
21 | } | ||
22 | |||
23 | return result | ||
24 | } | ||
25 | |||
13 | function getKeys <O extends object, K extends keyof O> (object: O, keys: K[]): K[] { | 26 | function getKeys <O extends object, K extends keyof O> (object: O, keys: K[]): K[] { |
14 | return (Object.keys(object) as K[]).filter(k => keys.includes(k)) | 27 | return (Object.keys(object) as K[]).filter(k => keys.includes(k)) |
15 | } | 28 | } |
@@ -30,6 +43,7 @@ function sortObjectComparator (key: string, order: 'asc' | 'desc') { | |||
30 | 43 | ||
31 | export { | 44 | export { |
32 | pick, | 45 | pick, |
46 | omit, | ||
33 | getKeys, | 47 | getKeys, |
34 | sortObjectComparator | 48 | sortObjectComparator |
35 | } | 49 | } |
diff --git a/shared/server-commands/users/users-command.ts b/shared/server-commands/users/users-command.ts index b5ae9008e..d8303848d 100644 --- a/shared/server-commands/users/users-command.ts +++ b/shared/server-commands/users/users-command.ts | |||
@@ -1,5 +1,4 @@ | |||
1 | import { omit } from 'lodash' | 1 | import { omit, pick } from '@shared/core-utils' |
2 | import { pick } from '@shared/core-utils' | ||
3 | import { | 2 | import { |
4 | HttpStatusCode, | 3 | HttpStatusCode, |
5 | MyUser, | 4 | MyUser, |
@@ -298,7 +297,7 @@ export class UsersCommand extends AbstractCommand { | |||
298 | updateMe (options: OverrideCommandOptions & UserUpdateMe) { | 297 | updateMe (options: OverrideCommandOptions & UserUpdateMe) { |
299 | const path = '/api/v1/users/me' | 298 | const path = '/api/v1/users/me' |
300 | 299 | ||
301 | const toSend: UserUpdateMe = omit(options, 'url', 'accessToken') | 300 | const toSend: UserUpdateMe = omit(options, [ 'expectedStatus', 'token' ]) |
302 | 301 | ||
303 | return this.putBodyRequest({ | 302 | return this.putBodyRequest({ |
304 | ...options, | 303 | ...options, |
diff --git a/shared/server-commands/videos/live-command.ts b/shared/server-commands/videos/live-command.ts index 3df47ed4d..d804fd883 100644 --- a/shared/server-commands/videos/live-command.ts +++ b/shared/server-commands/videos/live-command.ts | |||
@@ -1,9 +1,8 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | 2 | ||
3 | import { readdir } from 'fs-extra' | 3 | import { readdir } from 'fs-extra' |
4 | import { omit } from 'lodash' | ||
5 | import { join } from 'path' | 4 | import { join } from 'path' |
6 | import { wait } from '@shared/core-utils' | 5 | import { omit, wait } from '@shared/core-utils' |
7 | import { | 6 | import { |
8 | HttpStatusCode, | 7 | HttpStatusCode, |
9 | LiveVideo, | 8 | LiveVideo, |
@@ -103,7 +102,7 @@ export class LiveCommand extends AbstractCommand { | |||
103 | 102 | ||
104 | path, | 103 | path, |
105 | attaches, | 104 | attaches, |
106 | fields: omit(fields, 'thumbnailfile', 'previewfile'), | 105 | fields: omit(fields, [ 'thumbnailfile', 'previewfile' ]), |
107 | implicitToken: true, | 106 | implicitToken: true, |
108 | defaultExpectedStatus: HttpStatusCode.OK_200 | 107 | defaultExpectedStatus: HttpStatusCode.OK_200 |
109 | })) | 108 | })) |
diff --git a/shared/server-commands/videos/playlists-command.ts b/shared/server-commands/videos/playlists-command.ts index ce23900d3..516da0bf7 100644 --- a/shared/server-commands/videos/playlists-command.ts +++ b/shared/server-commands/videos/playlists-command.ts | |||
@@ -1,5 +1,4 @@ | |||
1 | import { omit } from 'lodash' | 1 | import { omit, pick } from '@shared/core-utils' |
2 | import { pick } from '@shared/core-utils' | ||
3 | import { | 2 | import { |
4 | BooleanBothQuery, | 3 | BooleanBothQuery, |
5 | HttpStatusCode, | 4 | HttpStatusCode, |
@@ -136,7 +135,7 @@ export class PlaylistsCommand extends AbstractCommand { | |||
136 | }) { | 135 | }) { |
137 | const path = '/api/v1/video-playlists' | 136 | const path = '/api/v1/video-playlists' |
138 | 137 | ||
139 | const fields = omit(options.attributes, 'thumbnailfile') | 138 | const fields = omit(options.attributes, [ 'thumbnailfile' ]) |
140 | 139 | ||
141 | const attaches = options.attributes.thumbnailfile | 140 | const attaches = options.attributes.thumbnailfile |
142 | ? { thumbnailfile: options.attributes.thumbnailfile } | 141 | ? { thumbnailfile: options.attributes.thumbnailfile } |
@@ -161,7 +160,7 @@ export class PlaylistsCommand extends AbstractCommand { | |||
161 | }) { | 160 | }) { |
162 | const path = '/api/v1/video-playlists/' + options.playlistId | 161 | const path = '/api/v1/video-playlists/' + options.playlistId |
163 | 162 | ||
164 | const fields = omit(options.attributes, 'thumbnailfile') | 163 | const fields = omit(options.attributes, [ 'thumbnailfile' ]) |
165 | 164 | ||
166 | const attaches = options.attributes.thumbnailfile | 165 | const attaches = options.attributes.thumbnailfile |
167 | ? { thumbnailfile: options.attributes.thumbnailfile } | 166 | ? { thumbnailfile: options.attributes.thumbnailfile } |
diff --git a/shared/server-commands/videos/videos-command.ts b/shared/server-commands/videos/videos-command.ts index c0b36d95b..168391523 100644 --- a/shared/server-commands/videos/videos-command.ts +++ b/shared/server-commands/videos/videos-command.ts | |||
@@ -3,9 +3,8 @@ | |||
3 | import { expect } from 'chai' | 3 | import { expect } from 'chai' |
4 | import { createReadStream, stat } from 'fs-extra' | 4 | import { createReadStream, stat } from 'fs-extra' |
5 | import got, { Response as GotResponse } from 'got' | 5 | import got, { Response as GotResponse } from 'got' |
6 | import { omit } from 'lodash' | ||
7 | import validator from 'validator' | 6 | import validator from 'validator' |
8 | import { buildAbsoluteFixturePath, pick, wait } from '@shared/core-utils' | 7 | import { buildAbsoluteFixturePath, omit, pick, wait } from '@shared/core-utils' |
9 | import { buildUUID } from '@shared/extra-utils' | 8 | import { buildUUID } from '@shared/extra-utils' |
10 | import { | 9 | import { |
11 | HttpStatusCode, | 10 | HttpStatusCode, |
@@ -484,7 +483,7 @@ export class VideosCommand extends AbstractCommand { | |||
484 | }, | 483 | }, |
485 | 484 | ||
486 | // Fixture will be sent later | 485 | // Fixture will be sent later |
487 | attaches: this.buildUploadAttaches(omit(options.attributes, 'fixture')), | 486 | attaches: this.buildUploadAttaches(omit(options.attributes, [ 'fixture' ])), |
488 | implicitToken: true, | 487 | implicitToken: true, |
489 | 488 | ||
490 | defaultExpectedStatus: null | 489 | defaultExpectedStatus: null |