diff options
Diffstat (limited to 'server/tests/plugins')
-rw-r--r-- | server/tests/plugins/action-hooks.ts | 2 | ||||
-rw-r--r-- | server/tests/plugins/external-auth.ts | 42 | ||||
-rw-r--r-- | server/tests/plugins/filter-hooks.ts | 96 | ||||
-rw-r--r-- | server/tests/plugins/id-and-pass-auth.ts | 34 | ||||
-rw-r--r-- | server/tests/plugins/plugin-helpers.ts | 12 |
5 files changed, 159 insertions, 27 deletions
diff --git a/server/tests/plugins/action-hooks.ts b/server/tests/plugins/action-hooks.ts index 36f8052c0..a266ae7f1 100644 --- a/server/tests/plugins/action-hooks.ts +++ b/server/tests/plugins/action-hooks.ts | |||
@@ -153,7 +153,7 @@ describe('Test plugin action hooks', function () { | |||
153 | let userId: number | 153 | let userId: number |
154 | 154 | ||
155 | it('Should run action:api.user.registered', async function () { | 155 | it('Should run action:api.user.registered', async function () { |
156 | await servers[0].users.register({ username: 'registered_user' }) | 156 | await servers[0].registrations.register({ username: 'registered_user' }) |
157 | 157 | ||
158 | await checkHook('action:api.user.registered') | 158 | await checkHook('action:api.user.registered') |
159 | }) | 159 | }) |
diff --git a/server/tests/plugins/external-auth.ts b/server/tests/plugins/external-auth.ts index 437777e90..e600f958f 100644 --- a/server/tests/plugins/external-auth.ts +++ b/server/tests/plugins/external-auth.ts | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | import { expect } from 'chai' | 3 | import { expect } from 'chai' |
4 | import { wait } from '@shared/core-utils' | 4 | import { wait } from '@shared/core-utils' |
5 | import { HttpStatusCode, UserRole } from '@shared/models' | 5 | import { HttpStatusCode, UserAdminFlag, UserRole } from '@shared/models' |
6 | import { | 6 | import { |
7 | cleanupTests, | 7 | cleanupTests, |
8 | createSingleServer, | 8 | createSingleServer, |
@@ -51,6 +51,7 @@ describe('Test external auth plugins', function () { | |||
51 | 51 | ||
52 | let kefkaAccessToken: string | 52 | let kefkaAccessToken: string |
53 | let kefkaRefreshToken: string | 53 | let kefkaRefreshToken: string |
54 | let kefkaId: number | ||
54 | 55 | ||
55 | let externalAuthToken: string | 56 | let externalAuthToken: string |
56 | 57 | ||
@@ -156,6 +157,9 @@ describe('Test external auth plugins', function () { | |||
156 | expect(body.account.displayName).to.equal('cyan') | 157 | expect(body.account.displayName).to.equal('cyan') |
157 | expect(body.email).to.equal('cyan@example.com') | 158 | expect(body.email).to.equal('cyan@example.com') |
158 | expect(body.role.id).to.equal(UserRole.USER) | 159 | expect(body.role.id).to.equal(UserRole.USER) |
160 | expect(body.adminFlags).to.equal(UserAdminFlag.NONE) | ||
161 | expect(body.videoQuota).to.equal(5242880) | ||
162 | expect(body.videoQuotaDaily).to.equal(-1) | ||
159 | } | 163 | } |
160 | }) | 164 | }) |
161 | 165 | ||
@@ -178,6 +182,11 @@ describe('Test external auth plugins', function () { | |||
178 | expect(body.account.displayName).to.equal('Kefka Palazzo') | 182 | expect(body.account.displayName).to.equal('Kefka Palazzo') |
179 | expect(body.email).to.equal('kefka@example.com') | 183 | expect(body.email).to.equal('kefka@example.com') |
180 | expect(body.role.id).to.equal(UserRole.ADMINISTRATOR) | 184 | expect(body.role.id).to.equal(UserRole.ADMINISTRATOR) |
185 | expect(body.adminFlags).to.equal(UserAdminFlag.BYPASS_VIDEO_AUTO_BLACKLIST) | ||
186 | expect(body.videoQuota).to.equal(42000) | ||
187 | expect(body.videoQuotaDaily).to.equal(42100) | ||
188 | |||
189 | kefkaId = body.id | ||
181 | } | 190 | } |
182 | }) | 191 | }) |
183 | 192 | ||
@@ -240,6 +249,37 @@ describe('Test external auth plugins', function () { | |||
240 | expect(body.role.id).to.equal(UserRole.USER) | 249 | expect(body.role.id).to.equal(UserRole.USER) |
241 | }) | 250 | }) |
242 | 251 | ||
252 | it('Should login Kefka and update the profile', async function () { | ||
253 | { | ||
254 | await server.users.update({ userId: kefkaId, videoQuota: 43000, videoQuotaDaily: 43100 }) | ||
255 | await server.users.updateMe({ token: kefkaAccessToken, displayName: 'kefka updated' }) | ||
256 | |||
257 | const body = await server.users.getMyInfo({ token: kefkaAccessToken }) | ||
258 | expect(body.username).to.equal('kefka') | ||
259 | expect(body.account.displayName).to.equal('kefka updated') | ||
260 | expect(body.videoQuota).to.equal(43000) | ||
261 | expect(body.videoQuotaDaily).to.equal(43100) | ||
262 | } | ||
263 | |||
264 | { | ||
265 | const res = await loginExternal({ | ||
266 | server, | ||
267 | npmName: 'test-external-auth-one', | ||
268 | authName: 'external-auth-2', | ||
269 | username: 'kefka' | ||
270 | }) | ||
271 | |||
272 | kefkaAccessToken = res.access_token | ||
273 | kefkaRefreshToken = res.refresh_token | ||
274 | |||
275 | const body = await server.users.getMyInfo({ token: kefkaAccessToken }) | ||
276 | expect(body.username).to.equal('kefka') | ||
277 | expect(body.account.displayName).to.equal('Kefka Palazzo') | ||
278 | expect(body.videoQuota).to.equal(42000) | ||
279 | expect(body.videoQuotaDaily).to.equal(43100) | ||
280 | } | ||
281 | }) | ||
282 | |||
243 | it('Should not update an external auth email', async function () { | 283 | it('Should not update an external auth email', async function () { |
244 | await server.users.updateMe({ | 284 | await server.users.updateMe({ |
245 | token: cyanAccessToken, | 285 | token: cyanAccessToken, |
diff --git a/server/tests/plugins/filter-hooks.ts b/server/tests/plugins/filter-hooks.ts index 083fd43ca..37eef6cf3 100644 --- a/server/tests/plugins/filter-hooks.ts +++ b/server/tests/plugins/filter-hooks.ts | |||
@@ -1,7 +1,15 @@ | |||
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 { expect } from 'chai' | 3 | import { expect } from 'chai' |
4 | import { HttpStatusCode, VideoDetails, VideoImportState, VideoPlaylist, VideoPlaylistPrivacy, VideoPrivacy } from '@shared/models' | 4 | import { |
5 | HttpStatusCode, | ||
6 | PeerTubeProblemDocument, | ||
7 | VideoDetails, | ||
8 | VideoImportState, | ||
9 | VideoPlaylist, | ||
10 | VideoPlaylistPrivacy, | ||
11 | VideoPrivacy | ||
12 | } from '@shared/models' | ||
5 | import { | 13 | import { |
6 | cleanupTests, | 14 | cleanupTests, |
7 | createMultipleServers, | 15 | createMultipleServers, |
@@ -408,28 +416,58 @@ describe('Test plugin filter hooks', function () { | |||
408 | 416 | ||
409 | describe('Should run filter:api.user.signup.allowed.result', function () { | 417 | describe('Should run filter:api.user.signup.allowed.result', function () { |
410 | 418 | ||
419 | before(async function () { | ||
420 | await servers[0].config.updateExistingSubConfig({ newConfig: { signup: { requiresApproval: false } } }) | ||
421 | }) | ||
422 | |||
411 | it('Should run on config endpoint', async function () { | 423 | it('Should run on config endpoint', async function () { |
412 | const body = await servers[0].config.getConfig() | 424 | const body = await servers[0].config.getConfig() |
413 | expect(body.signup.allowed).to.be.true | 425 | expect(body.signup.allowed).to.be.true |
414 | }) | 426 | }) |
415 | 427 | ||
416 | it('Should allow a signup', async function () { | 428 | it('Should allow a signup', async function () { |
417 | await servers[0].users.register({ username: 'john', password: 'password' }) | 429 | await servers[0].registrations.register({ username: 'john1' }) |
418 | }) | 430 | }) |
419 | 431 | ||
420 | it('Should not allow a signup', async function () { | 432 | it('Should not allow a signup', async function () { |
421 | const res = await servers[0].users.register({ | 433 | const res = await servers[0].registrations.register({ |
422 | username: 'jma', | 434 | username: 'jma 1', |
423 | password: 'password', | ||
424 | expectedStatus: HttpStatusCode.FORBIDDEN_403 | 435 | expectedStatus: HttpStatusCode.FORBIDDEN_403 |
425 | }) | 436 | }) |
426 | 437 | ||
427 | expect(res.body.error).to.equal('No jma') | 438 | expect(res.body.error).to.equal('No jma 1') |
439 | }) | ||
440 | }) | ||
441 | |||
442 | describe('Should run filter:api.user.request-signup.allowed.result', function () { | ||
443 | |||
444 | before(async function () { | ||
445 | await servers[0].config.updateExistingSubConfig({ newConfig: { signup: { requiresApproval: true } } }) | ||
446 | }) | ||
447 | |||
448 | it('Should run on config endpoint', async function () { | ||
449 | const body = await servers[0].config.getConfig() | ||
450 | expect(body.signup.allowed).to.be.true | ||
451 | }) | ||
452 | |||
453 | it('Should allow a signup request', async function () { | ||
454 | await servers[0].registrations.requestRegistration({ username: 'john2', registrationReason: 'tt' }) | ||
455 | }) | ||
456 | |||
457 | it('Should not allow a signup request', async function () { | ||
458 | const body = await servers[0].registrations.requestRegistration({ | ||
459 | username: 'jma 2', | ||
460 | registrationReason: 'tt', | ||
461 | expectedStatus: HttpStatusCode.FORBIDDEN_403 | ||
462 | }) | ||
463 | |||
464 | expect((body as unknown as PeerTubeProblemDocument).error).to.equal('No jma 2') | ||
428 | }) | 465 | }) |
429 | }) | 466 | }) |
430 | 467 | ||
431 | describe('Download hooks', function () { | 468 | describe('Download hooks', function () { |
432 | const downloadVideos: VideoDetails[] = [] | 469 | const downloadVideos: VideoDetails[] = [] |
470 | let downloadVideo2Token: string | ||
433 | 471 | ||
434 | before(async function () { | 472 | before(async function () { |
435 | this.timeout(120000) | 473 | this.timeout(120000) |
@@ -459,6 +497,8 @@ describe('Test plugin filter hooks', function () { | |||
459 | for (const uuid of uuids) { | 497 | for (const uuid of uuids) { |
460 | downloadVideos.push(await servers[0].videos.get({ id: uuid })) | 498 | downloadVideos.push(await servers[0].videos.get({ id: uuid })) |
461 | } | 499 | } |
500 | |||
501 | downloadVideo2Token = await servers[0].videoToken.getVideoFileToken({ videoId: downloadVideos[2].uuid }) | ||
462 | }) | 502 | }) |
463 | 503 | ||
464 | it('Should run filter:api.download.torrent.allowed.result', async function () { | 504 | it('Should run filter:api.download.torrent.allowed.result', async function () { |
@@ -471,32 +511,42 @@ describe('Test plugin filter hooks', function () { | |||
471 | 511 | ||
472 | it('Should run filter:api.download.video.allowed.result', async function () { | 512 | it('Should run filter:api.download.video.allowed.result', async function () { |
473 | { | 513 | { |
474 | const res = await makeRawRequest({ url: downloadVideos[1].files[0].fileDownloadUrl, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) | 514 | const refused = downloadVideos[1].files[0].fileDownloadUrl |
515 | const allowed = [ | ||
516 | downloadVideos[0].files[0].fileDownloadUrl, | ||
517 | downloadVideos[2].files[0].fileDownloadUrl | ||
518 | ] | ||
519 | |||
520 | const res = await makeRawRequest({ url: refused, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) | ||
475 | expect(res.body.error).to.equal('Cao Cao') | 521 | expect(res.body.error).to.equal('Cao Cao') |
476 | 522 | ||
477 | await makeRawRequest({ url: downloadVideos[0].files[0].fileDownloadUrl, expectedStatus: HttpStatusCode.OK_200 }) | 523 | for (const url of allowed) { |
478 | await makeRawRequest({ url: downloadVideos[2].files[0].fileDownloadUrl, expectedStatus: HttpStatusCode.OK_200 }) | 524 | await makeRawRequest({ url, expectedStatus: HttpStatusCode.OK_200 }) |
525 | await makeRawRequest({ url, expectedStatus: HttpStatusCode.OK_200 }) | ||
526 | } | ||
479 | } | 527 | } |
480 | 528 | ||
481 | { | 529 | { |
482 | const res = await makeRawRequest({ | 530 | const refused = downloadVideos[2].streamingPlaylists[0].files[0].fileDownloadUrl |
483 | url: downloadVideos[2].streamingPlaylists[0].files[0].fileDownloadUrl, | ||
484 | expectedStatus: HttpStatusCode.FORBIDDEN_403 | ||
485 | }) | ||
486 | 531 | ||
487 | expect(res.body.error).to.equal('Sun Jian') | 532 | const allowed = [ |
533 | downloadVideos[2].files[0].fileDownloadUrl, | ||
534 | downloadVideos[0].streamingPlaylists[0].files[0].fileDownloadUrl, | ||
535 | downloadVideos[1].streamingPlaylists[0].files[0].fileDownloadUrl | ||
536 | ] | ||
488 | 537 | ||
489 | await makeRawRequest({ url: downloadVideos[2].files[0].fileDownloadUrl, expectedStatus: HttpStatusCode.OK_200 }) | 538 | // Only streaming playlist is refuse |
539 | const res = await makeRawRequest({ url: refused, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) | ||
540 | expect(res.body.error).to.equal('Sun Jian') | ||
490 | 541 | ||
491 | await makeRawRequest({ | 542 | // But not we there is a user in res |
492 | url: downloadVideos[0].streamingPlaylists[0].files[0].fileDownloadUrl, | 543 | await makeRawRequest({ url: refused, token: servers[0].accessToken, expectedStatus: HttpStatusCode.OK_200 }) |
493 | expectedStatus: HttpStatusCode.OK_200 | 544 | await makeRawRequest({ url: refused, query: { videoFileToken: downloadVideo2Token }, expectedStatus: HttpStatusCode.OK_200 }) |
494 | }) | ||
495 | 545 | ||
496 | await makeRawRequest({ | 546 | // Other files work |
497 | url: downloadVideos[1].streamingPlaylists[0].files[0].fileDownloadUrl, | 547 | for (const url of allowed) { |
498 | expectedStatus: HttpStatusCode.OK_200 | 548 | await makeRawRequest({ url, expectedStatus: HttpStatusCode.OK_200 }) |
499 | }) | 549 | } |
500 | } | 550 | } |
501 | }) | 551 | }) |
502 | }) | 552 | }) |
diff --git a/server/tests/plugins/id-and-pass-auth.ts b/server/tests/plugins/id-and-pass-auth.ts index fc24a5656..10155c28b 100644 --- a/server/tests/plugins/id-and-pass-auth.ts +++ b/server/tests/plugins/id-and-pass-auth.ts | |||
@@ -13,6 +13,7 @@ describe('Test id and pass auth plugins', function () { | |||
13 | 13 | ||
14 | let lagunaAccessToken: string | 14 | let lagunaAccessToken: string |
15 | let lagunaRefreshToken: string | 15 | let lagunaRefreshToken: string |
16 | let lagunaId: number | ||
16 | 17 | ||
17 | before(async function () { | 18 | before(async function () { |
18 | this.timeout(30000) | 19 | this.timeout(30000) |
@@ -78,8 +79,10 @@ describe('Test id and pass auth plugins', function () { | |||
78 | const body = await server.users.getMyInfo({ token: lagunaAccessToken }) | 79 | const body = await server.users.getMyInfo({ token: lagunaAccessToken }) |
79 | 80 | ||
80 | expect(body.username).to.equal('laguna') | 81 | expect(body.username).to.equal('laguna') |
81 | expect(body.account.displayName).to.equal('laguna') | 82 | expect(body.account.displayName).to.equal('Laguna Loire') |
82 | expect(body.role.id).to.equal(UserRole.USER) | 83 | expect(body.role.id).to.equal(UserRole.USER) |
84 | |||
85 | lagunaId = body.id | ||
83 | } | 86 | } |
84 | }) | 87 | }) |
85 | 88 | ||
@@ -132,6 +135,33 @@ describe('Test id and pass auth plugins', function () { | |||
132 | expect(body.role.id).to.equal(UserRole.MODERATOR) | 135 | expect(body.role.id).to.equal(UserRole.MODERATOR) |
133 | }) | 136 | }) |
134 | 137 | ||
138 | it('Should login Laguna and update the profile', async function () { | ||
139 | { | ||
140 | await server.users.update({ userId: lagunaId, videoQuota: 43000, videoQuotaDaily: 43100 }) | ||
141 | await server.users.updateMe({ token: lagunaAccessToken, displayName: 'laguna updated' }) | ||
142 | |||
143 | const body = await server.users.getMyInfo({ token: lagunaAccessToken }) | ||
144 | expect(body.username).to.equal('laguna') | ||
145 | expect(body.account.displayName).to.equal('laguna updated') | ||
146 | expect(body.videoQuota).to.equal(43000) | ||
147 | expect(body.videoQuotaDaily).to.equal(43100) | ||
148 | } | ||
149 | |||
150 | { | ||
151 | const body = await server.login.login({ user: { username: 'laguna', password: 'laguna password' } }) | ||
152 | lagunaAccessToken = body.access_token | ||
153 | lagunaRefreshToken = body.refresh_token | ||
154 | } | ||
155 | |||
156 | { | ||
157 | const body = await server.users.getMyInfo({ token: lagunaAccessToken }) | ||
158 | expect(body.username).to.equal('laguna') | ||
159 | expect(body.account.displayName).to.equal('Laguna Loire') | ||
160 | expect(body.videoQuota).to.equal(42000) | ||
161 | expect(body.videoQuotaDaily).to.equal(43100) | ||
162 | } | ||
163 | }) | ||
164 | |||
135 | it('Should reject token of laguna by the plugin hook', async function () { | 165 | it('Should reject token of laguna by the plugin hook', async function () { |
136 | this.timeout(10000) | 166 | this.timeout(10000) |
137 | 167 | ||
@@ -147,7 +177,7 @@ describe('Test id and pass auth plugins', function () { | |||
147 | await server.servers.waitUntilLog('valid username') | 177 | await server.servers.waitUntilLog('valid username') |
148 | 178 | ||
149 | await command.login({ user: { username: 'kiros', password: 'kiros password' }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | 179 | await command.login({ user: { username: 'kiros', password: 'kiros password' }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) |
150 | await server.servers.waitUntilLog('valid display name') | 180 | await server.servers.waitUntilLog('valid displayName') |
151 | 181 | ||
152 | await command.login({ user: { username: 'raine', password: 'raine password' }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) | 182 | await command.login({ user: { username: 'raine', password: 'raine password' }, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) |
153 | await server.servers.waitUntilLog('valid role') | 183 | await server.servers.waitUntilLog('valid role') |
diff --git a/server/tests/plugins/plugin-helpers.ts b/server/tests/plugins/plugin-helpers.ts index 038e3f0d6..e25992723 100644 --- a/server/tests/plugins/plugin-helpers.ts +++ b/server/tests/plugins/plugin-helpers.ts | |||
@@ -64,6 +64,18 @@ describe('Test plugin helpers', function () { | |||
64 | await servers[0].servers.waitUntilLog(`server url is ${servers[0].url}`) | 64 | await servers[0].servers.waitUntilLog(`server url is ${servers[0].url}`) |
65 | }) | 65 | }) |
66 | 66 | ||
67 | it('Should have the correct listening config', async function () { | ||
68 | const res = await makeGetRequest({ | ||
69 | url: servers[0].url, | ||
70 | path: '/plugins/test-four/router/server-listening-config', | ||
71 | expectedStatus: HttpStatusCode.OK_200 | ||
72 | }) | ||
73 | |||
74 | expect(res.body.config).to.exist | ||
75 | expect(res.body.config.hostname).to.equal('::') | ||
76 | expect(res.body.config.port).to.equal(servers[0].port) | ||
77 | }) | ||
78 | |||
67 | it('Should have the correct config', async function () { | 79 | it('Should have the correct config', async function () { |
68 | const res = await makeGetRequest({ | 80 | const res = await makeGetRequest({ |
69 | url: servers[0].url, | 81 | url: servers[0].url, |