Don't forget to test the client stuffs
[oweals/peertube.git] / server / tests / api / users.js
1 'use strict'
2
3 const async = require('async')
4 const chai = require('chai')
5 const expect = chai.expect
6 const pathUtils = require('path')
7
8 const webtorrent = require(pathUtils.join(__dirname, '../../lib/webtorrent'))
9 webtorrent.silent = true
10
11 const utils = require('./utils')
12
13 describe('Test users', function () {
14   let server = null
15   let access_token = null
16   let video_id
17
18   before(function (done) {
19     this.timeout(20000)
20
21     async.series([
22       function (next) {
23         utils.flushTests(next)
24       },
25       function (next) {
26         utils.runServer(1, function (server1) {
27           server = server1
28           next()
29         })
30       }
31     ], done)
32   })
33
34   it('Should create a new client')
35
36   it('Should return the first client')
37
38   it('Should remove the last client')
39
40   it('Should not login with an invalid client id', function (done) {
41     const client = { id: 'client', password: server.client.secret }
42     utils.login(server.url, client, server.user, 400, function (err, res) {
43       if (err) throw err
44
45       expect(res.body.error).to.equal('invalid_client')
46       done()
47     })
48   })
49
50   it('Should not login with an invalid client password', function (done) {
51     const client = { id: server.client.id, password: 'coucou' }
52     utils.login(server.url, client, server.user, 400, function (err, res) {
53       if (err) throw err
54
55       expect(res.body.error).to.equal('invalid_client')
56       done()
57     })
58   })
59
60   it('Should not login with an invalid username', function (done) {
61     const user = { username: 'captain crochet', password: server.user.password }
62     utils.login(server.url, server.client, user, 400, function (err, res) {
63       if (err) throw err
64
65       expect(res.body.error).to.equal('invalid_grant')
66       done()
67     })
68   })
69
70   it('Should not login with an invalid password', function (done) {
71     const user = { username: server.user.username, password: 'mewthree' }
72     utils.login(server.url, server.client, user, 400, function (err, res) {
73       if (err) throw err
74
75       expect(res.body.error).to.equal('invalid_grant')
76       done()
77     })
78   })
79
80   it('Should not be able to upload a video', function (done) {
81     access_token = 'mysupertoken'
82     utils.uploadVideo(server.url, access_token, 'my super name', 'my super description', 'video_short.webm', 401, done)
83   })
84
85   it('Should be able to login', function (done) {
86     utils.login(server.url, server.client, server.user, 200, function (err, res) {
87       if (err) throw err
88
89       access_token = res.body.access_token
90       done()
91     })
92   })
93
94   it('Should upload the video with the correct token', function (done) {
95     utils.uploadVideo(server.url, access_token, 'my super name', 'my super description', 'video_short.webm', 204, function (err, res) {
96       if (err) throw err
97
98       utils.getVideosList(server.url, function (err, res) {
99         if (err) throw err
100
101         video_id = res.body[0].id
102         done()
103       })
104     })
105   })
106
107   it('Should upload the video again with the correct token', function (done) {
108     utils.uploadVideo(server.url, access_token, 'my super name 2', 'my super description 2', 'video_short.webm', 204, done)
109   })
110
111   it('Should not be able to remove the video with an incorrect token', function (done) {
112     utils.removeVideo(server.url, 'bad_token', video_id, 401, done)
113   })
114
115   it('Should not be able to remove the video with the token of another account')
116
117   it('Should be able to remove the video with the correct token', function (done) {
118     utils.removeVideo(server.url, access_token, video_id, done)
119   })
120
121   it('Should logout')
122
123   it('Should not be able to upload a video')
124
125   it('Should not be able to remove a video')
126
127   it('Should be able to login again')
128
129   after(function (done) {
130     process.kill(-server.app.pid)
131
132     // Keep the logs if the test failed
133     if (this.ok) {
134       utils.flushTests(done)
135     } else {
136       done()
137     }
138   })
139 })