]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/users.js
Server: add user list sort/pagination
[github/Chocobozzz/PeerTube.git] / server / tests / api / users.js
CommitLineData
0c1cbbfe
C
1'use strict'
2
0c1cbbfe
C
3const chai = require('chai')
4const expect = chai.expect
5const pathUtils = require('path')
1a42c9e2 6const series = require('async/series')
0c1cbbfe 7
8d309058
C
8const loginUtils = require('../utils/login')
9const podsUtils = require('../utils/pods')
10const serversUtils = require('../utils/servers')
11const usersUtils = require('../utils/users')
12const videosUtils = require('../utils/videos')
0c1cbbfe
C
13const webtorrent = require(pathUtils.join(__dirname, '../../lib/webtorrent'))
14webtorrent.silent = true
15
0c1cbbfe
C
16describe('Test users', function () {
17 let server = null
bc503c2a 18 let accessToken = null
9bd26629
C
19 let accessTokenUser = null
20 let videoId = null
21 let userId = null
0c1cbbfe
C
22
23 before(function (done) {
24 this.timeout(20000)
25
1a42c9e2 26 series([
0c1cbbfe 27 function (next) {
8d309058 28 serversUtils.flushTests(next)
0c1cbbfe
C
29 },
30 function (next) {
8d309058 31 serversUtils.runServer(1, function (server1) {
0c1cbbfe
C
32 server = server1
33 next()
34 })
35 }
36 ], done)
37 })
38
b0ec596c
C
39 it('Should create a new client')
40
41 it('Should return the first client')
42
43 it('Should remove the last client')
44
0c1cbbfe
C
45 it('Should not login with an invalid client id', function (done) {
46 const client = { id: 'client', password: server.client.secret }
8d309058 47 loginUtils.login(server.url, client, server.user, 400, function (err, res) {
0c1cbbfe
C
48 if (err) throw err
49
50 expect(res.body.error).to.equal('invalid_client')
51 done()
52 })
53 })
54
55 it('Should not login with an invalid client password', function (done) {
56 const client = { id: server.client.id, password: 'coucou' }
8d309058 57 loginUtils.login(server.url, client, server.user, 400, function (err, res) {
0c1cbbfe
C
58 if (err) throw err
59
60 expect(res.body.error).to.equal('invalid_client')
61 done()
62 })
63 })
64
65 it('Should not login with an invalid username', function (done) {
66 const user = { username: 'captain crochet', password: server.user.password }
8d309058 67 loginUtils.login(server.url, server.client, user, 400, function (err, res) {
0c1cbbfe
C
68 if (err) throw err
69
70 expect(res.body.error).to.equal('invalid_grant')
71 done()
72 })
73 })
74
75 it('Should not login with an invalid password', function (done) {
76 const user = { username: server.user.username, password: 'mewthree' }
8d309058 77 loginUtils.login(server.url, server.client, user, 400, function (err, res) {
0c1cbbfe
C
78 if (err) throw err
79
80 expect(res.body.error).to.equal('invalid_grant')
81 done()
82 })
83 })
84
85 it('Should not be able to upload a video', function (done) {
bc503c2a 86 accessToken = 'mysupertoken'
be587647
C
87
88 const name = 'my super name'
89 const description = 'my super description'
90 const tags = [ 'tag1', 'tag2' ]
91 const video = 'video_short.webm'
8d309058 92 videosUtils.uploadVideo(server.url, accessToken, name, description, tags, video, 401, done)
0c1cbbfe
C
93 })
94
b3b92647
C
95 it('Should not be able to make friends', function (done) {
96 accessToken = 'mysupertoken'
8d309058 97 podsUtils.makeFriends(server.url, accessToken, 401, done)
b3b92647
C
98 })
99
100 it('Should not be able to quit friends', function (done) {
101 accessToken = 'mysupertoken'
8d309058 102 podsUtils.quitFriends(server.url, accessToken, 401, done)
b3b92647
C
103 })
104
0c1cbbfe 105 it('Should be able to login', function (done) {
8d309058 106 loginUtils.login(server.url, server.client, server.user, 200, function (err, res) {
0c1cbbfe
C
107 if (err) throw err
108
bc503c2a 109 accessToken = res.body.access_token
0c1cbbfe
C
110 done()
111 })
112 })
113
114 it('Should upload the video with the correct token', function (done) {
be587647
C
115 const name = 'my super name'
116 const description = 'my super description'
117 const tags = [ 'tag1', 'tag2' ]
118 const video = 'video_short.webm'
8d309058 119 videosUtils.uploadVideo(server.url, accessToken, name, description, tags, video, 204, function (err, res) {
0c1cbbfe
C
120 if (err) throw err
121
8d309058 122 videosUtils.getVideosList(server.url, function (err, res) {
0c1cbbfe
C
123 if (err) throw err
124
68ce3ae0 125 const video = res.body.data[0]
6d8ada5f
C
126 expect(video.author).to.equal('root')
127
bc503c2a 128 videoId = video.id
0c1cbbfe
C
129 done()
130 })
131 })
132 })
133
134 it('Should upload the video again with the correct token', function (done) {
be587647
C
135 const name = 'my super name 2'
136 const description = 'my super description 2'
137 const tags = [ 'tag1' ]
138 const video = 'video_short.webm'
8d309058 139 videosUtils.uploadVideo(server.url, accessToken, name, description, tags, video, 204, done)
0c1cbbfe
C
140 })
141
142 it('Should not be able to remove the video with an incorrect token', function (done) {
8d309058 143 videosUtils.removeVideo(server.url, 'bad_token', videoId, 401, done)
0c1cbbfe
C
144 })
145
146 it('Should not be able to remove the video with the token of another account')
147
148 it('Should be able to remove the video with the correct token', function (done) {
8d309058 149 videosUtils.removeVideo(server.url, accessToken, videoId, done)
0c1cbbfe
C
150 })
151
2f372a86 152 it('Should logout (revoke token)')
0c1cbbfe
C
153
154 it('Should not be able to upload a video')
155
156 it('Should not be able to remove a video')
157
158 it('Should be able to login again')
159
2f372a86
C
160 it('Should have an expired access token')
161
162 it('Should refresh the token')
163
164 it('Should be able to upload a video again')
165
9bd26629 166 it('Should be able to create a new user', function (done) {
8d309058 167 usersUtils.createUser(server.url, accessToken, 'user_1', 'super password', done)
9bd26629
C
168 })
169
170 it('Should be able to login with this user', function (done) {
171 server.user = {
172 username: 'user_1',
173 password: 'super password'
174 }
175
8d309058 176 loginUtils.loginAndGetAccessToken(server, function (err, token) {
9bd26629
C
177 if (err) throw err
178
179 accessTokenUser = token
180
181 done()
182 })
183 })
184
99a64bfe 185 it('Should be able to get the user informations', function (done) {
8d309058 186 usersUtils.getUserInformation(server.url, accessTokenUser, function (err, res) {
99a64bfe
C
187 if (err) throw err
188
189 const user = res.body
190
191 expect(user.username).to.equal('user_1')
192 expect(user.id).to.exist
193
194 done()
195 })
196 })
197
9bd26629
C
198 it('Should be able to upload a video with this user', function (done) {
199 this.timeout(5000)
200
201 const name = 'my super name'
202 const description = 'my super description'
203 const tags = [ 'tag1', 'tag2', 'tag3' ]
204 const file = 'video_short.webm'
8d309058 205 videosUtils.uploadVideo(server.url, accessTokenUser, name, description, tags, file, done)
9bd26629
C
206 })
207
208 it('Should list all the users', function (done) {
8d309058 209 usersUtils.getUsersList(server.url, function (err, res) {
9bd26629
C
210 if (err) throw err
211
5c39adb7
C
212 const result = res.body
213 const total = result.total
214 const users = result.data
9bd26629 215
5c39adb7 216 expect(total).to.equal(2)
9bd26629
C
217 expect(users).to.be.an('array')
218 expect(users.length).to.equal(2)
219
5c39adb7
C
220 const user = users[0]
221 expect(user.username).to.equal('user_1')
222
223 const rootUser = users[1]
9bd26629 224 expect(rootUser.username).to.equal('root')
5c39adb7
C
225 userId = user.id
226
227 done()
228 })
229 })
230
231 it('Should list only the first user by username asc', function (done) {
232 usersUtils.getUsersListPaginationAndSort(server.url, 0, 1, 'username', function (err, res) {
233 if (err) throw err
234
235 const result = res.body
236 const total = result.total
237 const users = result.data
238
239 expect(total).to.equal(2)
240 expect(users.length).to.equal(1)
9bd26629 241
5c39adb7
C
242 const user = users[0]
243 expect(user.username).to.equal('root')
244
245 done()
246 })
247 })
248
249 it('Should list only the first user by username desc', function (done) {
250 usersUtils.getUsersListPaginationAndSort(server.url, 0, 1, '-username', function (err, res) {
251 if (err) throw err
252
253 const result = res.body
254 const total = result.total
255 const users = result.data
256
257 expect(total).to.equal(2)
258 expect(users.length).to.equal(1)
259
260 const user = users[0]
9bd26629 261 expect(user.username).to.equal('user_1')
5c39adb7
C
262
263 done()
264 })
265 })
266
267 it('Should list only the second user by createdDate desc', function (done) {
268 usersUtils.getUsersListPaginationAndSort(server.url, 0, 1, '-createdDate', function (err, res) {
269 if (err) throw err
270
271 const result = res.body
272 const total = result.total
273 const users = result.data
274
275 expect(total).to.equal(2)
276 expect(users.length).to.equal(1)
277
278 const user = users[0]
279 expect(user.username).to.equal('user_1')
280
281 done()
282 })
283 })
284
285 it('Should list all the users by createdDate asc', function (done) {
286 usersUtils.getUsersListPaginationAndSort(server.url, 0, 2, 'createdDate', function (err, res) {
287 if (err) throw err
288
289 const result = res.body
290 const total = result.total
291 const users = result.data
292
293 expect(total).to.equal(2)
294 expect(users.length).to.equal(2)
295
296 expect(users[0].username).to.equal('root')
297 expect(users[1].username).to.equal('user_1')
9bd26629
C
298
299 done()
300 })
301 })
302
303 it('Should update the user password', function (done) {
8d309058 304 usersUtils.updateUser(server.url, userId, accessTokenUser, 'new password', function (err, res) {
9bd26629
C
305 if (err) throw err
306
307 server.user.password = 'new password'
8d309058 308 loginUtils.login(server.url, server.client, server.user, 200, done)
9bd26629
C
309 })
310 })
311
312 it('Should be able to remove this user', function (done) {
68a3b9f2 313 usersUtils.removeUser(server.url, userId, accessToken, done)
9bd26629
C
314 })
315
316 it('Should not be able to login with this user', function (done) {
317 // server.user is already set to user 1
8d309058 318 loginUtils.login(server.url, server.client, server.user, 400, done)
9bd26629
C
319 })
320
321 it('Should not have videos of this user', function (done) {
8d309058 322 videosUtils.getVideosList(server.url, function (err, res) {
9bd26629
C
323 if (err) throw err
324
325 expect(res.body.total).to.equal(1)
326 const video = res.body.data[0]
327 expect(video.author).to.equal('root')
328
329 done()
330 })
331 })
332
0c1cbbfe
C
333 after(function (done) {
334 process.kill(-server.app.pid)
335
336 // Keep the logs if the test failed
337 if (this.ok) {
8d309058 338 serversUtils.flushTests(done)
0c1cbbfe
C
339 } else {
340 done()
341 }
342 })
343})