Filter on follows actor types in about page
[oweals/peertube.git] / server / tests / api / check-params / video-abuses.ts
1 /* tslint:disable:no-unused-expression */
2
3 import 'mocha'
4
5 import {
6   cleanupTests,
7   createUser,
8   deleteVideoAbuse,
9   flushAndRunServer,
10   makeGetRequest,
11   makePostBodyRequest,
12   ServerInfo,
13   setAccessTokensToServers,
14   updateVideoAbuse,
15   uploadVideo,
16   userLogin
17 } from '../../../../shared/extra-utils'
18 import {
19   checkBadCountPagination,
20   checkBadSortPagination,
21   checkBadStartPagination
22 } from '../../../../shared/extra-utils/requests/check-api-params'
23 import { VideoAbuseState } from '../../../../shared/models/videos'
24
25 describe('Test video abuses API validators', function () {
26   let server: ServerInfo
27   let userAccessToken = ''
28   let videoAbuseId: number
29
30   // ---------------------------------------------------------------
31
32   before(async function () {
33     this.timeout(30000)
34
35     server = await flushAndRunServer(1)
36
37     await setAccessTokensToServers([ server ])
38
39     const username = 'user1'
40     const password = 'my super password'
41     await createUser({ url: server.url, accessToken: server.accessToken, username: username, password: password })
42     userAccessToken = await userLogin(server, { username, password })
43
44     const res = await uploadVideo(server.url, server.accessToken, {})
45     server.video = res.body.video
46   })
47
48   describe('When listing video abuses', function () {
49     const path = '/api/v1/videos/abuse'
50
51     it('Should fail with a bad start pagination', async function () {
52       await checkBadStartPagination(server.url, path, server.accessToken)
53     })
54
55     it('Should fail with a bad count pagination', async function () {
56       await checkBadCountPagination(server.url, path, server.accessToken)
57     })
58
59     it('Should fail with an incorrect sort', async function () {
60       await checkBadSortPagination(server.url, path, server.accessToken)
61     })
62
63     it('Should fail with a non authenticated user', async function () {
64       await makeGetRequest({
65         url: server.url,
66         path,
67         statusCodeExpected: 401
68       })
69     })
70
71     it('Should fail with a non admin user', async function () {
72       await makeGetRequest({
73         url: server.url,
74         path,
75         token: userAccessToken,
76         statusCodeExpected: 403
77       })
78     })
79   })
80
81   describe('When reporting a video abuse', function () {
82     const basePath = '/api/v1/videos/'
83     let path: string
84
85     before(() => {
86       path = basePath + server.video.id + '/abuse'
87     })
88
89     it('Should fail with nothing', async function () {
90       const fields = {}
91       await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
92     })
93
94     it('Should fail with a wrong video', async function () {
95       const wrongPath = '/api/v1/videos/blabla/abuse'
96       const fields = { reason: 'my super reason' }
97
98       await makePostBodyRequest({ url: server.url, path: wrongPath, token: server.accessToken, fields })
99     })
100
101     it('Should fail with a non authenticated user', async function () {
102       const fields = { reason: 'my super reason' }
103
104       await makePostBodyRequest({ url: server.url, path, token: 'hello', fields, statusCodeExpected: 401 })
105     })
106
107     it('Should fail with a reason too short', async function () {
108       const fields = { reason: 'h' }
109
110       await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
111     })
112
113     it('Should fail with a too big reason', async function () {
114       const fields = { reason: 'super'.repeat(605) }
115
116       await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
117     })
118
119     it('Should succeed with the correct parameters', async function () {
120       const fields = { reason: 'super reason' }
121
122       const res = await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields, statusCodeExpected: 200 })
123       videoAbuseId = res.body.videoAbuse.id
124     })
125   })
126
127   describe('When updating a video abuse', function () {
128     const basePath = '/api/v1/videos/'
129     let path: string
130
131     before(() => {
132       path = basePath + server.video.id + '/abuse/' + videoAbuseId
133     })
134
135     it('Should fail with a non authenticated user', async function () {
136       await updateVideoAbuse(server.url, 'blabla', server.video.uuid, videoAbuseId, {}, 401)
137     })
138
139     it('Should fail with a non admin user', async function () {
140       await updateVideoAbuse(server.url, userAccessToken, server.video.uuid, videoAbuseId, {}, 403)
141     })
142
143     it('Should fail with a bad video id or bad video abuse id', async function () {
144       await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, 45, {}, 404)
145       await updateVideoAbuse(server.url, server.accessToken, 52, videoAbuseId, {}, 404)
146     })
147
148     it('Should fail with a bad state', async function () {
149       const body = { state: 5 }
150       await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId, body, 400)
151     })
152
153     it('Should fail with a bad moderation comment', async function () {
154       const body = { moderationComment: 'b'.repeat(3001) }
155       await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId, body, 400)
156     })
157
158     it('Should succeed with the correct params', async function () {
159       const body = { state: VideoAbuseState.ACCEPTED }
160       await updateVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId, body)
161     })
162   })
163
164   describe('When deleting a video abuse', function () {
165     const basePath = '/api/v1/videos/'
166     let path: string
167
168     before(() => {
169       path = basePath + server.video.id + '/abuse/' + videoAbuseId
170     })
171
172     it('Should fail with a non authenticated user', async function () {
173       await deleteVideoAbuse(server.url, 'blabla', server.video.uuid, videoAbuseId, 401)
174     })
175
176     it('Should fail with a non admin user', async function () {
177       await deleteVideoAbuse(server.url, userAccessToken, server.video.uuid, videoAbuseId, 403)
178     })
179
180     it('Should fail with a bad video id or bad video abuse id', async function () {
181       await deleteVideoAbuse(server.url, server.accessToken, server.video.uuid, 45, 404)
182       await deleteVideoAbuse(server.url, server.accessToken, 52, videoAbuseId, 404)
183     })
184
185     it('Should succeed with the correct params', async function () {
186       await deleteVideoAbuse(server.url, server.accessToken, server.video.uuid, videoAbuseId)
187     })
188   })
189
190   after(async function () {
191     await cleanupTests([ server ])
192   })
193 })