]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/check-params/abuses.ts
Add server API to abuse messages
[github/Chocobozzz/PeerTube.git] / server / tests / api / check-params / abuses.ts
CommitLineData
57f6896f
C
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2
3import 'mocha'
4import { AbuseCreate, AbuseState } from '@shared/models'
5import {
6 cleanupTests,
7 createUser,
8 deleteAbuse,
9 flushAndRunServer,
10 makeGetRequest,
11 makePostBodyRequest,
12 ServerInfo,
13 setAccessTokensToServers,
14 updateAbuse,
15 uploadVideo,
edbc9325
C
16 userLogin,
17 generateUserAccessToken,
18 addAbuseMessage,
19 listAbuseMessages,
20 deleteAbuseMessage
57f6896f
C
21} from '../../../../shared/extra-utils'
22import {
23 checkBadCountPagination,
24 checkBadSortPagination,
25 checkBadStartPagination
26} from '../../../../shared/extra-utils/requests/check-api-params'
27
310b5219 28describe('Test abuses API validators', function () {
57f6896f
C
29 const basePath = '/api/v1/abuses/'
30
31 let server: ServerInfo
32 let userAccessToken = ''
edbc9325 33 let userAccessToken2 = ''
57f6896f 34 let abuseId: number
edbc9325 35 let messageId: number
57f6896f
C
36
37 // ---------------------------------------------------------------
38
39 before(async function () {
40 this.timeout(30000)
41
42 server = await flushAndRunServer(1)
43
44 await setAccessTokensToServers([ server ])
45
46 const username = 'user1'
47 const password = 'my super password'
48 await createUser({ url: server.url, accessToken: server.accessToken, username: username, password: password })
49 userAccessToken = await userLogin(server, { username, password })
50
edbc9325
C
51 {
52 userAccessToken2 = await generateUserAccessToken(server, 'user_2')
53 }
54
57f6896f
C
55 const res = await uploadVideo(server.url, server.accessToken, {})
56 server.video = res.body.video
57 })
58
edbc9325 59 describe('When listing abuses for admins', function () {
57f6896f
C
60 const path = basePath
61
62 it('Should fail with a bad start pagination', async function () {
63 await checkBadStartPagination(server.url, path, server.accessToken)
64 })
65
66 it('Should fail with a bad count pagination', async function () {
67 await checkBadCountPagination(server.url, path, server.accessToken)
68 })
69
70 it('Should fail with an incorrect sort', async function () {
71 await checkBadSortPagination(server.url, path, server.accessToken)
72 })
73
74 it('Should fail with a non authenticated user', async function () {
75 await makeGetRequest({
76 url: server.url,
77 path,
78 statusCodeExpected: 401
79 })
80 })
81
82 it('Should fail with a non admin user', async function () {
83 await makeGetRequest({
84 url: server.url,
85 path,
86 token: userAccessToken,
87 statusCodeExpected: 403
88 })
89 })
90
91 it('Should fail with a bad id filter', async function () {
92 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { id: 'toto' } })
93 })
94
95 it('Should fail with a bad filter', async function () {
96 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { filter: 'toto' } })
97 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { filter: 'videos' } })
98 })
99
100 it('Should fail with bad predefined reason', async function () {
101 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { predefinedReason: 'violentOrRepulsives' } })
102 })
103
104 it('Should fail with a bad state filter', async function () {
105 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { state: 'toto' } })
106 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { state: 0 } })
107 })
108
109 it('Should fail with a bad videoIs filter', async function () {
110 await makeGetRequest({ url: server.url, path, token: server.accessToken, query: { videoIs: 'toto' } })
111 })
112
113 it('Should succeed with the correct params', async function () {
114 const query = {
115 id: 13,
116 predefinedReason: 'violentOrRepulsive',
117 filter: 'comment',
118 state: 2,
119 videoIs: 'deleted'
120 }
121
122 await makeGetRequest({ url: server.url, path, token: server.accessToken, query, statusCodeExpected: 200 })
123 })
124 })
125
edbc9325
C
126 describe('When listing abuses for users', function () {
127 const path = '/api/v1/users/me/abuses'
128
129 it('Should fail with a bad start pagination', async function () {
130 await checkBadStartPagination(server.url, path, userAccessToken)
131 })
132
133 it('Should fail with a bad count pagination', async function () {
134 await checkBadCountPagination(server.url, path, userAccessToken)
135 })
136
137 it('Should fail with an incorrect sort', async function () {
138 await checkBadSortPagination(server.url, path, userAccessToken)
139 })
140
141 it('Should fail with a non authenticated user', async function () {
142 await makeGetRequest({
143 url: server.url,
144 path,
145 statusCodeExpected: 401
146 })
147 })
148
149 it('Should fail with a bad id filter', async function () {
150 await makeGetRequest({ url: server.url, path, token: userAccessToken, query: { id: 'toto' } })
151 })
152
153 it('Should fail with a bad state filter', async function () {
154 await makeGetRequest({ url: server.url, path, token: userAccessToken, query: { state: 'toto' } })
155 await makeGetRequest({ url: server.url, path, token: userAccessToken, query: { state: 0 } })
156 })
157
158 it('Should succeed with the correct params', async function () {
159 const query = {
160 id: 13,
161 state: 2
162 }
163
164 await makeGetRequest({ url: server.url, path, token: userAccessToken, query, statusCodeExpected: 200 })
165 })
166 })
167
57f6896f
C
168 describe('When reporting an abuse', function () {
169 const path = basePath
170
171 it('Should fail with nothing', async function () {
172 const fields = {}
edbc9325 173 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields })
57f6896f
C
174 })
175
176 it('Should fail with a wrong video', async function () {
177 const fields = { video: { id: 'blabla' }, reason: 'my super reason' }
edbc9325 178 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields })
57f6896f
C
179 })
180
181 it('Should fail with an unknown video', async function () {
182 const fields = { video: { id: 42 }, reason: 'my super reason' }
edbc9325 183 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields, statusCodeExpected: 404 })
57f6896f
C
184 })
185
186 it('Should fail with a wrong comment', async function () {
187 const fields = { comment: { id: 'blabla' }, reason: 'my super reason' }
edbc9325 188 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields })
57f6896f
C
189 })
190
191 it('Should fail with an unknown comment', async function () {
192 const fields = { comment: { id: 42 }, reason: 'my super reason' }
edbc9325 193 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields, statusCodeExpected: 404 })
57f6896f
C
194 })
195
196 it('Should fail with a wrong account', async function () {
197 const fields = { account: { id: 'blabla' }, reason: 'my super reason' }
edbc9325 198 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields })
57f6896f
C
199 })
200
201 it('Should fail with an unknown account', async function () {
202 const fields = { account: { id: 42 }, reason: 'my super reason' }
edbc9325 203 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields, statusCodeExpected: 404 })
57f6896f
C
204 })
205
206 it('Should fail with not account, comment or video', async function () {
207 const fields = { reason: 'my super reason' }
edbc9325 208 await makePostBodyRequest({ url: server.url, path: path, token: userAccessToken, fields, statusCodeExpected: 400 })
57f6896f
C
209 })
210
211 it('Should fail with a non authenticated user', async function () {
212 const fields = { video: { id: server.video.id }, reason: 'my super reason' }
213
214 await makePostBodyRequest({ url: server.url, path, token: 'hello', fields, statusCodeExpected: 401 })
215 })
216
217 it('Should fail with a reason too short', async function () {
218 const fields = { video: { id: server.video.id }, reason: 'h' }
219
edbc9325 220 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields })
57f6896f
C
221 })
222
223 it('Should fail with a too big reason', async function () {
224 const fields = { video: { id: server.video.id }, reason: 'super'.repeat(605) }
225
edbc9325 226 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields })
57f6896f
C
227 })
228
229 it('Should succeed with the correct parameters (basic)', async function () {
230 const fields: AbuseCreate = { video: { id: server.video.id }, reason: 'my super reason' }
231
edbc9325 232 const res = await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields, statusCodeExpected: 200 })
57f6896f
C
233 abuseId = res.body.abuse.id
234 })
235
236 it('Should fail with a wrong predefined reason', async function () {
237 const fields = { video: { id: server.video.id }, reason: 'my super reason', predefinedReasons: [ 'wrongPredefinedReason' ] }
238
edbc9325 239 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields })
57f6896f
C
240 })
241
242 it('Should fail with negative timestamps', async function () {
243 const fields = { video: { id: server.video.id, startAt: -1 }, reason: 'my super reason' }
244
edbc9325 245 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields })
57f6896f
C
246 })
247
248 it('Should fail mith misordered startAt/endAt', async function () {
249 const fields = { video: { id: server.video.id, startAt: 5, endAt: 1 }, reason: 'my super reason' }
250
edbc9325 251 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields })
57f6896f
C
252 })
253
254 it('Should succeed with the corret parameters (advanced)', async function () {
255 const fields: AbuseCreate = {
256 video: {
257 id: server.video.id,
258 startAt: 1,
259 endAt: 5
260 },
261 reason: 'my super reason',
262 predefinedReasons: [ 'serverRules' ]
263 }
264
edbc9325 265 await makePostBodyRequest({ url: server.url, path, token: userAccessToken, fields, statusCodeExpected: 200 })
57f6896f
C
266 })
267 })
268
269 describe('When updating an abuse', function () {
270
271 it('Should fail with a non authenticated user', async function () {
272 await updateAbuse(server.url, 'blabla', abuseId, {}, 401)
273 })
274
275 it('Should fail with a non admin user', async function () {
276 await updateAbuse(server.url, userAccessToken, abuseId, {}, 403)
277 })
278
279 it('Should fail with a bad abuse id', async function () {
280 await updateAbuse(server.url, server.accessToken, 45, {}, 404)
281 })
282
283 it('Should fail with a bad state', async function () {
284 const body = { state: 5 }
285 await updateAbuse(server.url, server.accessToken, abuseId, body, 400)
286 })
287
288 it('Should fail with a bad moderation comment', async function () {
289 const body = { moderationComment: 'b'.repeat(3001) }
290 await updateAbuse(server.url, server.accessToken, abuseId, body, 400)
291 })
292
293 it('Should succeed with the correct params', async function () {
294 const body = { state: AbuseState.ACCEPTED }
295 await updateAbuse(server.url, server.accessToken, abuseId, body)
296 })
297 })
298
edbc9325
C
299 describe('When creating an abuse message', function () {
300 const message = 'my super message'
301
302 it('Should fail with an invalid abuse id', async function () {
303 await addAbuseMessage(server.url, userAccessToken2, 888, message, 404)
304 })
305
306 it('Should fail with a non authenticated user', async function () {
307 await addAbuseMessage(server.url, 'fake_token', abuseId, message, 401)
308 })
309
310 it('Should fail with an invalid logged in user', async function () {
311 await addAbuseMessage(server.url, userAccessToken2, abuseId, message, 403)
312 })
313
314 it('Should fail with an invalid message', async function () {
315 await addAbuseMessage(server.url, userAccessToken, abuseId, 'a'.repeat(5000), 400)
316 })
317
318 it('Should suceed with the correct params', async function () {
319 const res = await addAbuseMessage(server.url, userAccessToken, abuseId, message)
320 messageId = res.body.abuseMessage.id
321 })
322 })
323
324 describe('When listing abuse message', function () {
325
326 it('Should fail with an invalid abuse id', async function () {
327 await listAbuseMessages(server.url, userAccessToken, 888, 404)
328 })
329
330 it('Should fail with a non authenticated user', async function () {
331 await listAbuseMessages(server.url, 'fake_token', abuseId, 401)
332 })
333
334 it('Should fail with an invalid logged in user', async function () {
335 await listAbuseMessages(server.url, userAccessToken2, abuseId, 403)
336 })
337
338 it('Should succeed with the correct params', async function () {
339 await listAbuseMessages(server.url, userAccessToken, abuseId)
340 })
341 })
342
343 describe('When deleting an abuse message', function () {
344
345 it('Should fail with an invalid abuse id', async function () {
346 await deleteAbuseMessage(server.url, userAccessToken, 888, messageId, 404)
347 })
348
349 it('Should fail with an invalid message id', async function () {
350 await deleteAbuseMessage(server.url, userAccessToken, abuseId, 888, 404)
351 })
352
353 it('Should fail with a non authenticated user', async function () {
354 await deleteAbuseMessage(server.url, 'fake_token', abuseId, messageId, 401)
355 })
356
357 it('Should fail with an invalid logged in user', async function () {
358 await deleteAbuseMessage(server.url, userAccessToken2, abuseId, messageId, 403)
359 })
360
361 it('Should succeed with the correct params', async function () {
362 await deleteAbuseMessage(server.url, userAccessToken, abuseId, messageId)
363 })
364 })
365
57f6896f
C
366 describe('When deleting a video abuse', function () {
367
368 it('Should fail with a non authenticated user', async function () {
369 await deleteAbuse(server.url, 'blabla', abuseId, 401)
370 })
371
372 it('Should fail with a non admin user', async function () {
373 await deleteAbuse(server.url, userAccessToken, abuseId, 403)
374 })
375
376 it('Should fail with a bad abuse id', async function () {
377 await deleteAbuse(server.url, server.accessToken, 45, 404)
378 })
379
380 it('Should succeed with the correct params', async function () {
381 await deleteAbuse(server.url, server.accessToken, abuseId)
382 })
383 })
384
385 after(async function () {
386 await cleanupTests([ server ])
387 })
388})