811756745c299387ad5981ee0a0c01082eecd256
[oweals/peertube.git] / server / tests / api / check-params / videos-filter.ts
1 /* tslint:disable:no-unused-expression */
2
3 import 'mocha'
4 import {
5   cleanupTests,
6   createUser,
7   createVideoPlaylist,
8   flushAndRunServer,
9   makeGetRequest,
10   ServerInfo,
11   setAccessTokensToServers,
12   setDefaultVideoChannel,
13   userLogin
14 } from '../../../../shared/extra-utils'
15 import { UserRole } from '../../../../shared/models/users'
16 import { VideoPlaylistPrivacy } from '../../../../shared/models/videos/playlist/video-playlist-privacy.model'
17
18 async function testEndpoints (server: ServerInfo, token: string, filter: string, statusCodeExpected: number) {
19   const paths = [
20     '/api/v1/video-channels/root_channel/videos',
21     '/api/v1/accounts/root/videos',
22     '/api/v1/videos',
23     '/api/v1/search/videos'
24   ]
25
26   for (const path of paths) {
27     await makeGetRequest({
28       url: server.url,
29       path,
30       token,
31       query: {
32         filter
33       },
34       statusCodeExpected
35     })
36   }
37 }
38
39 describe('Test videos filters', function () {
40   let server: ServerInfo
41   let userAccessToken: string
42   let moderatorAccessToken: string
43
44   // ---------------------------------------------------------------
45
46   before(async function () {
47     this.timeout(30000)
48
49     server = await flushAndRunServer(1)
50
51     await setAccessTokensToServers([ server ])
52     await setDefaultVideoChannel([ server ])
53
54     const user = { username: 'user1', password: 'my super password' }
55     await createUser({ url: server.url, accessToken: server.accessToken, username: user.username, password: user.password })
56     userAccessToken = await userLogin(server, user)
57
58     const moderator = { username: 'moderator', password: 'my super password' }
59     await createUser(
60       {
61         url: server.url,
62         accessToken: server.accessToken,
63         username: moderator.username,
64         password: moderator.password,
65         videoQuota: undefined,
66         videoQuotaDaily: undefined,
67         role: UserRole.MODERATOR
68       }
69     )
70     moderatorAccessToken = await userLogin(server, moderator)
71   })
72
73   describe('When setting a video filter', function () {
74
75     it('Should fail with a bad filter', async function () {
76       await testEndpoints(server, server.accessToken, 'bad-filter', 400)
77     })
78
79     it('Should succeed with a good filter', async function () {
80       await testEndpoints(server, server.accessToken,'local', 200)
81     })
82
83     it('Should fail to list all-local with a simple user', async function () {
84       await testEndpoints(server, userAccessToken, 'all-local', 401)
85     })
86
87     it('Should succeed to list all-local with a moderator', async function () {
88       await testEndpoints(server, moderatorAccessToken, 'all-local', 200)
89     })
90
91     it('Should succeed to list all-local with an admin', async function () {
92       await testEndpoints(server, server.accessToken, 'all-local', 200)
93     })
94
95     // Because we cannot authenticate the user on the RSS endpoint
96     it('Should fail on the feeds endpoint with the all-local filter', async function () {
97       await makeGetRequest({
98         url: server.url,
99         path: '/feeds/videos.json',
100         statusCodeExpected: 401,
101         query: {
102           filter: 'all-local'
103         }
104       })
105     })
106
107     it('Should succeed on the feeds endpoint with the local filter', async function () {
108       await makeGetRequest({
109         url: server.url,
110         path: '/feeds/videos.json',
111         statusCodeExpected: 200,
112         query: {
113           filter: 'local'
114         }
115       })
116     })
117   })
118
119   after(async function () {
120     await cleanupTests([ server ])
121   })
122 })