diff options
Diffstat (limited to 'server/tests/api/check-params/live.ts')
-rw-r--r-- | server/tests/api/check-params/live.ts | 225 |
1 files changed, 116 insertions, 109 deletions
diff --git a/server/tests/api/check-params/live.ts b/server/tests/api/check-params/live.ts index 933d8abf2..700b4724d 100644 --- a/server/tests/api/check-params/live.ts +++ b/server/tests/api/check-params/live.ts | |||
@@ -2,69 +2,64 @@ | |||
2 | 2 | ||
3 | import 'mocha' | 3 | import 'mocha' |
4 | import { omit } from 'lodash' | 4 | import { omit } from 'lodash' |
5 | import { LiveVideo, VideoCreateResult, VideoPrivacy } from '@shared/models' | ||
6 | import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' | ||
7 | import { | 5 | import { |
8 | buildAbsoluteFixturePath, | 6 | buildAbsoluteFixturePath, |
9 | cleanupTests, | 7 | cleanupTests, |
10 | createUser, | 8 | createSingleServer, |
11 | flushAndRunServer, | 9 | LiveCommand, |
12 | getLive, | ||
13 | getMyUserInformation, | ||
14 | immutableAssign, | ||
15 | makePostBodyRequest, | 10 | makePostBodyRequest, |
16 | makeUploadRequest, | 11 | makeUploadRequest, |
17 | runAndTestFfmpegStreamError, | 12 | PeerTubeServer, |
18 | sendRTMPStream, | 13 | sendRTMPStream, |
19 | ServerInfo, | ||
20 | setAccessTokensToServers, | 14 | setAccessTokensToServers, |
21 | stopFfmpeg, | 15 | stopFfmpeg |
22 | updateCustomSubConfig, | 16 | } from '@shared/extra-utils' |
23 | updateLive, | 17 | import { HttpStatusCode, VideoCreateResult, VideoPrivacy } from '@shared/models' |
24 | uploadVideoAndGetId, | ||
25 | userLogin, | ||
26 | waitUntilLivePublished | ||
27 | } from '../../../../shared/extra-utils' | ||
28 | 18 | ||
29 | describe('Test video lives API validator', function () { | 19 | describe('Test video lives API validator', function () { |
30 | const path = '/api/v1/videos/live' | 20 | const path = '/api/v1/videos/live' |
31 | let server: ServerInfo | 21 | let server: PeerTubeServer |
32 | let userAccessToken = '' | 22 | let userAccessToken = '' |
33 | let channelId: number | 23 | let channelId: number |
34 | let video: VideoCreateResult | 24 | let video: VideoCreateResult |
35 | let videoIdNotLive: number | 25 | let videoIdNotLive: number |
26 | let command: LiveCommand | ||
36 | 27 | ||
37 | // --------------------------------------------------------------- | 28 | // --------------------------------------------------------------- |
38 | 29 | ||
39 | before(async function () { | 30 | before(async function () { |
40 | this.timeout(30000) | 31 | this.timeout(30000) |
41 | 32 | ||
42 | server = await flushAndRunServer(1) | 33 | server = await createSingleServer(1) |
43 | 34 | ||
44 | await setAccessTokensToServers([ server ]) | 35 | await setAccessTokensToServers([ server ]) |
45 | 36 | ||
46 | await updateCustomSubConfig(server.url, server.accessToken, { | 37 | await server.config.updateCustomSubConfig({ |
47 | live: { | 38 | newConfig: { |
48 | enabled: true, | 39 | live: { |
49 | maxInstanceLives: 20, | 40 | enabled: true, |
50 | maxUserLives: 20, | 41 | maxInstanceLives: 20, |
51 | allowReplay: true | 42 | maxUserLives: 20, |
43 | allowReplay: true | ||
44 | } | ||
52 | } | 45 | } |
53 | }) | 46 | }) |
54 | 47 | ||
55 | const username = 'user1' | 48 | const username = 'user1' |
56 | const password = 'my super password' | 49 | const password = 'my super password' |
57 | await createUser({ url: server.url, accessToken: server.accessToken, username: username, password: password }) | 50 | await server.users.create({ username: username, password: password }) |
58 | userAccessToken = await userLogin(server, { username, password }) | 51 | userAccessToken = await server.login.getAccessToken({ username, password }) |
59 | 52 | ||
60 | { | 53 | { |
61 | const res = await getMyUserInformation(server.url, server.accessToken) | 54 | const { videoChannels } = await server.users.getMyInfo() |
62 | channelId = res.body.videoChannels[0].id | 55 | channelId = videoChannels[0].id |
63 | } | 56 | } |
64 | 57 | ||
65 | { | 58 | { |
66 | videoIdNotLive = (await uploadVideoAndGetId({ server, videoName: 'not live' })).id | 59 | videoIdNotLive = (await server.videos.quickUpload({ name: 'not live' })).id |
67 | } | 60 | } |
61 | |||
62 | command = server.live | ||
68 | }) | 63 | }) |
69 | 64 | ||
70 | describe('When creating a live', function () { | 65 | describe('When creating a live', function () { |
@@ -96,37 +91,37 @@ describe('Test video lives API validator', function () { | |||
96 | }) | 91 | }) |
97 | 92 | ||
98 | it('Should fail with a long name', async function () { | 93 | it('Should fail with a long name', async function () { |
99 | const fields = immutableAssign(baseCorrectParams, { name: 'super'.repeat(65) }) | 94 | const fields = { ...baseCorrectParams, name: 'super'.repeat(65) } |
100 | 95 | ||
101 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 96 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
102 | }) | 97 | }) |
103 | 98 | ||
104 | it('Should fail with a bad category', async function () { | 99 | it('Should fail with a bad category', async function () { |
105 | const fields = immutableAssign(baseCorrectParams, { category: 125 }) | 100 | const fields = { ...baseCorrectParams, category: 125 } |
106 | 101 | ||
107 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 102 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
108 | }) | 103 | }) |
109 | 104 | ||
110 | it('Should fail with a bad licence', async function () { | 105 | it('Should fail with a bad licence', async function () { |
111 | const fields = immutableAssign(baseCorrectParams, { licence: 125 }) | 106 | const fields = { ...baseCorrectParams, licence: 125 } |
112 | 107 | ||
113 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 108 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
114 | }) | 109 | }) |
115 | 110 | ||
116 | it('Should fail with a bad language', async function () { | 111 | it('Should fail with a bad language', async function () { |
117 | const fields = immutableAssign(baseCorrectParams, { language: 'a'.repeat(15) }) | 112 | const fields = { ...baseCorrectParams, language: 'a'.repeat(15) } |
118 | 113 | ||
119 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 114 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
120 | }) | 115 | }) |
121 | 116 | ||
122 | it('Should fail with a long description', async function () { | 117 | it('Should fail with a long description', async function () { |
123 | const fields = immutableAssign(baseCorrectParams, { description: 'super'.repeat(2500) }) | 118 | const fields = { ...baseCorrectParams, description: 'super'.repeat(2500) } |
124 | 119 | ||
125 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 120 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
126 | }) | 121 | }) |
127 | 122 | ||
128 | it('Should fail with a long support text', async function () { | 123 | it('Should fail with a long support text', async function () { |
129 | const fields = immutableAssign(baseCorrectParams, { support: 'super'.repeat(201) }) | 124 | const fields = { ...baseCorrectParams, support: 'super'.repeat(201) } |
130 | 125 | ||
131 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 126 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
132 | }) | 127 | }) |
@@ -138,7 +133,7 @@ describe('Test video lives API validator', function () { | |||
138 | }) | 133 | }) |
139 | 134 | ||
140 | it('Should fail with a bad channel', async function () { | 135 | it('Should fail with a bad channel', async function () { |
141 | const fields = immutableAssign(baseCorrectParams, { channelId: 545454 }) | 136 | const fields = { ...baseCorrectParams, channelId: 545454 } |
142 | 137 | ||
143 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 138 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
144 | }) | 139 | }) |
@@ -148,31 +143,31 @@ describe('Test video lives API validator', function () { | |||
148 | username: 'fake', | 143 | username: 'fake', |
149 | password: 'fake_password' | 144 | password: 'fake_password' |
150 | } | 145 | } |
151 | await createUser({ url: server.url, accessToken: server.accessToken, username: user.username, password: user.password }) | 146 | await server.users.create({ username: user.username, password: user.password }) |
152 | 147 | ||
153 | const accessTokenUser = await userLogin(server, user) | 148 | const accessTokenUser = await server.login.getAccessToken(user) |
154 | const res = await getMyUserInformation(server.url, accessTokenUser) | 149 | const { videoChannels } = await server.users.getMyInfo({ token: accessTokenUser }) |
155 | const customChannelId = res.body.videoChannels[0].id | 150 | const customChannelId = videoChannels[0].id |
156 | 151 | ||
157 | const fields = immutableAssign(baseCorrectParams, { channelId: customChannelId }) | 152 | const fields = { ...baseCorrectParams, channelId: customChannelId } |
158 | 153 | ||
159 | await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields }) | 154 | await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields }) |
160 | }) | 155 | }) |
161 | 156 | ||
162 | it('Should fail with too many tags', async function () { | 157 | it('Should fail with too many tags', async function () { |
163 | const fields = immutableAssign(baseCorrectParams, { tags: [ 'tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'tag6' ] }) | 158 | const fields = { ...baseCorrectParams, tags: [ 'tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'tag6' ] } |
164 | 159 | ||
165 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 160 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
166 | }) | 161 | }) |
167 | 162 | ||
168 | it('Should fail with a tag length too low', async function () { | 163 | it('Should fail with a tag length too low', async function () { |
169 | const fields = immutableAssign(baseCorrectParams, { tags: [ 'tag1', 't' ] }) | 164 | const fields = { ...baseCorrectParams, tags: [ 'tag1', 't' ] } |
170 | 165 | ||
171 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 166 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
172 | }) | 167 | }) |
173 | 168 | ||
174 | it('Should fail with a tag length too big', async function () { | 169 | it('Should fail with a tag length too big', async function () { |
175 | const fields = immutableAssign(baseCorrectParams, { tags: [ 'tag1', 'my_super_tag_too_long_long_long_long_long_long' ] }) | 170 | const fields = { ...baseCorrectParams, tags: [ 'tag1', 'my_super_tag_too_long_long_long_long_long_long' ] } |
176 | 171 | ||
177 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 172 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
178 | }) | 173 | }) |
@@ -214,7 +209,7 @@ describe('Test video lives API validator', function () { | |||
214 | }) | 209 | }) |
215 | 210 | ||
216 | it('Should fail with save replay and permanent live set to true', async function () { | 211 | it('Should fail with save replay and permanent live set to true', async function () { |
217 | const fields = immutableAssign(baseCorrectParams, { saveReplay: true, permanentLive: true }) | 212 | const fields = { ...baseCorrectParams, saveReplay: true, permanentLive: true } |
218 | 213 | ||
219 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 214 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) |
220 | }) | 215 | }) |
@@ -227,16 +222,18 @@ describe('Test video lives API validator', function () { | |||
227 | path, | 222 | path, |
228 | token: server.accessToken, | 223 | token: server.accessToken, |
229 | fields: baseCorrectParams, | 224 | fields: baseCorrectParams, |
230 | statusCodeExpected: HttpStatusCode.OK_200 | 225 | expectedStatus: HttpStatusCode.OK_200 |
231 | }) | 226 | }) |
232 | 227 | ||
233 | video = res.body.video | 228 | video = res.body.video |
234 | }) | 229 | }) |
235 | 230 | ||
236 | it('Should forbid if live is disabled', async function () { | 231 | it('Should forbid if live is disabled', async function () { |
237 | await updateCustomSubConfig(server.url, server.accessToken, { | 232 | await server.config.updateCustomSubConfig({ |
238 | live: { | 233 | newConfig: { |
239 | enabled: false | 234 | live: { |
235 | enabled: false | ||
236 | } | ||
240 | } | 237 | } |
241 | }) | 238 | }) |
242 | 239 | ||
@@ -245,17 +242,19 @@ describe('Test video lives API validator', function () { | |||
245 | path, | 242 | path, |
246 | token: server.accessToken, | 243 | token: server.accessToken, |
247 | fields: baseCorrectParams, | 244 | fields: baseCorrectParams, |
248 | statusCodeExpected: HttpStatusCode.FORBIDDEN_403 | 245 | expectedStatus: HttpStatusCode.FORBIDDEN_403 |
249 | }) | 246 | }) |
250 | }) | 247 | }) |
251 | 248 | ||
252 | it('Should forbid to save replay if not enabled by the admin', async function () { | 249 | it('Should forbid to save replay if not enabled by the admin', async function () { |
253 | const fields = immutableAssign(baseCorrectParams, { saveReplay: true }) | 250 | const fields = { ...baseCorrectParams, saveReplay: true } |
254 | 251 | ||
255 | await updateCustomSubConfig(server.url, server.accessToken, { | 252 | await server.config.updateCustomSubConfig({ |
256 | live: { | 253 | newConfig: { |
257 | enabled: true, | 254 | live: { |
258 | allowReplay: false | 255 | enabled: true, |
256 | allowReplay: false | ||
257 | } | ||
259 | } | 258 | } |
260 | }) | 259 | }) |
261 | 260 | ||
@@ -264,17 +263,19 @@ describe('Test video lives API validator', function () { | |||
264 | path, | 263 | path, |
265 | token: server.accessToken, | 264 | token: server.accessToken, |
266 | fields, | 265 | fields, |
267 | statusCodeExpected: HttpStatusCode.FORBIDDEN_403 | 266 | expectedStatus: HttpStatusCode.FORBIDDEN_403 |
268 | }) | 267 | }) |
269 | }) | 268 | }) |
270 | 269 | ||
271 | it('Should allow to save replay if enabled by the admin', async function () { | 270 | it('Should allow to save replay if enabled by the admin', async function () { |
272 | const fields = immutableAssign(baseCorrectParams, { saveReplay: true }) | 271 | const fields = { ...baseCorrectParams, saveReplay: true } |
273 | 272 | ||
274 | await updateCustomSubConfig(server.url, server.accessToken, { | 273 | await server.config.updateCustomSubConfig({ |
275 | live: { | 274 | newConfig: { |
276 | enabled: true, | 275 | live: { |
277 | allowReplay: true | 276 | enabled: true, |
277 | allowReplay: true | ||
278 | } | ||
278 | } | 279 | } |
279 | }) | 280 | }) |
280 | 281 | ||
@@ -283,15 +284,17 @@ describe('Test video lives API validator', function () { | |||
283 | path, | 284 | path, |
284 | token: server.accessToken, | 285 | token: server.accessToken, |
285 | fields, | 286 | fields, |
286 | statusCodeExpected: HttpStatusCode.OK_200 | 287 | expectedStatus: HttpStatusCode.OK_200 |
287 | }) | 288 | }) |
288 | }) | 289 | }) |
289 | 290 | ||
290 | it('Should not allow live if max instance lives is reached', async function () { | 291 | it('Should not allow live if max instance lives is reached', async function () { |
291 | await updateCustomSubConfig(server.url, server.accessToken, { | 292 | await server.config.updateCustomSubConfig({ |
292 | live: { | 293 | newConfig: { |
293 | enabled: true, | 294 | live: { |
294 | maxInstanceLives: 1 | 295 | enabled: true, |
296 | maxInstanceLives: 1 | ||
297 | } | ||
295 | } | 298 | } |
296 | }) | 299 | }) |
297 | 300 | ||
@@ -300,16 +303,18 @@ describe('Test video lives API validator', function () { | |||
300 | path, | 303 | path, |
301 | token: server.accessToken, | 304 | token: server.accessToken, |
302 | fields: baseCorrectParams, | 305 | fields: baseCorrectParams, |
303 | statusCodeExpected: HttpStatusCode.FORBIDDEN_403 | 306 | expectedStatus: HttpStatusCode.FORBIDDEN_403 |
304 | }) | 307 | }) |
305 | }) | 308 | }) |
306 | 309 | ||
307 | it('Should not allow live if max user lives is reached', async function () { | 310 | it('Should not allow live if max user lives is reached', async function () { |
308 | await updateCustomSubConfig(server.url, server.accessToken, { | 311 | await server.config.updateCustomSubConfig({ |
309 | live: { | 312 | newConfig: { |
310 | enabled: true, | 313 | live: { |
311 | maxInstanceLives: 20, | 314 | enabled: true, |
312 | maxUserLives: 1 | 315 | maxInstanceLives: 20, |
316 | maxUserLives: 1 | ||
317 | } | ||
313 | } | 318 | } |
314 | }) | 319 | }) |
315 | 320 | ||
@@ -318,7 +323,7 @@ describe('Test video lives API validator', function () { | |||
318 | path, | 323 | path, |
319 | token: server.accessToken, | 324 | token: server.accessToken, |
320 | fields: baseCorrectParams, | 325 | fields: baseCorrectParams, |
321 | statusCodeExpected: HttpStatusCode.FORBIDDEN_403 | 326 | expectedStatus: HttpStatusCode.FORBIDDEN_403 |
322 | }) | 327 | }) |
323 | }) | 328 | }) |
324 | }) | 329 | }) |
@@ -326,110 +331,112 @@ describe('Test video lives API validator', function () { | |||
326 | describe('When getting live information', function () { | 331 | describe('When getting live information', function () { |
327 | 332 | ||
328 | it('Should fail without access token', async function () { | 333 | it('Should fail without access token', async function () { |
329 | await getLive(server.url, '', video.id, HttpStatusCode.UNAUTHORIZED_401) | 334 | await command.get({ token: '', videoId: video.id, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) |
330 | }) | 335 | }) |
331 | 336 | ||
332 | it('Should fail with a bad access token', async function () { | 337 | it('Should fail with a bad access token', async function () { |
333 | await getLive(server.url, 'toto', video.id, HttpStatusCode.UNAUTHORIZED_401) | 338 | await command.get({ token: 'toto', videoId: video.id, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) |
334 | }) | 339 | }) |
335 | 340 | ||
336 | it('Should fail with access token of another user', async function () { | 341 | it('Should fail with access token of another user', async function () { |
337 | await getLive(server.url, userAccessToken, video.id, HttpStatusCode.FORBIDDEN_403) | 342 | await command.get({ token: userAccessToken, videoId: video.id, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) |
338 | }) | 343 | }) |
339 | 344 | ||
340 | it('Should fail with a bad video id', async function () { | 345 | it('Should fail with a bad video id', async function () { |
341 | await getLive(server.url, server.accessToken, 'toto', HttpStatusCode.BAD_REQUEST_400) | 346 | await command.get({ videoId: 'toto', expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) |
342 | }) | 347 | }) |
343 | 348 | ||
344 | it('Should fail with an unknown video id', async function () { | 349 | it('Should fail with an unknown video id', async function () { |
345 | await getLive(server.url, server.accessToken, 454555, HttpStatusCode.NOT_FOUND_404) | 350 | await command.get({ videoId: 454555, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) |
346 | }) | 351 | }) |
347 | 352 | ||
348 | it('Should fail with a non live video', async function () { | 353 | it('Should fail with a non live video', async function () { |
349 | await getLive(server.url, server.accessToken, videoIdNotLive, HttpStatusCode.NOT_FOUND_404) | 354 | await command.get({ videoId: videoIdNotLive, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) |
350 | }) | 355 | }) |
351 | 356 | ||
352 | it('Should succeed with the correct params', async function () { | 357 | it('Should succeed with the correct params', async function () { |
353 | await getLive(server.url, server.accessToken, video.id) | 358 | await command.get({ videoId: video.id }) |
354 | await getLive(server.url, server.accessToken, video.shortUUID) | 359 | await command.get({ videoId: video.uuid }) |
360 | await command.get({ videoId: video.shortUUID }) | ||
355 | }) | 361 | }) |
356 | }) | 362 | }) |
357 | 363 | ||
358 | describe('When updating live information', async function () { | 364 | describe('When updating live information', async function () { |
359 | 365 | ||
360 | it('Should fail without access token', async function () { | 366 | it('Should fail without access token', async function () { |
361 | await updateLive(server.url, '', video.id, {}, HttpStatusCode.UNAUTHORIZED_401) | 367 | await command.update({ token: '', videoId: video.id, fields: {}, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) |
362 | }) | 368 | }) |
363 | 369 | ||
364 | it('Should fail with a bad access token', async function () { | 370 | it('Should fail with a bad access token', async function () { |
365 | await updateLive(server.url, 'toto', video.id, {}, HttpStatusCode.UNAUTHORIZED_401) | 371 | await command.update({ token: 'toto', videoId: video.id, fields: {}, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) |
366 | }) | 372 | }) |
367 | 373 | ||
368 | it('Should fail with access token of another user', async function () { | 374 | it('Should fail with access token of another user', async function () { |
369 | await updateLive(server.url, userAccessToken, video.id, {}, HttpStatusCode.FORBIDDEN_403) | 375 | await command.update({ token: userAccessToken, videoId: video.id, fields: {}, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) |
370 | }) | 376 | }) |
371 | 377 | ||
372 | it('Should fail with a bad video id', async function () { | 378 | it('Should fail with a bad video id', async function () { |
373 | await updateLive(server.url, server.accessToken, 'toto', {}, HttpStatusCode.BAD_REQUEST_400) | 379 | await command.update({ videoId: 'toto', fields: {}, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) |
374 | }) | 380 | }) |
375 | 381 | ||
376 | it('Should fail with an unknown video id', async function () { | 382 | it('Should fail with an unknown video id', async function () { |
377 | await updateLive(server.url, server.accessToken, 454555, {}, HttpStatusCode.NOT_FOUND_404) | 383 | await command.update({ videoId: 454555, fields: {}, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) |
378 | }) | 384 | }) |
379 | 385 | ||
380 | it('Should fail with a non live video', async function () { | 386 | it('Should fail with a non live video', async function () { |
381 | await updateLive(server.url, server.accessToken, videoIdNotLive, {}, HttpStatusCode.NOT_FOUND_404) | 387 | await command.update({ videoId: videoIdNotLive, fields: {}, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) |
382 | }) | 388 | }) |
383 | 389 | ||
384 | it('Should fail with save replay and permanent live set to true', async function () { | 390 | it('Should fail with save replay and permanent live set to true', async function () { |
385 | const fields = { saveReplay: true, permanentLive: true } | 391 | const fields = { saveReplay: true, permanentLive: true } |
386 | 392 | ||
387 | await updateLive(server.url, server.accessToken, video.id, fields, HttpStatusCode.BAD_REQUEST_400) | 393 | await command.update({ videoId: video.id, fields, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) |
388 | }) | 394 | }) |
389 | 395 | ||
390 | it('Should succeed with the correct params', async function () { | 396 | it('Should succeed with the correct params', async function () { |
391 | await updateLive(server.url, server.accessToken, video.id, { saveReplay: false }) | 397 | await command.update({ videoId: video.id, fields: { saveReplay: false } }) |
392 | await updateLive(server.url, server.accessToken, video.shortUUID, { saveReplay: false }) | 398 | await command.update({ videoId: video.uuid, fields: { saveReplay: false } }) |
399 | await command.update({ videoId: video.shortUUID, fields: { saveReplay: false } }) | ||
393 | }) | 400 | }) |
394 | 401 | ||
395 | it('Should fail to update replay status if replay is not allowed on the instance', async function () { | 402 | it('Should fail to update replay status if replay is not allowed on the instance', async function () { |
396 | await updateCustomSubConfig(server.url, server.accessToken, { | 403 | await server.config.updateCustomSubConfig({ |
397 | live: { | 404 | newConfig: { |
398 | enabled: true, | 405 | live: { |
399 | allowReplay: false | 406 | enabled: true, |
407 | allowReplay: false | ||
408 | } | ||
400 | } | 409 | } |
401 | }) | 410 | }) |
402 | 411 | ||
403 | await updateLive(server.url, server.accessToken, video.id, { saveReplay: true }, HttpStatusCode.FORBIDDEN_403) | 412 | await command.update({ videoId: video.id, fields: { saveReplay: true }, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) |
404 | }) | 413 | }) |
405 | 414 | ||
406 | it('Should fail to update a live if it has already started', async function () { | 415 | it('Should fail to update a live if it has already started', async function () { |
407 | this.timeout(40000) | 416 | this.timeout(40000) |
408 | 417 | ||
409 | const resLive = await getLive(server.url, server.accessToken, video.id) | 418 | const live = await command.get({ videoId: video.id }) |
410 | const live: LiveVideo = resLive.body | ||
411 | 419 | ||
412 | const command = sendRTMPStream(live.rtmpUrl, live.streamKey) | 420 | const ffmpegCommand = sendRTMPStream(live.rtmpUrl, live.streamKey) |
413 | 421 | ||
414 | await waitUntilLivePublished(server.url, server.accessToken, video.id) | 422 | await command.waitUntilPublished({ videoId: video.id }) |
415 | await updateLive(server.url, server.accessToken, video.id, {}, HttpStatusCode.BAD_REQUEST_400) | 423 | await command.update({ videoId: video.id, fields: {}, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) |
416 | 424 | ||
417 | await stopFfmpeg(command) | 425 | await stopFfmpeg(ffmpegCommand) |
418 | }) | 426 | }) |
419 | 427 | ||
420 | it('Should fail to stream twice in the save live', async function () { | 428 | it('Should fail to stream twice in the save live', async function () { |
421 | this.timeout(40000) | 429 | this.timeout(40000) |
422 | 430 | ||
423 | const resLive = await getLive(server.url, server.accessToken, video.id) | 431 | const live = await command.get({ videoId: video.id }) |
424 | const live: LiveVideo = resLive.body | ||
425 | 432 | ||
426 | const command = sendRTMPStream(live.rtmpUrl, live.streamKey) | 433 | const ffmpegCommand = sendRTMPStream(live.rtmpUrl, live.streamKey) |
427 | 434 | ||
428 | await waitUntilLivePublished(server.url, server.accessToken, video.id) | 435 | await command.waitUntilPublished({ videoId: video.id }) |
429 | 436 | ||
430 | await runAndTestFfmpegStreamError(server.url, server.accessToken, video.id, true) | 437 | await command.runAndTestStreamError({ videoId: video.id, shouldHaveError: true }) |
431 | 438 | ||
432 | await stopFfmpeg(command) | 439 | await stopFfmpeg(ffmpegCommand) |
433 | }) | 440 | }) |
434 | }) | 441 | }) |
435 | 442 | ||