]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/single-pod.js
3 const chai
= require('chai')
4 const each
= require('async/each')
5 const expect
= chai
.expect
6 const fs
= require('fs')
7 const keyBy
= require('lodash/keyBy')
8 const pathUtils
= require('path')
9 const series
= require('async/series')
10 const webtorrent
= new (require('webtorrent'))()
12 const loginUtils
= require('../utils/login')
13 const miscsUtils
= require('../utils/miscs')
14 const serversUtils
= require('../utils/servers')
15 const videosUtils
= require('../utils/videos')
17 describe('Test a single pod', function () {
20 let videosListBase
= null
22 before(function (done
) {
27 serversUtils
.flushTests(next
)
30 serversUtils
.runServer(1, function (server1
) {
36 loginUtils
.loginAndGetAccessToken(server
, function (err
, token
) {
38 server
.accessToken
= token
45 it('Should not have videos', function (done
) {
46 videosUtils
.getVideosList(server
.url
, function (err
, res
) {
49 expect(res
.body
.total
).to
.equal(0)
50 expect(res
.body
.data
).to
.be
.an('array')
51 expect(res
.body
.data
.length
).to
.equal(0)
57 it('Should upload the video', function (done
) {
59 const name
= 'my super name'
60 const description
= 'my super description'
61 const tags
= [ 'tag1', 'tag2', 'tag3' ]
62 const file
= 'video_short.webm'
63 videosUtils
.uploadVideo(server
.url
, server
.accessToken
, name
, description
, tags
, file
, done
)
66 it('Should seed the uploaded video', function (done
) {
67 // Yes, this could be long
70 videosUtils
.getVideosList(server
.url
, function (err
, res
) {
73 expect(res
.body
.total
).to
.equal(1)
74 expect(res
.body
.data
).to
.be
.an('array')
75 expect(res
.body
.data
.length
).to
.equal(1)
77 const video
= res
.body
.data
[0]
78 expect(video
.name
).to
.equal('my super name')
79 expect(video
.description
).to
.equal('my super description')
80 expect(video
.podUrl
).to
.equal('localhost:9001')
81 expect(video
.magnetUri
).to
.exist
82 expect(video
.author
).to
.equal('root')
83 expect(video
.isLocal
).to
.be
.true
84 expect(video
.tags
).to
.deep
.equal([ 'tag1', 'tag2', 'tag3' ])
85 expect(miscsUtils
.dateIsValid(video
.createdDate
)).to
.be
.true
87 videosUtils
.testVideoImage(server
.url
, 'video_short.webm', video
.thumbnailPath
, function (err
, test
) {
89 expect(test
).to
.equal(true)
93 webtorrent
.add(video
.magnetUri
, function (torrent
) {
94 expect(torrent
.files
).to
.exist
95 expect(torrent
.files
.length
).to
.equal(1)
96 expect(torrent
.files
[0].path
).to
.exist
.and
.to
.not
.equal('')
104 it('Should get the video', function (done
) {
105 // Yes, this could be long
108 videosUtils
.getVideo(server
.url
, videoId
, function (err
, res
) {
111 const video
= res
.body
112 expect(video
.name
).to
.equal('my super name')
113 expect(video
.description
).to
.equal('my super description')
114 expect(video
.podUrl
).to
.equal('localhost:9001')
115 expect(video
.magnetUri
).to
.exist
116 expect(video
.author
).to
.equal('root')
117 expect(video
.isLocal
).to
.be
.true
118 expect(video
.tags
).to
.deep
.equal([ 'tag1', 'tag2', 'tag3' ])
119 expect(miscsUtils
.dateIsValid(video
.createdDate
)).to
.be
.true
121 videosUtils
.testVideoImage(server
.url
, 'video_short.webm', video
.thumbnailPath
, function (err
, test
) {
123 expect(test
).to
.equal(true)
130 it('Should search the video by name by default', function (done
) {
131 videosUtils
.searchVideo(server
.url
, 'my', function (err
, res
) {
134 expect(res
.body
.total
).to
.equal(1)
135 expect(res
.body
.data
).to
.be
.an('array')
136 expect(res
.body
.data
.length
).to
.equal(1)
138 const video
= res
.body
.data
[0]
139 expect(video
.name
).to
.equal('my super name')
140 expect(video
.description
).to
.equal('my super description')
141 expect(video
.podUrl
).to
.equal('localhost:9001')
142 expect(video
.author
).to
.equal('root')
143 expect(video
.isLocal
).to
.be
.true
144 expect(video
.tags
).to
.deep
.equal([ 'tag1', 'tag2', 'tag3' ])
145 expect(miscsUtils
.dateIsValid(video
.createdDate
)).to
.be
.true
147 videosUtils
.testVideoImage(server
.url
, 'video_short.webm', video
.thumbnailPath
, function (err
, test
) {
149 expect(test
).to
.equal(true)
156 it('Should search the video by podUrl', function (done
) {
157 videosUtils
.searchVideo(server
.url
, '9001', 'podUrl', function (err
, res
) {
160 expect(res
.body
.total
).to
.equal(1)
161 expect(res
.body
.data
).to
.be
.an('array')
162 expect(res
.body
.data
.length
).to
.equal(1)
164 const video
= res
.body
.data
[0]
165 expect(video
.name
).to
.equal('my super name')
166 expect(video
.description
).to
.equal('my super description')
167 expect(video
.podUrl
).to
.equal('localhost:9001')
168 expect(video
.author
).to
.equal('root')
169 expect(video
.isLocal
).to
.be
.true
170 expect(video
.tags
).to
.deep
.equal([ 'tag1', 'tag2', 'tag3' ])
171 expect(miscsUtils
.dateIsValid(video
.createdDate
)).to
.be
.true
173 videosUtils
.testVideoImage(server
.url
, 'video_short.webm', video
.thumbnailPath
, function (err
, test
) {
175 expect(test
).to
.equal(true)
182 it('Should search the video by tag', function (done
) {
183 videosUtils
.searchVideo(server
.url
, 'tag1', 'tags', function (err
, res
) {
186 expect(res
.body
.total
).to
.equal(1)
187 expect(res
.body
.data
).to
.be
.an('array')
188 expect(res
.body
.data
.length
).to
.equal(1)
190 const video
= res
.body
.data
[0]
191 expect(video
.name
).to
.equal('my super name')
192 expect(video
.description
).to
.equal('my super description')
193 expect(video
.podUrl
).to
.equal('localhost:9001')
194 expect(video
.author
).to
.equal('root')
195 expect(video
.isLocal
).to
.be
.true
196 expect(video
.tags
).to
.deep
.equal([ 'tag1', 'tag2', 'tag3' ])
197 expect(miscsUtils
.dateIsValid(video
.createdDate
)).to
.be
.true
199 videosUtils
.testVideoImage(server
.url
, 'video_short.webm', video
.thumbnailPath
, function (err
, test
) {
201 expect(test
).to
.equal(true)
208 it('Should not find a search by name by default', function (done
) {
209 videosUtils
.searchVideo(server
.url
, 'hello', function (err
, res
) {
212 expect(res
.body
.total
).to
.equal(0)
213 expect(res
.body
.data
).to
.be
.an('array')
214 expect(res
.body
.data
.length
).to
.equal(0)
220 it('Should not find a search by author', function (done
) {
221 videosUtils
.searchVideo(server
.url
, 'hello', 'author', function (err
, res
) {
224 expect(res
.body
.total
).to
.equal(0)
225 expect(res
.body
.data
).to
.be
.an('array')
226 expect(res
.body
.data
.length
).to
.equal(0)
232 it('Should not find a search by tag', function (done
) {
233 videosUtils
.searchVideo(server
.url
, 'tag', 'tags', function (err
, res
) {
236 expect(res
.body
.total
).to
.equal(0)
237 expect(res
.body
.data
).to
.be
.an('array')
238 expect(res
.body
.data
.length
).to
.equal(0)
244 it('Should remove the video', function (done
) {
245 videosUtils
.removeVideo(server
.url
, server
.accessToken
, videoId
, function (err
) {
248 fs
.readdir(pathUtils
.join(__dirname
, '../../../test1/uploads/'), function (err
, files
) {
251 expect(files
.length
).to
.equal(0)
257 it('Should not have videos', function (done
) {
258 videosUtils
.getVideosList(server
.url
, function (err
, res
) {
261 expect(res
.body
.total
).to
.equal(0)
262 expect(res
.body
.data
).to
.be
.an('array')
263 expect(res
.body
.data
.length
).to
.equal(0)
269 it('Should upload 6 videos', function (done
) {
272 'video_short.mp4', 'video_short.ogv', 'video_short.webm',
273 'video_short1.webm', 'video_short2.webm', 'video_short3.webm'
275 each(videos
, function (video
, callbackEach
) {
276 const name
= video
+ ' name'
277 const description
= video
+ ' description'
278 const tags
= [ 'tag1', 'tag2', 'tag3' ]
280 videosUtils
.uploadVideo(server
.url
, server
.accessToken
, name
, description
, tags
, video
, callbackEach
)
284 it('Should have the correct durations', function (done
) {
285 videosUtils
.getVideosList(server
.url
, function (err
, res
) {
288 expect(res
.body
.total
).to
.equal(6)
289 const videos
= res
.body
.data
290 expect(videos
).to
.be
.an('array')
291 expect(videos
.length
).to
.equal(6)
293 const videosByName
= keyBy(videos
, 'name')
294 expect(videosByName
['video_short.mp4 name'].duration
).to
.equal(5)
295 expect(videosByName
['video_short.ogv name'].duration
).to
.equal(5)
296 expect(videosByName
['video_short.webm name'].duration
).to
.equal(5)
297 expect(videosByName
['video_short1.webm name'].duration
).to
.equal(10)
298 expect(videosByName
['video_short2.webm name'].duration
).to
.equal(5)
299 expect(videosByName
['video_short3.webm name'].duration
).to
.equal(5)
305 it('Should have the correct thumbnails', function (done
) {
306 videosUtils
.getVideosList(server
.url
, function (err
, res
) {
309 const videos
= res
.body
.data
311 videosListBase
= videos
313 each(videos
, function (video
, callbackEach
) {
315 const videoName
= video
.name
.replace(' name', '')
317 videosUtils
.testVideoImage(server
.url
, videoName
, video
.thumbnailPath
, function (err
, test
) {
320 expect(test
).to
.equal(true)
327 it('Should list only the two first videos', function (done
) {
328 videosUtils
.getVideosListPagination(server
.url
, 0, 2, function (err
, res
) {
331 const videos
= res
.body
.data
332 expect(res
.body
.total
).to
.equal(6)
333 expect(videos
.length
).to
.equal(2)
334 expect(videos
[0].name
=== videosListBase
[0].name
)
335 expect(videos
[1].name
=== videosListBase
[1].name
)
341 it('Should list only the next three videos', function (done
) {
342 videosUtils
.getVideosListPagination(server
.url
, 2, 3, function (err
, res
) {
345 const videos
= res
.body
.data
346 expect(res
.body
.total
).to
.equal(6)
347 expect(videos
.length
).to
.equal(3)
348 expect(videos
[0].name
=== videosListBase
[2].name
)
349 expect(videos
[1].name
=== videosListBase
[3].name
)
350 expect(videos
[2].name
=== videosListBase
[4].name
)
356 it('Should list the last video', function (done
) {
357 videosUtils
.getVideosListPagination(server
.url
, 5, 6, function (err
, res
) {
360 const videos
= res
.body
.data
361 expect(res
.body
.total
).to
.equal(6)
362 expect(videos
.length
).to
.equal(1)
363 expect(videos
[0].name
=== videosListBase
[5].name
)
369 it('Should search the first video', function (done
) {
370 videosUtils
.searchVideoWithPagination(server
.url
, 'webm', 'name', 0, 1, function (err
, res
) {
373 const videos
= res
.body
.data
374 expect(res
.body
.total
).to
.equal(4)
375 expect(videos
.length
).to
.equal(1)
376 expect(videos
[0].name
=== 'video_short.webm name')
382 it('Should search the last two videos', function (done
) {
383 videosUtils
.searchVideoWithPagination(server
.url
, 'webm', 'name', 2, 2, function (err
, res
) {
386 const videos
= res
.body
.data
387 expect(res
.body
.total
).to
.equal(4)
388 expect(videos
.length
).to
.equal(2)
389 expect(videos
[0].name
=== 'video_short2.webm name')
390 expect(videos
[1].name
=== 'video_short3.webm name')
396 it('Should search all the webm videos', function (done
) {
397 videosUtils
.searchVideoWithPagination(server
.url
, 'webm', 'name', 0, 15, function (err
, res
) {
400 const videos
= res
.body
.data
401 expect(res
.body
.total
).to
.equal(4)
402 expect(videos
.length
).to
.equal(4)
408 it('Should search all the root author videos', function (done
) {
409 videosUtils
.searchVideoWithPagination(server
.url
, 'root', 'author', 0, 15, function (err
, res
) {
412 const videos
= res
.body
.data
413 expect(res
.body
.total
).to
.equal(6)
414 expect(videos
.length
).to
.equal(6)
420 it('Should search all the 9001 port videos', function (done
) {
421 videosUtils
.searchVideoWithPagination(server
.url
, '9001', 'podUrl', 0, 15, function (err
, res
) {
424 const videos
= res
.body
.data
425 expect(res
.body
.total
).to
.equal(6)
426 expect(videos
.length
).to
.equal(6)
432 it('Should search all the localhost videos', function (done
) {
433 videosUtils
.searchVideoWithPagination(server
.url
, 'localhost', 'podUrl', 0, 15, function (err
, res
) {
436 const videos
= res
.body
.data
437 expect(res
.body
.total
).to
.equal(6)
438 expect(videos
.length
).to
.equal(6)
444 it('Should search the good magnetUri video', function (done
) {
445 const video
= videosListBase
[0]
446 videosUtils
.searchVideoWithPagination(server
.url
, encodeURIComponent(video
.magnetUri
), 'magnetUri', 0, 15, function (err
, res
) {
449 const videos
= res
.body
.data
450 expect(res
.body
.total
).to
.equal(1)
451 expect(videos
.length
).to
.equal(1)
452 expect(videos
[0].name
).to
.equal(video
.name
)
458 it('Should list and sort by name in descending order', function (done
) {
459 videosUtils
.getVideosListSort(server
.url
, '-name', function (err
, res
) {
462 const videos
= res
.body
.data
463 expect(res
.body
.total
).to
.equal(6)
464 expect(videos
.length
).to
.equal(6)
465 expect(videos
[5].name
=== 'video_short.mp4 name')
466 expect(videos
[4].name
=== 'video_short.ogv name')
467 expect(videos
[3].name
=== 'video_short.webm name')
468 expect(videos
[2].name
=== 'video_short1.webm name')
469 expect(videos
[1].name
=== 'video_short2.webm name')
470 expect(videos
[0].name
=== 'video_short3.webm name')
476 it('Should search and sort by name in ascending order', function (done
) {
477 videosUtils
.searchVideoWithSort(server
.url
, 'webm', 'name', function (err
, res
) {
480 const videos
= res
.body
.data
481 expect(res
.body
.total
).to
.equal(4)
482 expect(videos
.length
).to
.equal(4)
484 expect(videos
[0].name
=== 'video_short.webm name')
485 expect(videos
[1].name
=== 'video_short1.webm name')
486 expect(videos
[2].name
=== 'video_short2.webm name')
487 expect(videos
[3].name
=== 'video_short3.webm name')
493 after(function (done
) {
494 process
.kill(-server
.app
.pid
)
496 // Keep the logs if the test failed
498 serversUtils
.flushTests(done
)