]>
Commit | Line | Data |
---|---|---|
72329aaa C |
1 | /* eslint-disable no-unused-expressions */ |
2 | ||
efe923bc C |
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') | |
d38b8281 | 12 | const videosUtils = require('../../utils/videos') |
efe923bc C |
13 | |
14 | describe('Test users API validators', function () { | |
15 | const path = '/api/v1/users/' | |
16 | let userId = null | |
17 | let rootId = null | |
d38b8281 | 18 | let videoId = null |
efe923bc C |
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 | }, | |
d38b8281 | 52 | function (next) { |
b4c5ac97 C |
53 | const videoAttributes = {} |
54 | videosUtils.uploadVideo(server.url, server.accessToken, videoAttributes, next) | |
d38b8281 C |
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 | }, | |
efe923bc C |
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', | |
ad4a8a1c | 113 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c | 123 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c C |
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', | |
efe923bc C |
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', | |
ad4a8a1c | 162 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c | 172 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c | 184 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c C |
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', | |
efe923bc C |
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', | |
ad4a8a1c | 214 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c | 224 | email: 'test@example.com', |
efe923bc C |
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', | |
ad4a8a1c | 235 | email: 'test@example.com', |
efe923bc C |
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 | ||
1d49e1e2 C |
273 | it('Should fail with an invalid display NSFW attribute', function (done) { |
274 | const data = { | |
275 | displayNSFW: -1 | |
276 | } | |
277 | ||
278 | requestsUtils.makePutBodyRequest(server.url, path + userId, userAccessToken, data, done) | |
279 | }) | |
280 | ||
efe923bc C |
281 | it('Should fail with an non authenticated user', function (done) { |
282 | const data = { | |
283 | password: 'my super password' | |
284 | } | |
285 | ||
286 | requestsUtils.makePutBodyRequest(server.url, path + userId, 'super token', data, done, 401) | |
287 | }) | |
288 | ||
289 | it('Should succeed with the correct params', function (done) { | |
290 | const data = { | |
1d49e1e2 C |
291 | password: 'my super password', |
292 | displayNSFW: true | |
efe923bc C |
293 | } |
294 | ||
295 | requestsUtils.makePutBodyRequest(server.url, path + userId, userAccessToken, data, done, 204) | |
296 | }) | |
297 | }) | |
298 | ||
299 | describe('When getting my information', function () { | |
300 | it('Should fail with a non authenticated user', function (done) { | |
301 | request(server.url) | |
302 | .get(path + 'me') | |
303 | .set('Authorization', 'Bearer faketoken') | |
304 | .set('Accept', 'application/json') | |
305 | .expect(401, done) | |
306 | }) | |
307 | ||
308 | it('Should success with the correct parameters', function (done) { | |
309 | request(server.url) | |
310 | .get(path + 'me') | |
311 | .set('Authorization', 'Bearer ' + userAccessToken) | |
312 | .set('Accept', 'application/json') | |
313 | .expect(200, done) | |
314 | }) | |
315 | }) | |
316 | ||
d38b8281 C |
317 | describe('When getting my video rating', function () { |
318 | it('Should fail with a non authenticated user', function (done) { | |
319 | request(server.url) | |
320 | .get(path + 'me/videos/' + videoId + '/rating') | |
321 | .set('Authorization', 'Bearer faketoken') | |
322 | .set('Accept', 'application/json') | |
323 | .expect(401, done) | |
324 | }) | |
325 | ||
326 | it('Should fail with an incorrect video uuid', function (done) { | |
327 | request(server.url) | |
328 | .get(path + 'me/videos/blabla/rating') | |
329 | .set('Authorization', 'Bearer ' + userAccessToken) | |
330 | .set('Accept', 'application/json') | |
331 | .expect(400, done) | |
332 | }) | |
333 | ||
334 | it('Should fail with an unknown video', function (done) { | |
335 | request(server.url) | |
336 | .get(path + 'me/videos/4da6fde3-88f7-4d16-b119-108df5630b06/rating') | |
337 | .set('Authorization', 'Bearer ' + userAccessToken) | |
338 | .set('Accept', 'application/json') | |
339 | .expect(404, done) | |
340 | }) | |
341 | ||
342 | it('Should success with the correct parameters', function (done) { | |
343 | request(server.url) | |
344 | .get(path + 'me/videos/' + videoId + '/rating') | |
345 | .set('Authorization', 'Bearer ' + userAccessToken) | |
346 | .set('Accept', 'application/json') | |
347 | .expect(200, done) | |
348 | }) | |
349 | }) | |
350 | ||
351 | describe('When removing an user', function () { | |
352 | it('Should fail with an incorrect id', function (done) { | |
353 | request(server.url) | |
354 | .delete(path + 'bla-bla') | |
355 | .set('Authorization', 'Bearer ' + server.accessToken) | |
356 | .expect(400, done) | |
357 | }) | |
358 | ||
359 | it('Should fail with the root user', function (done) { | |
360 | request(server.url) | |
361 | .delete(path + rootId) | |
362 | .set('Authorization', 'Bearer ' + server.accessToken) | |
363 | .expect(400, done) | |
364 | }) | |
365 | ||
366 | it('Should return 404 with a non existing id', function (done) { | |
367 | request(server.url) | |
368 | .delete(path + '45') | |
369 | .set('Authorization', 'Bearer ' + server.accessToken) | |
370 | .expect(404, done) | |
371 | }) | |
372 | }) | |
373 | ||
efe923bc C |
374 | describe('When removing an user', function () { |
375 | it('Should fail with an incorrect id', function (done) { | |
376 | request(server.url) | |
377 | .delete(path + 'bla-bla') | |
378 | .set('Authorization', 'Bearer ' + server.accessToken) | |
379 | .expect(400, done) | |
380 | }) | |
381 | ||
382 | it('Should fail with the root user', function (done) { | |
383 | request(server.url) | |
384 | .delete(path + rootId) | |
385 | .set('Authorization', 'Bearer ' + server.accessToken) | |
386 | .expect(400, done) | |
387 | }) | |
388 | ||
389 | it('Should return 404 with a non existing id', function (done) { | |
390 | request(server.url) | |
391 | .delete(path + '45') | |
392 | .set('Authorization', 'Bearer ' + server.accessToken) | |
393 | .expect(404, done) | |
394 | }) | |
395 | }) | |
396 | ||
397 | after(function (done) { | |
398 | process.kill(-server.app.pid) | |
399 | ||
400 | // Keep the logs if the test failed | |
401 | if (this.ok) { | |
402 | serversUtils.flushTests(done) | |
403 | } else { | |
404 | done() | |
405 | } | |
406 | }) | |
407 | }) |