2016-08-07 16:09:59 -04:00
|
|
|
'use strict'
|
|
|
|
|
|
|
|
const fs = require('fs')
|
|
|
|
const pathUtils = require('path')
|
|
|
|
const request = require('supertest')
|
|
|
|
|
|
|
|
const videosUtils = {
|
2017-03-22 16:15:55 -04:00
|
|
|
getVideoCategories,
|
2016-10-02 06:19:02 -04:00
|
|
|
getAllVideosListBy,
|
|
|
|
getVideo,
|
|
|
|
getVideosList,
|
|
|
|
getVideosListPagination,
|
|
|
|
getVideosListSort,
|
|
|
|
removeVideo,
|
|
|
|
searchVideo,
|
|
|
|
searchVideoWithPagination,
|
|
|
|
searchVideoWithSort,
|
|
|
|
testVideoImage,
|
2016-12-29 13:07:05 -05:00
|
|
|
uploadVideo,
|
2017-03-08 15:35:43 -05:00
|
|
|
updateVideo,
|
|
|
|
rateVideo
|
2016-08-07 16:09:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------- Export functions --------------------
|
|
|
|
|
2017-03-22 16:15:55 -04:00
|
|
|
function getVideoCategories (url, end) {
|
|
|
|
const path = '/api/v1/videos/categories'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.get(path)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
2016-08-07 16:09:59 -04:00
|
|
|
function getAllVideosListBy (url, end) {
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.get(path)
|
2016-12-11 15:50:51 -05:00
|
|
|
.query({ sort: 'createdAt' })
|
2016-08-07 16:09:59 -04:00
|
|
|
.query({ start: 0 })
|
|
|
|
.query({ count: 10000 })
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
|
|
|
function getVideo (url, id, end) {
|
|
|
|
const path = '/api/v1/videos/' + id
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.get(path)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
|
|
|
function getVideosList (url, end) {
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.get(path)
|
|
|
|
.query({ sort: 'name' })
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
2017-01-12 07:08:47 -05:00
|
|
|
function getVideosListPagination (url, start, count, sort, end) {
|
|
|
|
if (!end) {
|
|
|
|
end = sort
|
|
|
|
sort = null
|
|
|
|
}
|
|
|
|
|
2016-08-07 16:09:59 -04:00
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
2017-01-12 07:08:47 -05:00
|
|
|
const req = request(url)
|
|
|
|
.get(path)
|
|
|
|
.query({ start: start })
|
|
|
|
.query({ count: count })
|
|
|
|
|
|
|
|
if (sort) req.query({ sort })
|
|
|
|
|
|
|
|
req.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
2016-08-07 16:09:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function getVideosListSort (url, sort, end) {
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.get(path)
|
|
|
|
.query({ sort: sort })
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
|
|
|
function removeVideo (url, token, id, expectedStatus, end) {
|
|
|
|
if (!end) {
|
|
|
|
end = expectedStatus
|
|
|
|
expectedStatus = 204
|
|
|
|
}
|
|
|
|
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.delete(path + '/' + id)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.set('Authorization', 'Bearer ' + token)
|
|
|
|
.expect(expectedStatus)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
|
|
|
function searchVideo (url, search, field, end) {
|
|
|
|
if (!end) {
|
|
|
|
end = field
|
|
|
|
field = null
|
|
|
|
}
|
|
|
|
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
const req = request(url)
|
|
|
|
.get(path + '/search/' + search)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
|
|
|
|
if (field) req.query({ field: field })
|
|
|
|
req.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
2017-01-12 07:08:47 -05:00
|
|
|
function searchVideoWithPagination (url, search, field, start, count, sort, end) {
|
|
|
|
if (!end) {
|
|
|
|
end = sort
|
|
|
|
sort = null
|
|
|
|
}
|
|
|
|
|
2016-08-07 16:09:59 -04:00
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
2017-01-12 07:08:47 -05:00
|
|
|
const req = request(url)
|
|
|
|
.get(path + '/search/' + search)
|
|
|
|
.query({ start: start })
|
|
|
|
.query({ count: count })
|
|
|
|
.query({ field: field })
|
|
|
|
|
|
|
|
if (sort) req.query({ sort })
|
|
|
|
|
|
|
|
req.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
2016-08-07 16:09:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function searchVideoWithSort (url, search, sort, end) {
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.get(path + '/search/' + search)
|
|
|
|
.query({ sort: sort })
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.expect(200)
|
|
|
|
.expect('Content-Type', /json/)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
|
|
|
function testVideoImage (url, videoName, imagePath, callback) {
|
|
|
|
// Don't test images if the node env is not set
|
|
|
|
// Because we need a special ffmpeg version for this test
|
|
|
|
if (process.env.NODE_TEST_IMAGE) {
|
|
|
|
request(url)
|
|
|
|
.get(imagePath)
|
|
|
|
.expect(200)
|
|
|
|
.end(function (err, res) {
|
|
|
|
if (err) return callback(err)
|
|
|
|
|
|
|
|
fs.readFile(pathUtils.join(__dirname, '..', 'api', 'fixtures', videoName + '.jpg'), function (err, data) {
|
|
|
|
if (err) return callback(err)
|
|
|
|
|
|
|
|
callback(null, data.equals(res.body))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
console.log('Do not test images. Enable it by setting NODE_TEST_IMAGE env variable.')
|
|
|
|
callback(null, true)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-22 16:15:55 -04:00
|
|
|
function uploadVideo (url, accessToken, name, category, description, tags, fixture, specialStatus, end) {
|
2016-08-07 16:09:59 -04:00
|
|
|
if (!end) {
|
|
|
|
end = specialStatus
|
|
|
|
specialStatus = 204
|
|
|
|
}
|
|
|
|
|
|
|
|
const path = '/api/v1/videos'
|
|
|
|
|
|
|
|
const req = request(url)
|
|
|
|
.post(path)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.set('Authorization', 'Bearer ' + accessToken)
|
|
|
|
.field('name', name)
|
2017-03-22 16:15:55 -04:00
|
|
|
.field('category', category)
|
2016-08-07 16:09:59 -04:00
|
|
|
.field('description', description)
|
|
|
|
|
|
|
|
for (let i = 0; i < tags.length; i++) {
|
|
|
|
req.field('tags[' + i + ']', tags[i])
|
|
|
|
}
|
|
|
|
|
|
|
|
let filepath = ''
|
|
|
|
if (pathUtils.isAbsolute(fixture)) {
|
|
|
|
filepath = fixture
|
|
|
|
} else {
|
|
|
|
filepath = pathUtils.join(__dirname, '..', 'api', 'fixtures', fixture)
|
|
|
|
}
|
|
|
|
|
|
|
|
req.attach('videofile', filepath)
|
|
|
|
.expect(specialStatus)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
2017-03-22 16:15:55 -04:00
|
|
|
function updateVideo (url, accessToken, id, name, category, description, tags, specialStatus, end) {
|
2016-12-29 13:07:05 -05:00
|
|
|
if (!end) {
|
|
|
|
end = specialStatus
|
|
|
|
specialStatus = 204
|
|
|
|
}
|
|
|
|
|
|
|
|
const path = '/api/v1/videos/' + id
|
|
|
|
|
|
|
|
const req = request(url)
|
|
|
|
.put(path)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.set('Authorization', 'Bearer ' + accessToken)
|
|
|
|
|
|
|
|
if (name) req.field('name', name)
|
2017-03-22 16:15:55 -04:00
|
|
|
if (category) req.field('category', category)
|
2016-12-29 13:07:05 -05:00
|
|
|
if (description) req.field('description', description)
|
|
|
|
|
|
|
|
if (tags) {
|
|
|
|
for (let i = 0; i < tags.length; i++) {
|
|
|
|
req.field('tags[' + i + ']', tags[i])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
req.expect(specialStatus).end(end)
|
|
|
|
}
|
|
|
|
|
2017-03-08 15:35:43 -05:00
|
|
|
function rateVideo (url, accessToken, id, rating, specialStatus, end) {
|
|
|
|
if (!end) {
|
|
|
|
end = specialStatus
|
|
|
|
specialStatus = 204
|
|
|
|
}
|
|
|
|
|
|
|
|
const path = '/api/v1/videos/' + id + '/rate'
|
|
|
|
|
|
|
|
request(url)
|
|
|
|
.put(path)
|
|
|
|
.set('Accept', 'application/json')
|
|
|
|
.set('Authorization', 'Bearer ' + accessToken)
|
|
|
|
.send({ rating })
|
|
|
|
.expect(specialStatus)
|
|
|
|
.end(end)
|
|
|
|
}
|
|
|
|
|
2016-08-07 16:09:59 -04:00
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
module.exports = videosUtils
|