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