]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/friendsBasic.js
Server: do not allow a user to remove a video of another user
[github/Chocobozzz/PeerTube.git] / server / tests / api / friendsBasic.js
CommitLineData
9f10b292 1'use strict'
8c308c2b 2
f0f5567b 3const chai = require('chai')
1a42c9e2 4const each = require('async/each')
f0f5567b 5const expect = chai.expect
1a42c9e2 6const series = require('async/series')
8c308c2b 7
f0f5567b 8const utils = require('./utils')
8c308c2b 9
9f10b292 10describe('Test basic friends', function () {
0c1cbbfe 11 let servers = []
ee66c593 12
b3b92647
C
13 function makeFriends (podNumber, callback) {
14 const server = servers[podNumber - 1]
15 return utils.makeFriends(server.url, server.accessToken, callback)
16 }
17
bc503c2a 18 function testMadeFriends (servers, serverToTest, callback) {
f0f5567b 19 const friends = []
0c1cbbfe 20 for (let i = 0; i < servers.length; i++) {
bc503c2a 21 if (servers[i].url === serverToTest.url) continue
0c1cbbfe 22 friends.push(servers[i].url)
9f10b292
C
23 }
24
bc503c2a 25 utils.getFriendsList(serverToTest.url, function (err, res) {
9f10b292
C
26 if (err) throw err
27
f0f5567b 28 const result = res.body
9f10b292
C
29 expect(result).to.be.an('array')
30 expect(result.length).to.equal(2)
528a9efa
C
31
32 const resultUrls = [ result[0].url, result[1].url ]
bc503c2a 33 expect(resultUrls[0]).to.not.equal(resultUrls[1])
45239549 34
bc503c2a
C
35 const errorString = 'Friends url do not correspond for ' + serverToTest.url
36 expect(friends).to.contain(resultUrls[0], errorString)
37 expect(friends).to.contain(resultUrls[1], errorString)
9f10b292
C
38 callback()
39 })
40 }
41
42 // ---------------------------------------------------------------
43
44 before(function (done) {
45 this.timeout(20000)
bc503c2a
C
46 utils.flushAndRunMultipleServers(3, function (serversRun, urlsRun) {
47 servers = serversRun
b3b92647 48
1a42c9e2 49 each(servers, function (server, callbackEach) {
b3b92647
C
50 utils.loginAndGetAccessToken(server, function (err, accessToken) {
51 if (err) return callbackEach(err)
52
53 server.accessToken = accessToken
54 callbackEach()
55 })
56 }, done)
9f10b292
C
57 })
58 })
59
60 it('Should not have friends', function (done) {
1a42c9e2 61 each(servers, function (server, callback) {
0c1cbbfe 62 utils.getFriendsList(server.url, function (err, res) {
45239549
C
63 if (err) throw err
64
f0f5567b 65 const result = res.body
45239549 66 expect(result).to.be.an('array')
9f10b292 67 expect(result.length).to.equal(0)
45239549
C
68 callback()
69 })
9f10b292
C
70 }, done)
71 })
45239549 72
9f10b292
C
73 it('Should make friends', function (done) {
74 this.timeout(10000)
75
1a42c9e2 76 series([
9f10b292
C
77 // The second pod make friend with the third
78 function (next) {
b3b92647 79 makeFriends(2, next)
9f10b292
C
80 },
81 // Wait for the request between pods
82 function (next) {
83 setTimeout(next, 1000)
84 },
85 // The second pod should have the third as a friend
86 function (next) {
0c1cbbfe 87 utils.getFriendsList(servers[1].url, function (err, res) {
9f10b292 88 if (err) throw err
8c308c2b 89
f0f5567b 90 const result = res.body
9f10b292
C
91 expect(result).to.be.an('array')
92 expect(result.length).to.equal(1)
0c1cbbfe 93 expect(result[0].url).to.be.equal(servers[2].url)
8c308c2b 94
9f10b292
C
95 next()
96 })
97 },
98 // Same here, the third pod should have the second pod as a friend
99 function (next) {
0c1cbbfe 100 utils.getFriendsList(servers[2].url, function (err, res) {
8c308c2b
C
101 if (err) throw err
102
f0f5567b 103 const result = res.body
8c308c2b 104 expect(result).to.be.an('array')
9f10b292 105 expect(result.length).to.equal(1)
0c1cbbfe 106 expect(result[0].url).to.be.equal(servers[1].url)
9f10b292
C
107
108 next()
8c308c2b 109 })
9f10b292
C
110 },
111 // Finally the first pod make friend with the second pod
112 function (next) {
b3b92647 113 makeFriends(1, next)
9f10b292
C
114 },
115 // Wait for the request between pods
116 function (next) {
117 setTimeout(next, 1000)
118 }
119 ],
120 // Now each pod should be friend with the other ones
121 function (err) {
122 if (err) throw err
1a42c9e2 123 each(servers, function (server, callback) {
0c1cbbfe 124 testMadeFriends(servers, server, callback)
ee66c593 125 }, done)
8c308c2b 126 })
9f10b292 127 })
8c308c2b 128
9f10b292 129 it('Should not be allowed to make friend again', function (done) {
b3b92647
C
130 const server = servers[1]
131 utils.makeFriends(server.url, server.accessToken, 409, done)
9f10b292 132 })
8c308c2b 133
9f10b292 134 it('Should quit friends of pod 2', function (done) {
1a42c9e2 135 series([
9f10b292
C
136 // Pod 1 quit friends
137 function (next) {
b3b92647
C
138 const server = servers[1]
139 utils.quitFriends(server.url, server.accessToken, next)
9f10b292
C
140 },
141 // Pod 1 should not have friends anymore
142 function (next) {
0c1cbbfe 143 utils.getFriendsList(servers[1].url, function (err, res) {
9f10b292 144 if (err) throw err
8c308c2b 145
f0f5567b 146 const result = res.body
9f10b292
C
147 expect(result).to.be.an('array')
148 expect(result.length).to.equal(0)
149
150 next()
151 })
152 },
153 // Other pods shouldn't have pod 1 too
154 function (next) {
1a42c9e2 155 each([ servers[0].url, servers[2].url ], function (url, callback) {
9f10b292 156 utils.getFriendsList(url, function (err, res) {
ee66c593
C
157 if (err) throw err
158
f0f5567b 159 const result = res.body
ee66c593
C
160 expect(result).to.be.an('array')
161 expect(result.length).to.equal(1)
0c1cbbfe 162 expect(result[0].url).not.to.be.equal(servers[1].url)
9f10b292 163 callback()
ee66c593 164 })
9f10b292
C
165 }, next)
166 }
167 ], done)
168 })
45239549 169
9f10b292 170 it('Should allow pod 2 to make friend again', function (done) {
b3b92647
C
171 const server = servers[1]
172 utils.makeFriends(server.url, server.accessToken, function () {
1a42c9e2 173 each(servers, function (server, callback) {
0c1cbbfe 174 testMadeFriends(servers, server, callback)
9f10b292 175 }, done)
45239549 176 })
9f10b292 177 })
45239549 178
9f10b292 179 after(function (done) {
0c1cbbfe
C
180 servers.forEach(function (server) {
181 process.kill(-server.app.pid)
45239549 182 })
8c308c2b 183
9f10b292
C
184 if (this.ok) {
185 utils.flushTests(done)
186 } else {
187 done()
188 }
8c308c2b 189 })
9f10b292 190})