aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/tests/api/users
diff options
context:
space:
mode:
Diffstat (limited to 'server/tests/api/users')
-rw-r--r--server/tests/api/users/users.ts534
1 files changed, 534 insertions, 0 deletions
diff --git a/server/tests/api/users/users.ts b/server/tests/api/users/users.ts
new file mode 100644
index 000000000..2e3a0b94f
--- /dev/null
+++ b/server/tests/api/users/users.ts
@@ -0,0 +1,534 @@
1/* tslint:disable:no-unused-expression */
2
3import * as chai from 'chai'
4import 'mocha'
5import { UserRole } from '../../../../shared/index'
6import {
7 createUser,
8 flushTests,
9 getBlacklistedVideosList,
10 getMyUserInformation,
11 getUserInformation,
12 getUsersList,
13 getUsersListPaginationAndSort,
14 getUserVideoRating,
15 getVideosList,
16 killallServers,
17 login,
18 loginAndGetAccessToken,
19 makePutBodyRequest,
20 rateVideo,
21 registerUser,
22 removeUser,
23 removeVideo,
24 runServer,
25 ServerInfo,
26 updateMyUser,
27 updateUser,
28 uploadVideo
29} from '../../utils/index'
30import { follow } from '../../utils/server/follows'
31import { getMyVideos } from '../../utils/videos/videos'
32import { setAccessTokensToServers } from '../../utils/users/login'
33
34const expect = chai.expect
35
36describe('Test users', function () {
37 let server: ServerInfo
38 let accessToken: string
39 let accessTokenUser: string
40 let videoId: number
41 let userId: number
42
43 before(async function () {
44 this.timeout(10000)
45
46 await flushTests()
47 server = await runServer(1)
48
49 await setAccessTokensToServers([ server ])
50 })
51
52 it('Should create a new client')
53
54 it('Should return the first client')
55
56 it('Should remove the last client')
57
58 it('Should not login with an invalid client id', async function () {
59 const client = { id: 'client', secret: server.client.secret }
60 const res = await login(server.url, client, server.user, 400)
61
62 expect(res.body.error)
63 .to
64 .equal('invalid_client')
65 })
66
67 it('Should not login with an invalid client secret', async function () {
68 const client = { id: server.client.id, secret: 'coucou' }
69 const res = await login(server.url, client, server.user, 400)
70
71 expect(res.body.error)
72 .to
73 .equal('invalid_client')
74 })
75
76 it('Should not login with an invalid username', async function () {
77 const user = { username: 'captain crochet', password: server.user.password }
78 const res = await login(server.url, server.client, user, 400)
79
80 expect(res.body.error)
81 .to
82 .equal('invalid_grant')
83 })
84
85 it('Should not login with an invalid password', async function () {
86 const user = { username: server.user.username, password: 'mew_three' }
87 const res = await login(server.url, server.client, user, 400)
88
89 expect(res.body.error)
90 .to
91 .equal('invalid_grant')
92 })
93
94 it('Should not be able to upload a video', async function () {
95 accessToken = 'my_super_token'
96
97 const videoAttributes = {}
98 await uploadVideo(server.url, accessToken, videoAttributes, 401)
99 })
100
101 it('Should not be able to follow', async function () {
102 accessToken = 'my_super_token'
103 await follow(server.url, [ 'http://example.com' ], accessToken, 401)
104 })
105
106 it('Should not be able to unfollow')
107
108 it('Should be able to login', async function () {
109 const res = await login(server.url, server.client, server.user, 200)
110
111 accessToken = res.body.access_token
112 })
113
114 it('Should upload the video with the correct token', async function () {
115 const videoAttributes = {}
116 await uploadVideo(server.url, accessToken, videoAttributes)
117 const res = await getVideosList(server.url)
118 const video = res.body.data[ 0 ]
119
120 expect(video.accountName)
121 .to
122 .equal('root')
123 videoId = video.id
124 })
125
126 it('Should upload the video again with the correct token', async function () {
127 const videoAttributes = {}
128 await uploadVideo(server.url, accessToken, videoAttributes)
129 })
130
131 it('Should retrieve a video rating', async function () {
132 await rateVideo(server.url, accessToken, videoId, 'like')
133 const res = await getUserVideoRating(server.url, accessToken, videoId)
134 const rating = res.body
135
136 expect(rating.videoId)
137 .to
138 .equal(videoId)
139 expect(rating.rating)
140 .to
141 .equal('like')
142 })
143
144 it('Should not be able to remove the video with an incorrect token', async function () {
145 await removeVideo(server.url, 'bad_token', videoId, 401)
146 })
147
148 it('Should not be able to remove the video with the token of another account')
149
150 it('Should be able to remove the video with the correct token', async function () {
151 await removeVideo(server.url, accessToken, videoId)
152 })
153
154 it('Should logout (revoke token)')
155
156 it('Should not be able to get the user information')
157
158 it('Should not be able to upload a video')
159
160 it('Should not be able to remove a video')
161
162 it('Should not be able to rate a video', async function () {
163 const path = '/api/v1/videos/'
164 const data = {
165 rating: 'likes'
166 }
167
168 const options = {
169 url: server.url,
170 path: path + videoId,
171 token: 'wrong token',
172 fields: data,
173 statusCodeExpected: 401
174 }
175 await makePutBodyRequest(options)
176 })
177
178 it('Should be able to login again')
179
180 it('Should have an expired access token')
181
182 it('Should refresh the token')
183
184 it('Should be able to upload a video again')
185
186 it('Should be able to create a new user', async function () {
187 await createUser(server.url, accessToken, 'user_1', 'super password', 2 * 1024 * 1024)
188 })
189
190 it('Should be able to login with this user', async function () {
191 server.user = {
192 username: 'user_1',
193 password: 'super password'
194 }
195
196 accessTokenUser = await loginAndGetAccessToken(server)
197 })
198
199 it('Should be able to get the user information', async function () {
200 const res = await getMyUserInformation(server.url, accessTokenUser)
201 const user = res.body
202
203 expect(user.username)
204 .to
205 .equal('user_1')
206 expect(user.email)
207 .to
208 .equal('user_1@example.com')
209 expect(user.displayNSFW).to.be.false
210 expect(user.videoQuota)
211 .to
212 .equal(2 * 1024 * 1024)
213 expect(user.roleLabel)
214 .to
215 .equal('User')
216 expect(user.id)
217 .to
218 .be
219 .a('number')
220 })
221
222 it('Should be able to upload a video with this user', async function () {
223 this.timeout(5000)
224
225 const videoAttributes = {
226 name: 'super user video'
227 }
228 await uploadVideo(server.url, accessTokenUser, videoAttributes)
229 })
230
231 it('Should be able to list my videos', async function () {
232 const res = await getMyVideos(server.url, accessTokenUser, 0, 5)
233 expect(res.body.total)
234 .to
235 .equal(1)
236
237 const videos = res.body.data
238 expect(videos)
239 .to
240 .have
241 .lengthOf(1)
242
243 expect(videos[ 0 ].name)
244 .to
245 .equal('super user video')
246 })
247
248 it('Should list all the users', async function () {
249 const res = await getUsersList(server.url, server.accessToken)
250 const result = res.body
251 const total = result.total
252 const users = result.data
253
254 expect(total)
255 .to
256 .equal(2)
257 expect(users)
258 .to
259 .be
260 .an('array')
261 expect(users.length)
262 .to
263 .equal(2)
264
265 const user = users[ 0 ]
266 expect(user.username)
267 .to
268 .equal('user_1')
269 expect(user.email)
270 .to
271 .equal('user_1@example.com')
272 expect(user.displayNSFW).to.be.false
273
274 const rootUser = users[ 1 ]
275 expect(rootUser.username)
276 .to
277 .equal('root')
278 expect(rootUser.email)
279 .to
280 .equal('admin1@example.com')
281 expect(rootUser.displayNSFW).to.be.false
282
283 userId = user.id
284 })
285
286 it('Should list only the first user by username asc', async function () {
287 const res = await getUsersListPaginationAndSort(server.url, server.accessToken, 0, 1, 'username')
288
289 const result = res.body
290 const total = result.total
291 const users = result.data
292
293 expect(total)
294 .to
295 .equal(2)
296 expect(users.length)
297 .to
298 .equal(1)
299
300 const user = users[ 0 ]
301 expect(user.username)
302 .to
303 .equal('root')
304 expect(user.email)
305 .to
306 .equal('admin1@example.com')
307 expect(user.roleLabel)
308 .to
309 .equal('Administrator')
310 expect(user.displayNSFW).to.be.false
311 })
312
313 it('Should list only the first user by username desc', async function () {
314 const res = await getUsersListPaginationAndSort(server.url, server.accessToken, 0, 1, '-username')
315 const result = res.body
316 const total = result.total
317 const users = result.data
318
319 expect(total)
320 .to
321 .equal(2)
322 expect(users.length)
323 .to
324 .equal(1)
325
326 const user = users[ 0 ]
327 expect(user.username)
328 .to
329 .equal('user_1')
330 expect(user.email)
331 .to
332 .equal('user_1@example.com')
333 expect(user.displayNSFW).to.be.false
334 })
335
336 it('Should list only the second user by createdAt desc', async function () {
337 const res = await getUsersListPaginationAndSort(server.url, server.accessToken, 0, 1, '-createdAt')
338 const result = res.body
339 const total = result.total
340 const users = result.data
341
342 expect(total)
343 .to
344 .equal(2)
345 expect(users.length)
346 .to
347 .equal(1)
348
349 const user = users[ 0 ]
350 expect(user.username)
351 .to
352 .equal('user_1')
353 expect(user.email)
354 .to
355 .equal('user_1@example.com')
356 expect(user.displayNSFW).to.be.false
357 })
358
359 it('Should list all the users by createdAt asc', async function () {
360 const res = await getUsersListPaginationAndSort(server.url, server.accessToken, 0, 2, 'createdAt')
361 const result = res.body
362 const total = result.total
363 const users = result.data
364
365 expect(total)
366 .to
367 .equal(2)
368 expect(users.length)
369 .to
370 .equal(2)
371
372 expect(users[ 0 ].username)
373 .to
374 .equal('root')
375 expect(users[ 0 ].email)
376 .to
377 .equal('admin1@example.com')
378 expect(users[ 0 ].displayNSFW).to.be.false
379
380 expect(users[ 1 ].username)
381 .to
382 .equal('user_1')
383 expect(users[ 1 ].email)
384 .to
385 .equal('user_1@example.com')
386 expect(users[ 1 ].displayNSFW).to.be.false
387 })
388
389 it('Should update my password', async function () {
390 await updateMyUser(server.url, accessTokenUser, 'new password')
391 server.user.password = 'new password'
392
393 await login(server.url, server.client, server.user, 200)
394 })
395
396 it('Should be able to change the NSFW display attribute', async function () {
397 await updateMyUser(server.url, accessTokenUser, undefined, true)
398
399 const res = await getMyUserInformation(server.url, accessTokenUser)
400 const user = res.body
401
402 expect(user.username)
403 .to
404 .equal('user_1')
405 expect(user.email)
406 .to
407 .equal('user_1@example.com')
408 expect(user.displayNSFW).to.be.ok
409 expect(user.videoQuota)
410 .to
411 .equal(2 * 1024 * 1024)
412 expect(user.id)
413 .to
414 .be
415 .a('number')
416 })
417
418 it('Should be able to change the autoPlayVideo attribute', async function () {
419 await updateMyUser(server.url, accessTokenUser, undefined, undefined, undefined, false)
420
421 const res = await getMyUserInformation(server.url, accessTokenUser)
422 const user = res.body
423
424 expect(user.autoPlayVideo).to.be.false
425 })
426
427 it('Should be able to change the email display attribute', async function () {
428 await updateMyUser(server.url, accessTokenUser, undefined, undefined, 'updated@example.com')
429
430 const res = await getMyUserInformation(server.url, accessTokenUser)
431 const user = res.body
432
433 expect(user.username)
434 .to
435 .equal('user_1')
436 expect(user.email)
437 .to
438 .equal('updated@example.com')
439 expect(user.displayNSFW).to.be.ok
440 expect(user.videoQuota)
441 .to
442 .equal(2 * 1024 * 1024)
443 expect(user.id)
444 .to
445 .be
446 .a('number')
447 })
448
449 it('Should be able to update another user', async function () {
450 await updateUser(server.url, userId, accessToken, 'updated2@example.com', 42, UserRole.MODERATOR)
451
452 const res = await getUserInformation(server.url, accessToken, userId)
453 const user = res.body
454
455 expect(user.username)
456 .to
457 .equal('user_1')
458 expect(user.email)
459 .to
460 .equal('updated2@example.com')
461 expect(user.displayNSFW).to.be.ok
462 expect(user.videoQuota)
463 .to
464 .equal(42)
465 expect(user.roleLabel)
466 .to
467 .equal('Moderator')
468 expect(user.id)
469 .to
470 .be
471 .a('number')
472 })
473
474 it('Should not be able to delete a user by a moderator', async function () {
475 await removeUser(server.url, 2, accessTokenUser, 403)
476 })
477
478 it('Should be able to list video blacklist by a moderator', async function () {
479 await getBlacklistedVideosList(server.url, accessTokenUser)
480 })
481
482 it('Should be able to remove this user', async function () {
483 await removeUser(server.url, userId, accessToken)
484 })
485
486 it('Should not be able to login with this user', async function () {
487 // server.user is already set to user 1
488 await login(server.url, server.client, server.user, 400)
489 })
490
491 it('Should not have videos of this user', async function () {
492 const res = await getVideosList(server.url)
493
494 expect(res.body.total)
495 .to
496 .equal(1)
497
498 const video = res.body.data[ 0 ]
499 expect(video.accountName)
500 .to
501 .equal('root')
502 })
503
504 it('Should register a new user', async function () {
505 await registerUser(server.url, 'user_15', 'my super password')
506 })
507
508 it('Should be able to login with this registered user', async function () {
509 server.user = {
510 username: 'user_15',
511 password: 'my super password'
512 }
513
514 accessToken = await loginAndGetAccessToken(server)
515 })
516
517 it('Should have the correct video quota', async function () {
518 const res = await getMyUserInformation(server.url, accessToken)
519 const user = res.body
520
521 expect(user.videoQuota)
522 .to
523 .equal(5 * 1024 * 1024)
524 })
525
526 after(async function () {
527 killallServers([ server ])
528
529 // Keep the logs if the test failed
530 if (this[ 'ok' ]) {
531 await flushTests()
532 }
533 })
534})