]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/check-params/users.js
Server: refractoring upload/update video test utils
[github/Chocobozzz/PeerTube.git] / server / tests / api / check-params / users.js
1 /* eslint-disable no-unused-expressions */
2
3 'use strict'
4
5 const request = require('supertest')
6 const series = require('async/series')
7
8 const loginUtils = require('../../utils/login')
9 const requestsUtils = require('../../utils/requests')
10 const serversUtils = require('../../utils/servers')
11 const usersUtils = require('../../utils/users')
12 const videosUtils = require('../../utils/videos')
13
14 describe('Test users API validators', function () {
15 const path = '/api/v1/users/'
16 let userId = null
17 let rootId = null
18 let videoId = null
19 let server = null
20 let userAccessToken = null
21
22 // ---------------------------------------------------------------
23
24 before(function (done) {
25 this.timeout(20000)
26
27 series([
28 function (next) {
29 serversUtils.flushTests(next)
30 },
31 function (next) {
32 serversUtils.runServer(1, function (server1) {
33 server = server1
34
35 next()
36 })
37 },
38 function (next) {
39 loginUtils.loginAndGetAccessToken(server, function (err, token) {
40 if (err) throw err
41 server.accessToken = token
42
43 next()
44 })
45 },
46 function (next) {
47 const username = 'user1'
48 const password = 'my super password'
49
50 usersUtils.createUser(server.url, server.accessToken, username, password, next)
51 },
52 function (next) {
53 const videoAttributes = {}
54 videosUtils.uploadVideo(server.url, server.accessToken, videoAttributes, next)
55 },
56 function (next) {
57 videosUtils.getVideosList(server.url, function (err, res) {
58 if (err) throw err
59
60 const videos = res.body.data
61 videoId = videos[0].id
62
63 next()
64 })
65 },
66 function (next) {
67 const user = {
68 username: 'user1',
69 password: 'my super password'
70 }
71
72 loginUtils.getUserAccessToken(server, user, function (err, accessToken) {
73 if (err) throw err
74
75 userAccessToken = accessToken
76
77 next()
78 })
79 }
80 ], done)
81 })
82
83 describe('When listing users', function () {
84 it('Should fail with a bad start pagination', function (done) {
85 request(server.url)
86 .get(path)
87 .query({ start: 'hello' })
88 .set('Accept', 'application/json')
89 .expect(400, done)
90 })
91
92 it('Should fail with a bad count pagination', function (done) {
93 request(server.url)
94 .get(path)
95 .query({ count: 'hello' })
96 .set('Accept', 'application/json')
97 .expect(400, done)
98 })
99
100 it('Should fail with an incorrect sort', function (done) {
101 request(server.url)
102 .get(path)
103 .query({ sort: 'hello' })
104 .set('Accept', 'application/json')
105 .expect(400, done)
106 })
107 })
108
109 describe('When adding a new user', function () {
110 it('Should fail with a too small username', function (done) {
111 const data = {
112 username: 'ji',
113 email: 'test@example.com',
114 password: 'mysuperpassword'
115 }
116
117 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
118 })
119
120 it('Should fail with a too long username', function (done) {
121 const data = {
122 username: 'mysuperusernamewhichisverylong',
123 email: 'test@example.com',
124 password: 'mysuperpassword'
125 }
126
127 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
128 })
129
130 it('Should fail with an incorrect username', function (done) {
131 const data = {
132 username: 'my username',
133 email: 'test@example.com',
134 password: 'mysuperpassword'
135 }
136
137 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
138 })
139
140 it('Should fail with a missing email', function (done) {
141 const data = {
142 username: 'ji',
143 password: 'mysuperpassword'
144 }
145
146 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
147 })
148
149 it('Should fail with an invalid email', function (done) {
150 const data = {
151 username: 'mysuperusernamewhichisverylong',
152 email: 'testexample.com',
153 password: 'mysuperpassword'
154 }
155
156 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
157 })
158
159 it('Should fail with a too small password', function (done) {
160 const data = {
161 username: 'myusername',
162 email: 'test@example.com',
163 password: 'bla'
164 }
165
166 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
167 })
168
169 it('Should fail with a too long password', function (done) {
170 const data = {
171 username: 'myusername',
172 email: 'test@example.com',
173 password: 'my super long password which is very very very very very very very very very very very very very very' +
174 'very very very very very very very very very very very very very very very veryv very very very very' +
175 'very very very very very very very very very very very very very very very very very very very very long'
176 }
177
178 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done)
179 })
180
181 it('Should fail with an non authenticated user', function (done) {
182 const data = {
183 username: 'myusername',
184 email: 'test@example.com',
185 password: 'my super password'
186 }
187
188 requestsUtils.makePostBodyRequest(server.url, path, 'super token', data, done, 401)
189 })
190
191 it('Should fail if we add a user with the same username', function (done) {
192 const data = {
193 username: 'user1',
194 email: 'test@example.com',
195 password: 'my super password'
196 }
197
198 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done, 409)
199 })
200
201 it('Should fail if we add a user with the same email', function (done) {
202 const data = {
203 username: 'myusername',
204 email: 'user1@example.com',
205 password: 'my super password'
206 }
207
208 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done, 409)
209 })
210
211 it('Should succeed with the correct params', function (done) {
212 const data = {
213 username: 'user2',
214 email: 'test@example.com',
215 password: 'my super password'
216 }
217
218 requestsUtils.makePostBodyRequest(server.url, path, server.accessToken, data, done, 204)
219 })
220
221 it('Should fail with a non admin user', function (done) {
222 server.user = {
223 username: 'user1',
224 email: 'test@example.com',
225 password: 'my super password'
226 }
227
228 loginUtils.loginAndGetAccessToken(server, function (err, accessToken) {
229 if (err) throw err
230
231 userAccessToken = accessToken
232
233 const data = {
234 username: 'user3',
235 email: 'test@example.com',
236 password: 'my super password'
237 }
238
239 requestsUtils.makePostBodyRequest(server.url, path, userAccessToken, data, done, 403)
240 })
241 })
242 })
243
244 describe('When updating a user', function () {
245 before(function (done) {
246 usersUtils.getUsersList(server.url, function (err, res) {
247 if (err) throw err
248
249 userId = res.body.data[1].id
250 rootId = res.body.data[2].id
251 done()
252 })
253 })
254
255 it('Should fail with a too small password', function (done) {
256 const data = {
257 password: 'bla'
258 }
259
260 requestsUtils.makePutBodyRequest(server.url, path + userId, userAccessToken, data, done)
261 })
262
263 it('Should fail with a too long password', function (done) {
264 const data = {
265 password: 'my super long password which is very very very very very very very very very very very very very very' +
266 'very very very very very very very very very very very very very very very veryv very very very very' +
267 'very very very very very very very very very very very very very very very very very very very very long'
268 }
269
270 requestsUtils.makePutBodyRequest(server.url, path + userId, userAccessToken, data, done)
271 })
272
273 it('Should fail with an non authenticated user', function (done) {
274 const data = {
275 password: 'my super password'
276 }
277
278 requestsUtils.makePutBodyRequest(server.url, path + userId, 'super token', data, done, 401)
279 })
280
281 it('Should succeed with the correct params', function (done) {
282 const data = {
283 password: 'my super password'
284 }
285
286 requestsUtils.makePutBodyRequest(server.url, path + userId, userAccessToken, data, done, 204)
287 })
288 })
289
290 describe('When getting my information', function () {
291 it('Should fail with a non authenticated user', function (done) {
292 request(server.url)
293 .get(path + 'me')
294 .set('Authorization', 'Bearer faketoken')
295 .set('Accept', 'application/json')
296 .expect(401, done)
297 })
298
299 it('Should success with the correct parameters', function (done) {
300 request(server.url)
301 .get(path + 'me')
302 .set('Authorization', 'Bearer ' + userAccessToken)
303 .set('Accept', 'application/json')
304 .expect(200, done)
305 })
306 })
307
308 describe('When getting my video rating', function () {
309 it('Should fail with a non authenticated user', function (done) {
310 request(server.url)
311 .get(path + 'me/videos/' + videoId + '/rating')
312 .set('Authorization', 'Bearer faketoken')
313 .set('Accept', 'application/json')
314 .expect(401, done)
315 })
316
317 it('Should fail with an incorrect video uuid', function (done) {
318 request(server.url)
319 .get(path + 'me/videos/blabla/rating')
320 .set('Authorization', 'Bearer ' + userAccessToken)
321 .set('Accept', 'application/json')
322 .expect(400, done)
323 })
324
325 it('Should fail with an unknown video', function (done) {
326 request(server.url)
327 .get(path + 'me/videos/4da6fde3-88f7-4d16-b119-108df5630b06/rating')
328 .set('Authorization', 'Bearer ' + userAccessToken)
329 .set('Accept', 'application/json')
330 .expect(404, done)
331 })
332
333 it('Should success with the correct parameters', function (done) {
334 request(server.url)
335 .get(path + 'me/videos/' + videoId + '/rating')
336 .set('Authorization', 'Bearer ' + userAccessToken)
337 .set('Accept', 'application/json')
338 .expect(200, done)
339 })
340 })
341
342 describe('When removing an user', function () {
343 it('Should fail with an incorrect id', function (done) {
344 request(server.url)
345 .delete(path + 'bla-bla')
346 .set('Authorization', 'Bearer ' + server.accessToken)
347 .expect(400, done)
348 })
349
350 it('Should fail with the root user', function (done) {
351 request(server.url)
352 .delete(path + rootId)
353 .set('Authorization', 'Bearer ' + server.accessToken)
354 .expect(400, done)
355 })
356
357 it('Should return 404 with a non existing id', function (done) {
358 request(server.url)
359 .delete(path + '45')
360 .set('Authorization', 'Bearer ' + server.accessToken)
361 .expect(404, done)
362 })
363 })
364
365 describe('When removing an user', function () {
366 it('Should fail with an incorrect id', function (done) {
367 request(server.url)
368 .delete(path + 'bla-bla')
369 .set('Authorization', 'Bearer ' + server.accessToken)
370 .expect(400, done)
371 })
372
373 it('Should fail with the root user', function (done) {
374 request(server.url)
375 .delete(path + rootId)
376 .set('Authorization', 'Bearer ' + server.accessToken)
377 .expect(400, done)
378 })
379
380 it('Should return 404 with a non existing id', function (done) {
381 request(server.url)
382 .delete(path + '45')
383 .set('Authorization', 'Bearer ' + server.accessToken)
384 .expect(404, done)
385 })
386 })
387
388 after(function (done) {
389 process.kill(-server.app.pid)
390
391 // Keep the logs if the test failed
392 if (this.ok) {
393 serversUtils.flushTests(done)
394 } else {
395 done()
396 }
397 })
398 })