aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-07-06 14:30:20 +0200
committerChocobozzz <me@florianbigard.com>2021-07-20 15:27:17 +0200
commit23a3a8827cb8b862f5cc7ee2819f39918303beca (patch)
tree93a3bdbd02787d32094d6d50aa209f2c079038a5
parent480d6ea6791fe4100f1905af1e1e3a08173594ea (diff)
downloadPeerTube-23a3a8827cb8b862f5cc7ee2819f39918303beca.tar.gz
PeerTube-23a3a8827cb8b862f5cc7ee2819f39918303beca.tar.zst
PeerTube-23a3a8827cb8b862f5cc7ee2819f39918303beca.zip
Introduce overviews command
-rw-r--r--server/tests/api/check-params/videos-overviews.ts9
-rw-r--r--server/tests/api/videos/video-nsfw.ts35
-rw-r--r--server/tests/api/videos/videos-overview.ts71
-rw-r--r--shared/extra-utils/index.ts1
-rw-r--r--shared/extra-utils/overviews/index.ts1
-rw-r--r--shared/extra-utils/overviews/overviews-command.ts25
-rw-r--r--shared/extra-utils/overviews/overviews.ts34
-rw-r--r--shared/extra-utils/server/servers.ts3
-rw-r--r--shared/extra-utils/shared/abstract-command.ts5
9 files changed, 86 insertions, 98 deletions
diff --git a/server/tests/api/check-params/videos-overviews.ts b/server/tests/api/check-params/videos-overviews.ts
index 69d7fc471..44a936c9f 100644
--- a/server/tests/api/check-params/videos-overviews.ts
+++ b/server/tests/api/check-params/videos-overviews.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
3import 'mocha' 3import 'mocha'
4import { cleanupTests, flushAndRunServer, ServerInfo } from '../../../../shared/extra-utils' 4import { cleanupTests, flushAndRunServer, ServerInfo } from '@shared/extra-utils'
5import { getVideosOverview } from '@shared/extra-utils/overviews/overviews'
6 5
7describe('Test videos overview', function () { 6describe('Test videos overview', function () {
8 let server: ServerInfo 7 let server: ServerInfo
@@ -18,12 +17,12 @@ describe('Test videos overview', function () {
18 describe('When getting videos overview', function () { 17 describe('When getting videos overview', function () {
19 18
20 it('Should fail with a bad pagination', async function () { 19 it('Should fail with a bad pagination', async function () {
21 await getVideosOverview(server.url, 0, 400) 20 await server.overviewsCommand.getVideos({ page: 0, expectedStatus: 400 })
22 await getVideosOverview(server.url, 100, 400) 21 await server.overviewsCommand.getVideos({ page: 100, expectedStatus: 400 })
23 }) 22 })
24 23
25 it('Should succeed with a good pagination', async function () { 24 it('Should succeed with a good pagination', async function () {
26 await getVideosOverview(server.url, 1) 25 await server.overviewsCommand.getVideos({ page: 1 })
27 }) 26 })
28 }) 27 })
29 28
diff --git a/server/tests/api/videos/video-nsfw.ts b/server/tests/api/videos/video-nsfw.ts
index b16b484b9..6c98c9f12 100644
--- a/server/tests/api/videos/video-nsfw.ts
+++ b/server/tests/api/videos/video-nsfw.ts
@@ -1,34 +1,33 @@
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
3import * as chai from 'chai'
4import 'mocha' 3import 'mocha'
5import { cleanupTests, getVideosList, ServerInfo, setAccessTokensToServers, uploadVideo } from '../../../../shared/extra-utils/index' 4import * as chai from 'chai'
6import { userLogin } from '../../../../shared/extra-utils/users/login'
7import { createUser } from '../../../../shared/extra-utils/users/users'
8import { getMyVideos } from '../../../../shared/extra-utils/videos/videos'
9import { 5import {
6 cleanupTests,
7 createUser,
10 flushAndRunServer, 8 flushAndRunServer,
11 getAccountVideos, 9 getAccountVideos,
12 getConfig, 10 getConfig,
13 getCustomConfig, 11 getCustomConfig,
14 getMyUserInformation, 12 getMyUserInformation,
13 getMyVideos,
15 getVideoChannelVideos, 14 getVideoChannelVideos,
15 getVideosList,
16 getVideosListWithToken, 16 getVideosListWithToken,
17 searchVideo, 17 searchVideo,
18 searchVideoWithToken, 18 searchVideoWithToken,
19 ServerInfo,
20 setAccessTokensToServers,
19 updateCustomConfig, 21 updateCustomConfig,
20 updateMyUser 22 updateMyUser,
21} from '../../../../shared/extra-utils' 23 uploadVideo,
22import { ServerConfig, VideosOverview } from '../../../../shared/models' 24 userLogin
23import { CustomConfig } from '../../../../shared/models/server/custom-config.model' 25} from '@shared/extra-utils'
24import { User } from '../../../../shared/models/users' 26import { CustomConfig, ServerConfig, User, VideosOverview } from '@shared/models'
25import { getVideosOverview, getVideosOverviewWithToken } from '@shared/extra-utils/overviews/overviews'
26 27
27const expect = chai.expect 28const expect = chai.expect
28 29
29function createOverviewRes (res: any) { 30function createOverviewRes (overview: VideosOverview) {
30 const overview = res.body as VideosOverview
31
32 const videos = overview.categories[0].videos 31 const videos = overview.categories[0].videos
33 return { body: { data: videos, total: videos.length } } 32 return { body: { data: videos, total: videos.length } }
34} 33}
@@ -57,7 +56,9 @@ describe('Test video NSFW policy', function () {
57 56
58 // Overviews do not support video filters 57 // Overviews do not support video filters
59 if (!hasQuery) { 58 if (!hasQuery) {
60 promises.push(getVideosOverviewWithToken(server.url, 1, token).then(res => createOverviewRes(res))) 59 const p = server.overviewsCommand.getVideos({ page: 1, token })
60 .then(res => createOverviewRes(res))
61 promises.push(p)
61 } 62 }
62 63
63 return Promise.all(promises) 64 return Promise.all(promises)
@@ -72,7 +73,9 @@ describe('Test video NSFW policy', function () {
72 73
73 // Overviews do not support video filters 74 // Overviews do not support video filters
74 if (!hasQuery) { 75 if (!hasQuery) {
75 promises.push(getVideosOverview(server.url, 1).then(res => createOverviewRes(res))) 76 const p = server.overviewsCommand.getVideos({ page: 1 })
77 .then(res => createOverviewRes(res))
78 promises.push(p)
76 } 79 }
77 80
78 return Promise.all(promises) 81 return Promise.all(promises)
diff --git a/server/tests/api/videos/videos-overview.ts b/server/tests/api/videos/videos-overview.ts
index c266a1dc5..c8e3df4bd 100644
--- a/server/tests/api/videos/videos-overview.ts
+++ b/server/tests/api/videos/videos-overview.ts
@@ -2,8 +2,9 @@
2 2
3import 'mocha' 3import 'mocha'
4import * as chai from 'chai' 4import * as chai from 'chai'
5 5import { Response } from 'superagent'
6import { 6import {
7 addAccountToAccountBlocklist,
7 cleanupTests, 8 cleanupTests,
8 flushAndRunServer, 9 flushAndRunServer,
9 generateUserAccessToken, 10 generateUserAccessToken,
@@ -11,20 +12,15 @@ import {
11 setAccessTokensToServers, 12 setAccessTokensToServers,
12 uploadVideo, 13 uploadVideo,
13 wait 14 wait
14} from '../../../../shared/extra-utils' 15} from '@shared/extra-utils'
15import { getVideosOverview, getVideosOverviewWithToken } from '../../../../shared/extra-utils/overviews/overviews' 16import { VideosOverview } from '@shared/models'
16import { VideosOverview } from '../../../../shared/models/overviews'
17import { addAccountToAccountBlocklist } from '@shared/extra-utils/users/blocklist'
18import { Response } from 'superagent'
19 17
20const expect = chai.expect 18const expect = chai.expect
21 19
22describe('Test a videos overview', function () { 20describe('Test a videos overview', function () {
23 let server: ServerInfo = null 21 let server: ServerInfo = null
24 22
25 function testOverviewCount (res: Response, expected: number) { 23 function testOverviewCount (overview: VideosOverview, expected: number) {
26 const overview: VideosOverview = res.body
27
28 expect(overview.tags).to.have.lengthOf(expected) 24 expect(overview.tags).to.have.lengthOf(expected)
29 expect(overview.categories).to.have.lengthOf(expected) 25 expect(overview.categories).to.have.lengthOf(expected)
30 expect(overview.channels).to.have.lengthOf(expected) 26 expect(overview.channels).to.have.lengthOf(expected)
@@ -39,9 +35,9 @@ describe('Test a videos overview', function () {
39 }) 35 })
40 36
41 it('Should send empty overview', async function () { 37 it('Should send empty overview', async function () {
42 const res = await getVideosOverview(server.url, 1) 38 const body = await server.overviewsCommand.getVideos({ page: 1 })
43 39
44 testOverviewCount(res, 0) 40 testOverviewCount(body, 0)
45 }) 41 })
46 42
47 it('Should upload 5 videos in a specific category, tag and channel but not include them in overview', async function () { 43 it('Should upload 5 videos in a specific category, tag and channel but not include them in overview', async function () {
@@ -55,34 +51,35 @@ describe('Test a videos overview', function () {
55 tags: [ 'coucou1', 'coucou2' ] 51 tags: [ 'coucou1', 'coucou2' ]
56 }) 52 })
57 53
58 const res = await getVideosOverview(server.url, 1) 54 const body = await server.overviewsCommand.getVideos({ page: 1 })
59 55
60 testOverviewCount(res, 0) 56 testOverviewCount(body, 0)
61 }) 57 })
62 58
63 it('Should upload another video and include all videos in the overview', async function () { 59 it('Should upload another video and include all videos in the overview', async function () {
64 this.timeout(30000) 60 this.timeout(30000)
65 61
66 for (let i = 1; i < 6; i++) { 62 {
67 await uploadVideo(server.url, server.accessToken, { 63 for (let i = 1; i < 6; i++) {
68 name: 'video ' + i, 64 await uploadVideo(server.url, server.accessToken, {
69 category: 3, 65 name: 'video ' + i,
70 tags: [ 'coucou1', 'coucou2' ] 66 category: 3,
71 }) 67 tags: [ 'coucou1', 'coucou2' ]
68 })
69 }
70
71 await wait(3000)
72 } 72 }
73 73
74 await wait(3000)
75
76 { 74 {
77 const res = await getVideosOverview(server.url, 1) 75 const body = await server.overviewsCommand.getVideos({ page: 1 })
78 76
79 testOverviewCount(res, 1) 77 testOverviewCount(body, 1)
80 } 78 }
81 79
82 { 80 {
83 const res = await getVideosOverview(server.url, 2) 81 const overview = await server.overviewsCommand.getVideos({ page: 2 })
84 82
85 const overview: VideosOverview = res.body
86 expect(overview.tags).to.have.lengthOf(1) 83 expect(overview.tags).to.have.lengthOf(1)
87 expect(overview.categories).to.have.lengthOf(0) 84 expect(overview.categories).to.have.lengthOf(0)
88 expect(overview.channels).to.have.lengthOf(0) 85 expect(overview.channels).to.have.lengthOf(0)
@@ -90,20 +87,10 @@ describe('Test a videos overview', function () {
90 }) 87 })
91 88
92 it('Should have the correct overview', async function () { 89 it('Should have the correct overview', async function () {
93 const res1 = await getVideosOverview(server.url, 1) 90 const overview1 = await server.overviewsCommand.getVideos({ page: 1 })
94 const res2 = await getVideosOverview(server.url, 2) 91 const overview2 = await server.overviewsCommand.getVideos({ page: 2 })
95
96 const overview1: VideosOverview = res1.body
97 const overview2: VideosOverview = res2.body
98
99 const tmp = [
100 overview1.tags,
101 overview1.categories,
102 overview1.channels,
103 overview2.tags
104 ]
105 92
106 for (const arr of tmp) { 93 for (const arr of [ overview1.tags, overview1.categories, overview1.channels, overview2.tags ]) {
107 expect(arr).to.have.lengthOf(1) 94 expect(arr).to.have.lengthOf(1)
108 95
109 const obj = arr[0] 96 const obj = arr[0]
@@ -132,15 +119,15 @@ describe('Test a videos overview', function () {
132 await addAccountToAccountBlocklist(server.url, token, 'root@' + server.host) 119 await addAccountToAccountBlocklist(server.url, token, 'root@' + server.host)
133 120
134 { 121 {
135 const res = await getVideosOverview(server.url, 1) 122 const body = await server.overviewsCommand.getVideos({ page: 1 })
136 123
137 testOverviewCount(res, 1) 124 testOverviewCount(body, 1)
138 } 125 }
139 126
140 { 127 {
141 const res = await getVideosOverviewWithToken(server.url, 1, token) 128 const body = await server.overviewsCommand.getVideos({ page: 1, token })
142 129
143 testOverviewCount(res, 0) 130 testOverviewCount(body, 0)
144 } 131 }
145 }) 132 })
146 133
diff --git a/shared/extra-utils/index.ts b/shared/extra-utils/index.ts
index 7ca079c78..38c8c4c1c 100644
--- a/shared/extra-utils/index.ts
+++ b/shared/extra-utils/index.ts
@@ -6,6 +6,7 @@ export * from './logs'
6export * from './miscs' 6export * from './miscs'
7export * from './mock-servers' 7export * from './mock-servers'
8export * from './moderation' 8export * from './moderation'
9export * from './overviews'
9 10
10export * from './requests/check-api-params' 11export * from './requests/check-api-params'
11export * from './requests/requests' 12export * from './requests/requests'
diff --git a/shared/extra-utils/overviews/index.ts b/shared/extra-utils/overviews/index.ts
new file mode 100644
index 000000000..e19551907
--- /dev/null
+++ b/shared/extra-utils/overviews/index.ts
@@ -0,0 +1 @@
export * from './overviews-command'
diff --git a/shared/extra-utils/overviews/overviews-command.ts b/shared/extra-utils/overviews/overviews-command.ts
new file mode 100644
index 000000000..0ac3cbd33
--- /dev/null
+++ b/shared/extra-utils/overviews/overviews-command.ts
@@ -0,0 +1,25 @@
1import { HttpStatusCode } from '@shared/core-utils'
2import { VideosOverview } from '@shared/models'
3import { AbstractCommand, OverrideCommandOptions } from '../shared'
4
5export class OverviewsCommand extends AbstractCommand {
6
7 getVideos (options: OverrideCommandOptions & {
8 page: number
9 token?: string
10 }) {
11 const { token, page } = options
12 const path = '/api/v1/overviews/videos'
13
14 const query = { page }
15
16 return this.getRequestBody<VideosOverview>({
17 ...options,
18
19 token: token || null,
20 path,
21 query,
22 defaultExpectedStatus: HttpStatusCode.OK_200
23 })
24 }
25}
diff --git a/shared/extra-utils/overviews/overviews.ts b/shared/extra-utils/overviews/overviews.ts
deleted file mode 100644
index 5e1a13e5e..000000000
--- a/shared/extra-utils/overviews/overviews.ts
+++ /dev/null
@@ -1,34 +0,0 @@
1import { makeGetRequest } from '../requests/requests'
2import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
3
4function getVideosOverview (url: string, page: number, statusCodeExpected = HttpStatusCode.OK_200) {
5 const path = '/api/v1/overviews/videos'
6
7 const query = { page }
8
9 return makeGetRequest({
10 url,
11 path,
12 query,
13 statusCodeExpected
14 })
15}
16
17function getVideosOverviewWithToken (url: string, page: number, token: string, statusCodeExpected = HttpStatusCode.OK_200) {
18 const path = '/api/v1/overviews/videos'
19
20 const query = { page }
21
22 return makeGetRequest({
23 url,
24 path,
25 query,
26 token,
27 statusCodeExpected
28 })
29}
30
31export {
32 getVideosOverview,
33 getVideosOverviewWithToken
34}
diff --git a/shared/extra-utils/server/servers.ts b/shared/extra-utils/server/servers.ts
index f05f0dbbe..70be96cf6 100644
--- a/shared/extra-utils/server/servers.ts
+++ b/shared/extra-utils/server/servers.ts
@@ -13,6 +13,7 @@ import { FeedCommand } from '../feeds'
13import { LogsCommand } from '../logs' 13import { LogsCommand } from '../logs'
14import { buildServerDirectory, getFileSize, isGithubCI, root, wait } from '../miscs/miscs' 14import { buildServerDirectory, getFileSize, isGithubCI, root, wait } from '../miscs/miscs'
15import { AbusesCommand } from '../moderation' 15import { AbusesCommand } from '../moderation'
16import { OverviewsCommand } from '../overviews'
16import { makeGetRequest } from '../requests/requests' 17import { makeGetRequest } from '../requests/requests'
17 18
18interface ServerInfo { 19interface ServerInfo {
@@ -73,6 +74,7 @@ interface ServerInfo {
73 feedCommand?: FeedCommand 74 feedCommand?: FeedCommand
74 logsCommand?: LogsCommand 75 logsCommand?: LogsCommand
75 abusesCommand?: AbusesCommand 76 abusesCommand?: AbusesCommand
77 overviewsCommand?: OverviewsCommand
76} 78}
77 79
78function parallelTests () { 80function parallelTests () {
@@ -284,6 +286,7 @@ async function runServer (server: ServerInfo, configOverrideArg?: any, args = []
284 server.feedCommand = new FeedCommand(server) 286 server.feedCommand = new FeedCommand(server)
285 server.logsCommand = new LogsCommand(server) 287 server.logsCommand = new LogsCommand(server)
286 server.abusesCommand = new AbusesCommand(server) 288 server.abusesCommand = new AbusesCommand(server)
289 server.overviewsCommand = new OverviewsCommand(server)
287 290
288 res(server) 291 res(server)
289 }) 292 })
diff --git a/shared/extra-utils/shared/abstract-command.ts b/shared/extra-utils/shared/abstract-command.ts
index 3ee5cd865..3815fab0e 100644
--- a/shared/extra-utils/shared/abstract-command.ts
+++ b/shared/extra-utils/shared/abstract-command.ts
@@ -78,7 +78,10 @@ abstract class AbstractCommand {
78 return { 78 return {
79 url: this.server.url, 79 url: this.server.url,
80 path, 80 path,
81 token: token ?? this.server.accessToken, 81
82 // Token can be null if we don't want to add it
83 token: token !== undefined ? token : this.server.accessToken,
84
82 statusCodeExpected: expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus 85 statusCodeExpected: expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus
83 } 86 }
84 } 87 }