Server: fix tests
[oweals/peertube.git] / server / tests / api / users.js
1 'use strict'
2
3 const chai = require('chai')
4 const expect = chai.expect
5 const pathUtils = require('path')
6 const series = require('async/series')
7
8 const loginUtils = require('../utils/login')
9 const podsUtils = require('../utils/pods')
10 const serversUtils = require('../utils/servers')
11 const usersUtils = require('../utils/users')
12 const videosUtils = require('../utils/videos')
13 const webtorrent = require(pathUtils.join(__dirname, '../../lib/webtorrent'))
14 webtorrent.silent = true
15
16 describe('Test users', function () {
17   let server = null
18   let accessToken = null
19   let accessTokenUser = null
20   let videoId = null
21   let userId = null
22
23   before(function (done) {
24     this.timeout(20000)
25
26     series([
27       function (next) {
28         serversUtils.flushTests(next)
29       },
30       function (next) {
31         serversUtils.runServer(1, function (server1) {
32           server = server1
33           next()
34         })
35       }
36     ], done)
37   })
38
39   it('Should create a new client')
40
41   it('Should return the first client')
42
43   it('Should remove the last client')
44
45   it('Should not login with an invalid client id', function (done) {
46     const client = { id: 'client', password: server.client.secret }
47     loginUtils.login(server.url, client, server.user, 400, function (err, res) {
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' }
57     loginUtils.login(server.url, client, server.user, 400, function (err, res) {
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 }
67     loginUtils.login(server.url, server.client, user, 400, function (err, res) {
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' }
77     loginUtils.login(server.url, server.client, user, 400, function (err, res) {
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) {
86     accessToken = 'mysupertoken'
87
88     const name = 'my super name'
89     const description = 'my super description'
90     const tags = [ 'tag1', 'tag2' ]
91     const video = 'video_short.webm'
92     videosUtils.uploadVideo(server.url, accessToken, name, description, tags, video, 401, done)
93   })
94
95   it('Should not be able to make friends', function (done) {
96     accessToken = 'mysupertoken'
97     podsUtils.makeFriends(server.url, accessToken, 401, done)
98   })
99
100   it('Should not be able to quit friends', function (done) {
101     accessToken = 'mysupertoken'
102     podsUtils.quitFriends(server.url, accessToken, 401, done)
103   })
104
105   it('Should be able to login', function (done) {
106     loginUtils.login(server.url, server.client, server.user, 200, function (err, res) {
107       if (err) throw err
108
109       accessToken = res.body.access_token
110       done()
111     })
112   })
113
114   it('Should upload the video with the correct token', function (done) {
115     const name = 'my super name'
116     const description = 'my super description'
117     const tags = [ 'tag1', 'tag2' ]
118     const video = 'video_short.webm'
119     videosUtils.uploadVideo(server.url, accessToken, name, description, tags, video, 204, function (err, res) {
120       if (err) throw err
121
122       videosUtils.getVideosList(server.url, function (err, res) {
123         if (err) throw err
124
125         const video = res.body.data[0]
126         expect(video.author).to.equal('root')
127
128         videoId = video.id
129         done()
130       })
131     })
132   })
133
134   it('Should upload the video again with the correct token', function (done) {
135     const name = 'my super name 2'
136     const description = 'my super description 2'
137     const tags = [ 'tag1' ]
138     const video = 'video_short.webm'
139     videosUtils.uploadVideo(server.url, accessToken, name, description, tags, video, 204, done)
140   })
141
142   it('Should not be able to remove the video with an incorrect token', function (done) {
143     videosUtils.removeVideo(server.url, 'bad_token', videoId, 401, done)
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) {
149     videosUtils.removeVideo(server.url, accessToken, videoId, done)
150   })
151
152   it('Should logout (revoke token)')
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
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
166   it('Should be able to create a new user', function (done) {
167     usersUtils.createUser(server.url, accessToken, 'user_1', 'super password', done)
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
176     loginUtils.loginAndGetAccessToken(server, function (err, token) {
177       if (err) throw err
178
179       accessTokenUser = token
180
181       done()
182     })
183   })
184
185   it('Should be able to get the user informations', function (done) {
186     usersUtils.getUserInformation(server.url, accessTokenUser, function (err, res) {
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
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'
205     videosUtils.uploadVideo(server.url, accessTokenUser, name, description, tags, file, done)
206   })
207
208   it('Should list all the users', function (done) {
209     usersUtils.getUsersList(server.url, function (err, res) {
210       if (err) throw err
211
212       const result = res.body
213       const total = result.total
214       const users = result.data
215
216       expect(total).to.equal(2)
217       expect(users).to.be.an('array')
218       expect(users.length).to.equal(2)
219
220       const user = users[0]
221       expect(user.username).to.equal('user_1')
222
223       const rootUser = users[1]
224       expect(rootUser.username).to.equal('root')
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)
241
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]
261       expect(user.username).to.equal('user_1')
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')
298
299       done()
300     })
301   })
302
303   it('Should update the user password', function (done) {
304     usersUtils.updateUser(server.url, userId, accessTokenUser, 'new password', function (err, res) {
305       if (err) throw err
306
307       server.user.password = 'new password'
308       loginUtils.login(server.url, server.client, server.user, 200, done)
309     })
310   })
311
312   it('Should be able to remove this user', function (done) {
313     usersUtils.removeUser(server.url, userId, accessToken, done)
314   })
315
316   it('Should not be able to login with this user', function (done) {
317     // server.user is already set to user 1
318     loginUtils.login(server.url, server.client, server.user, 400, done)
319   })
320
321   it('Should not have videos of this user', function (done) {
322     videosUtils.getVideosList(server.url, function (err, res) {
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
333   after(function (done) {
334     process.kill(-server.app.pid)
335
336     // Keep the logs if the test failed
337     if (this.ok) {
338       serversUtils.flushTests(done)
339     } else {
340       done()
341     }
342   })
343 })