1
0
Fork 0

Server: add licence video attribute

This commit is contained in:
Chocobozzz 2017-03-27 20:53:11 +02:00
parent 2897488928
commit 6f0c39e2de
14 changed files with 209 additions and 3 deletions

View file

@ -295,6 +295,7 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
extname: videoToCreateData.extname, extname: videoToCreateData.extname,
infoHash: videoToCreateData.infoHash, infoHash: videoToCreateData.infoHash,
category: videoToCreateData.category, category: videoToCreateData.category,
licence: videoToCreateData.licence,
description: videoToCreateData.description, description: videoToCreateData.description,
authorId: author.id, authorId: author.id,
duration: videoToCreateData.duration, duration: videoToCreateData.duration,
@ -392,6 +393,7 @@ function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) {
videoInstance.set('name', videoAttributesToUpdate.name) videoInstance.set('name', videoAttributesToUpdate.name)
videoInstance.set('category', videoAttributesToUpdate.category) videoInstance.set('category', videoAttributesToUpdate.category)
videoInstance.set('licence', videoAttributesToUpdate.licence)
videoInstance.set('description', videoAttributesToUpdate.description) videoInstance.set('description', videoAttributesToUpdate.description)
videoInstance.set('infoHash', videoAttributesToUpdate.infoHash) videoInstance.set('infoHash', videoAttributesToUpdate.infoHash)
videoInstance.set('duration', videoAttributesToUpdate.duration) videoInstance.set('duration', videoAttributesToUpdate.duration)

View file

@ -46,6 +46,7 @@ const storage = multer.diskStorage({
const reqFiles = multer({ storage: storage }).fields([{ name: 'videofile', maxCount: 1 }]) const reqFiles = multer({ storage: storage }).fields([{ name: 'videofile', maxCount: 1 }])
router.get('/categories', listVideoCategories) router.get('/categories', listVideoCategories)
router.get('/licences', listVideoLicences)
router.get('/abuse', router.get('/abuse',
oAuth.authenticate, oAuth.authenticate,
@ -116,6 +117,10 @@ function listVideoCategories (req, res, next) {
res.json(constants.VIDEO_CATEGORIES) res.json(constants.VIDEO_CATEGORIES)
} }
function listVideoLicences (req, res, next) {
res.json(constants.VIDEO_LICENCES)
}
function rateVideoRetryWrapper (req, res, next) { function rateVideoRetryWrapper (req, res, next) {
const options = { const options = {
arguments: [ req, res ], arguments: [ req, res ],
@ -307,6 +312,7 @@ function addVideo (req, res, videoFile, finalCallback) {
remoteId: null, remoteId: null,
extname: path.extname(videoFile.filename), extname: path.extname(videoFile.filename),
category: videoInfos.category, category: videoInfos.category,
licence: videoInfos.licence,
description: videoInfos.description, description: videoInfos.description,
duration: videoFile.duration, duration: videoFile.duration,
authorId: author.id authorId: author.id
@ -421,6 +427,7 @@ function updateVideo (req, res, finalCallback) {
if (videoInfosToUpdate.name) videoInstance.set('name', videoInfosToUpdate.name) if (videoInfosToUpdate.name) videoInstance.set('name', videoInfosToUpdate.name)
if (videoInfosToUpdate.category) videoInstance.set('category', videoInfosToUpdate.category) if (videoInfosToUpdate.category) videoInstance.set('category', videoInfosToUpdate.category)
if (videoInfosToUpdate.licence) videoInstance.set('licence', videoInfosToUpdate.licence)
if (videoInfosToUpdate.description) videoInstance.set('description', videoInfosToUpdate.description) if (videoInfosToUpdate.description) videoInstance.set('description', videoInfosToUpdate.description)
videoInstance.save(options).asCallback(function (err) { videoInstance.save(options).asCallback(function (err) {

View file

@ -86,6 +86,7 @@ function isCommonVideoAttributesValid (video) {
return videosValidators.isVideoDateValid(video.createdAt) && return videosValidators.isVideoDateValid(video.createdAt) &&
videosValidators.isVideoDateValid(video.updatedAt) && videosValidators.isVideoDateValid(video.updatedAt) &&
videosValidators.isVideoCategoryValid(video.category) && videosValidators.isVideoCategoryValid(video.category) &&
videosValidators.isVideoLicenceValid(video.licence) &&
videosValidators.isVideoDescriptionValid(video.description) && videosValidators.isVideoDescriptionValid(video.description) &&
videosValidators.isVideoDurationValid(video.duration) && videosValidators.isVideoDurationValid(video.duration) &&
videosValidators.isVideoInfoHashValid(video.infoHash) && videosValidators.isVideoInfoHashValid(video.infoHash) &&

View file

@ -14,6 +14,7 @@ const videosValidators = {
isVideoAuthorValid, isVideoAuthorValid,
isVideoDateValid, isVideoDateValid,
isVideoCategoryValid, isVideoCategoryValid,
isVideoLicenceValid,
isVideoDescriptionValid, isVideoDescriptionValid,
isVideoDurationValid, isVideoDurationValid,
isVideoInfoHashValid, isVideoInfoHashValid,
@ -45,6 +46,10 @@ function isVideoCategoryValid (value) {
return constants.VIDEO_CATEGORIES[value] !== undefined return constants.VIDEO_CATEGORIES[value] !== undefined
} }
function isVideoLicenceValid (value) {
return constants.VIDEO_LICENCES[value] !== undefined
}
function isVideoDescriptionValid (value) { function isVideoDescriptionValid (value) {
return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION) return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
} }

View file

@ -5,7 +5,7 @@ const path = require('path')
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const LAST_MIGRATION_VERSION = 30 const LAST_MIGRATION_VERSION = 35
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -124,6 +124,17 @@ const VIDEO_CATEGORIES = {
18: 'Food' 18: 'Food'
} }
// See https://creativecommons.org/licenses/?lang=en
const VIDEO_LICENCES = {
1: 'Attribution',
2: 'Attribution - Share Alike',
3: 'Attribution - No Derivatives',
4: 'Attribution - Non Commercial',
5: 'Attribution - Non Commercial - Share Alike',
6: 'Attribution - Non Commercial - No Derivatives',
7: 'Public Domain Dedication'
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Score a pod has when we create it as a friend // Score a pod has when we create it as a friend
@ -280,6 +291,7 @@ module.exports = {
THUMBNAILS_SIZE, THUMBNAILS_SIZE,
USER_ROLES, USER_ROLES,
VIDEO_CATEGORIES, VIDEO_CATEGORIES,
VIDEO_LICENCES,
VIDEO_RATE_TYPES VIDEO_RATE_TYPES
} }

View file

@ -0,0 +1,34 @@
'use strict'
const waterfall = require('async/waterfall')
// utils = { transaction, queryInterface, sequelize, Sequelize }
exports.up = function (utils, finalCallback) {
const q = utils.queryInterface
const Sequelize = utils.Sequelize
const data = {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 0
}
waterfall([
function addLicenceColumn (callback) {
q.addColumn('Videos', 'licence', data, { transaction: utils.transaction }).asCallback(function (err) {
return callback(err)
})
},
function nullOnDefault (callback) {
data.defaultValue = null
q.changeColumn('Videos', 'licence', data, { transaction: utils.transaction }).asCallback(callback)
}
], finalCallback)
}
exports.down = function (options, callback) {
throw new Error('Not implemented.')
}

View file

@ -22,6 +22,7 @@ function videosAdd (req, res, next) {
req.checkBody('videofile', 'Should have a valid file').isVideoFile(req.files) req.checkBody('videofile', 'Should have a valid file').isVideoFile(req.files)
req.checkBody('name', 'Should have a valid name').isVideoNameValid() req.checkBody('name', 'Should have a valid name').isVideoNameValid()
req.checkBody('category', 'Should have a valid category').isVideoCategoryValid() req.checkBody('category', 'Should have a valid category').isVideoCategoryValid()
req.checkBody('licence', 'Should have a valid licence').isVideoLicenceValid()
req.checkBody('description', 'Should have a valid description').isVideoDescriptionValid() req.checkBody('description', 'Should have a valid description').isVideoDescriptionValid()
req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid() req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid()
@ -49,6 +50,7 @@ function videosUpdate (req, res, next) {
req.checkParams('id', 'Should have a valid id').notEmpty().isUUID(4) req.checkParams('id', 'Should have a valid id').notEmpty().isUUID(4)
req.checkBody('name', 'Should have a valid name').optional().isVideoNameValid() req.checkBody('name', 'Should have a valid name').optional().isVideoNameValid()
req.checkBody('category', 'Should have a valid category').optional().isVideoCategoryValid() req.checkBody('category', 'Should have a valid category').optional().isVideoCategoryValid()
req.checkBody('licence', 'Should have a valid licence').optional().isVideoLicenceValid()
req.checkBody('description', 'Should have a valid description').optional().isVideoDescriptionValid() req.checkBody('description', 'Should have a valid description').optional().isVideoDescriptionValid()
req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid() req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid()

View file

@ -61,6 +61,16 @@ module.exports = function (sequelize, DataTypes) {
} }
} }
}, },
licence: {
type: DataTypes.INTEGER,
allowNull: false,
validate: {
licenceValid: function (value) {
const res = customVideosValidators.isVideoLicenceValid(value)
if (res === false) throw new Error('Video licence is not valid.')
}
}
},
description: { description: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: false,
@ -374,11 +384,17 @@ function toFormatedJSON () {
let categoryLabel = constants.VIDEO_CATEGORIES[this.category] let categoryLabel = constants.VIDEO_CATEGORIES[this.category]
if (!categoryLabel) categoryLabel = 'Misc' if (!categoryLabel) categoryLabel = 'Misc'
// Maybe our pod is not up to date and there are new licences since our version
let licenceLabel = constants.VIDEO_LICENCES[this.licence]
if (!licenceLabel) licenceLabel = 'Unknown'
const json = { const json = {
id: this.id, id: this.id,
name: this.name, name: this.name,
category: this.category, category: this.category,
categoryLabel, categoryLabel,
licence: this.licence,
licenceLabel,
description: this.description, description: this.description,
podHost, podHost,
isLocal: this.isOwned(), isLocal: this.isOwned(),
@ -411,6 +427,7 @@ function toAddRemoteJSON (callback) {
const remoteVideo = { const remoteVideo = {
name: self.name, name: self.name,
category: self.category, category: self.category,
licence: self.licence,
description: self.description, description: self.description,
infoHash: self.infoHash, infoHash: self.infoHash,
remoteId: self.id, remoteId: self.id,
@ -434,6 +451,7 @@ function toUpdateRemoteJSON (callback) {
const json = { const json = {
name: this.name, name: this.name,
category: this.category, category: this.category,
licence: this.licence,
description: this.description, description: this.description,
infoHash: this.infoHash, infoHash: this.infoHash,
remoteId: this.id, remoteId: this.id,

View file

@ -113,6 +113,7 @@ describe('Test videos API validator', function () {
it('Should fail without name', function (done) { it('Should fail without name', function (done) {
const data = { const data = {
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -126,6 +127,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'My very very very very very very very very very very very very very very very very long name', name: 'My very very very very very very very very very very very very very very very very long name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -138,6 +140,7 @@ describe('Test videos API validator', function () {
it('Should fail without a category', function (done) { it('Should fail without a category', function (done) {
const data = { const data = {
name: 'my super name', name: 'my super name',
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -151,6 +154,34 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 125, category: 125,
licence: 1,
description: 'my super description',
tags: [ 'tag1', 'tag2' ]
}
const attach = {
'videofile': pathUtils.join(__dirname, '..', 'fixtures', 'video_short.webm')
}
requestsUtils.makePostUploadRequest(server.url, path, server.accessToken, data, attach, done)
})
it('Should fail without a licence', function (done) {
const data = {
name: 'my super name',
category: 5,
description: 'my super description',
tags: [ 'tag1', 'tag2' ]
}
const attach = {
'videofile': pathUtils.join(__dirname, '..', 'fixtures', 'video_short.webm')
}
requestsUtils.makePostUploadRequest(server.url, path, server.accessToken, data, attach, done)
})
it('Should fail with a bad licence', function (done) {
const data = {
name: 'my super name',
category: 5,
licence: 125,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -164,6 +195,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
const attach = { const attach = {
@ -176,6 +208,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description which is very very very very very very very very very very very very very very' + description: 'my super description which is very very very very very very very very very very very very very very' +
'very very very very very very very very very very very very very very very very very very very very very' + 'very very very very very very very very very very very very very very very very very very very very very' +
'very very very very very very very very very very very very very very very long', 'very very very very very very very very very very very very very very very long',
@ -191,6 +224,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ] tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ]
} }
@ -204,6 +238,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 't' ] tags: [ 'tag1', 't' ]
} }
@ -217,6 +252,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'mysupertagtoolong', 'tag1' ] tags: [ 'mysupertagtoolong', 'tag1' ]
} }
@ -230,6 +266,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -241,6 +278,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -254,6 +292,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -267,6 +306,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -304,6 +344,7 @@ describe('Test videos API validator', function () {
it('Should fail without a valid uuid', function (done) { it('Should fail without a valid uuid', function (done) {
const data = { const data = {
category: 5, category: 5,
licence: 2,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -313,6 +354,7 @@ describe('Test videos API validator', function () {
it('Should fail with an unknown id', function (done) { it('Should fail with an unknown id', function (done) {
const data = { const data = {
category: 5, category: 5,
licence: 2,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -323,6 +365,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'My very very very very very very very very very very very very very very very very long name', name: 'My very very very very very very very very very very very very very very very very long name',
category: 5, category: 5,
licence: 2,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -333,6 +376,18 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 128, category: 128,
licence: 2,
description: 'my super description',
tags: [ 'tag1', 'tag2' ]
}
requestsUtils.makePutBodyRequest(server.url, path + videoId, server.accessToken, data, done)
})
it('Should fail with a bad licence', function (done) {
const data = {
name: 'my super name',
category: 5,
licence: 128,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -343,6 +398,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2,
description: 'my super description which is very very very very very very very very very very very very very very' + description: 'my super description which is very very very very very very very very very very very very very very' +
'very very very very very very very very very very very very very very very very very very very very very' + 'very very very very very very very very very very very very very very very very very very very very very' +
'very very very very very very very very very very very very very very very long', 'very very very very very very very very very very very very very very very long',
@ -355,6 +411,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ] tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ]
} }
@ -365,6 +422,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 't' ] tags: [ 'tag1', 't' ]
} }
@ -375,6 +433,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2,
description: 'my super description', description: 'my super description',
tags: [ 'mysupertagtoolong', 'tag1' ] tags: [ 'mysupertagtoolong', 'tag1' ]
} }

View file

@ -82,6 +82,8 @@ describe('Test multiple pods', function () {
function (next) { function (next) {
const videoAttributes = { const videoAttributes = {
name: 'my super name for pod 1', name: 'my super name for pod 1',
category: 5,
licence: 4,
description: 'my super description for pod 1', description: 'my super description for pod 1',
tags: [ 'tag1p1', 'tag2p1' ], tags: [ 'tag1p1', 'tag2p1' ],
fixture: 'video_short1.webm' fixture: 'video_short1.webm'
@ -108,6 +110,8 @@ describe('Test multiple pods', function () {
expect(video.name).to.equal('my super name for pod 1') expect(video.name).to.equal('my super name for pod 1')
expect(video.category).to.equal(5) expect(video.category).to.equal(5)
expect(video.categoryLabel).to.equal('Sports') expect(video.categoryLabel).to.equal('Sports')
expect(video.licence).to.equal(4)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial')
expect(video.description).to.equal('my super description for pod 1') expect(video.description).to.equal('my super description for pod 1')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.magnetUri).to.exist expect(video.magnetUri).to.exist
@ -150,6 +154,7 @@ describe('Test multiple pods', function () {
const videoAttributes = { const videoAttributes = {
name: 'my super name for pod 2', name: 'my super name for pod 2',
category: 4, category: 4,
licence: 3,
description: 'my super description for pod 2', description: 'my super description for pod 2',
tags: [ 'tag1p2', 'tag2p2', 'tag3p2' ], tags: [ 'tag1p2', 'tag2p2', 'tag3p2' ],
fixture: 'video_short2.webm' fixture: 'video_short2.webm'
@ -176,6 +181,8 @@ describe('Test multiple pods', function () {
expect(video.name).to.equal('my super name for pod 2') expect(video.name).to.equal('my super name for pod 2')
expect(video.category).to.equal(4) expect(video.category).to.equal(4)
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(3)
expect(video.licenceLabel).to.equal('Attribution - No Derivatives')
expect(video.description).to.equal('my super description for pod 2') expect(video.description).to.equal('my super description for pod 2')
expect(video.podHost).to.equal('localhost:9002') expect(video.podHost).to.equal('localhost:9002')
expect(video.magnetUri).to.exist expect(video.magnetUri).to.exist
@ -218,6 +225,7 @@ describe('Test multiple pods', function () {
const videoAttributes = { const videoAttributes = {
name: 'my super name for pod 3', name: 'my super name for pod 3',
category: 6, category: 6,
licence: 5,
description: 'my super description for pod 3', description: 'my super description for pod 3',
tags: [ 'tag1p3' ], tags: [ 'tag1p3' ],
fixture: 'video_short3.webm' fixture: 'video_short3.webm'
@ -228,6 +236,7 @@ describe('Test multiple pods', function () {
const videoAttributes = { const videoAttributes = {
name: 'my super name for pod 3-2', name: 'my super name for pod 3-2',
category: 7, category: 7,
licence: 6,
description: 'my super description for pod 3-2', description: 'my super description for pod 3-2',
tags: [ 'tag2p3', 'tag3p3', 'tag4p3' ], tags: [ 'tag2p3', 'tag3p3', 'tag4p3' ],
fixture: 'video_short.webm' fixture: 'video_short.webm'
@ -264,6 +273,8 @@ describe('Test multiple pods', function () {
expect(video1.name).to.equal('my super name for pod 3') expect(video1.name).to.equal('my super name for pod 3')
expect(video1.category).to.equal(6) expect(video1.category).to.equal(6)
expect(video1.categoryLabel).to.equal('Travels') expect(video1.categoryLabel).to.equal('Travels')
expect(video1.licence).to.equal(5)
expect(video1.licenceLabel).to.equal('Attribution - Non Commercial - Share Alike')
expect(video1.description).to.equal('my super description for pod 3') expect(video1.description).to.equal('my super description for pod 3')
expect(video1.podHost).to.equal('localhost:9003') expect(video1.podHost).to.equal('localhost:9003')
expect(video1.magnetUri).to.exist expect(video1.magnetUri).to.exist
@ -276,6 +287,8 @@ describe('Test multiple pods', function () {
expect(video2.name).to.equal('my super name for pod 3-2') expect(video2.name).to.equal('my super name for pod 3-2')
expect(video2.category).to.equal(7) expect(video2.category).to.equal(7)
expect(video2.categoryLabel).to.equal('Gaming') expect(video2.categoryLabel).to.equal('Gaming')
expect(video2.licence).to.equal(6)
expect(video2.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video2.description).to.equal('my super description for pod 3-2') expect(video2.description).to.equal('my super description for pod 3-2')
expect(video2.podHost).to.equal('localhost:9003') expect(video2.podHost).to.equal('localhost:9003')
expect(video2.magnetUri).to.exist expect(video2.magnetUri).to.exist
@ -624,6 +637,7 @@ describe('Test multiple pods', function () {
const attributes = { const attributes = {
name: 'my super video updated', name: 'my super video updated',
category: 10, category: 10,
licence: 7,
description: 'my super description updated', description: 'my super description updated',
tags: [ 'tagup1', 'tagup2' ] tags: [ 'tagup1', 'tagup2' ]
} }
@ -652,6 +666,8 @@ describe('Test multiple pods', function () {
expect(!!videoUpdated).to.be.true expect(!!videoUpdated).to.be.true
expect(videoUpdated.category).to.equal(10) expect(videoUpdated.category).to.equal(10)
expect(videoUpdated.categoryLabel).to.equal('Entertainment') expect(videoUpdated.categoryLabel).to.equal('Entertainment')
expect(videoUpdated.licence).to.equal(7)
expect(videoUpdated.licenceLabel).to.equal('Public Domain Dedication')
expect(videoUpdated.description).to.equal('my super description updated') expect(videoUpdated.description).to.equal('my super description updated')
expect(videoUpdated.tags).to.deep.equal([ 'tagup1', 'tagup2' ]) expect(videoUpdated.tags).to.deep.equal([ 'tagup1', 'tagup2' ])
expect(miscsUtils.dateIsValid(videoUpdated.updatedAt, 20000)).to.be.true expect(miscsUtils.dateIsValid(videoUpdated.updatedAt, 20000)).to.be.true

View file

@ -57,6 +57,19 @@ describe('Test a single pod', function () {
}) })
}) })
it('Should list video licences', function (done) {
videosUtils.getVideoLicences(server.url, function (err, res) {
if (err) throw err
const licences = res.body
expect(Object.keys(licences)).to.have.length.above(5)
expect(licences[3]).to.equal('Attribution - No Derivatives')
done()
})
})
it('Should not have videos', function (done) { it('Should not have videos', function (done) {
videosUtils.getVideosList(server.url, function (err, res) { videosUtils.getVideosList(server.url, function (err, res) {
if (err) throw err if (err) throw err
@ -73,6 +86,7 @@ describe('Test a single pod', function () {
const videoAttributes = { const videoAttributes = {
name: 'my super name', name: 'my super name',
category: 2, category: 2,
licence: 6,
tags: [ 'tag1', 'tag2', 'tag3' ] tags: [ 'tag1', 'tag2', 'tag3' ]
} }
videosUtils.uploadVideo(server.url, server.accessToken, videoAttributes, done) videosUtils.uploadVideo(server.url, server.accessToken, videoAttributes, done)
@ -93,6 +107,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super name') expect(video.name).to.equal('my super name')
expect(video.category).to.equal(2) expect(video.category).to.equal(2)
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.description).to.equal('my super description') expect(video.description).to.equal('my super description')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.magnetUri).to.exist expect(video.magnetUri).to.exist
@ -130,6 +146,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super name') expect(video.name).to.equal('my super name')
expect(video.category).to.equal(2) expect(video.category).to.equal(2)
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.description).to.equal('my super description') expect(video.description).to.equal('my super description')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.magnetUri).to.exist expect(video.magnetUri).to.exist
@ -171,6 +189,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super name') expect(video.name).to.equal('my super name')
expect(video.category).to.equal(2) expect(video.category).to.equal(2)
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.description).to.equal('my super description') expect(video.description).to.equal('my super description')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
@ -228,6 +248,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super name') expect(video.name).to.equal('my super name')
expect(video.category).to.equal(2) expect(video.category).to.equal(2)
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.description).to.equal('my super description') expect(video.description).to.equal('my super description')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
@ -324,6 +346,7 @@ describe('Test a single pod', function () {
name: video + ' name', name: video + ' name',
description: video + ' description', description: video + ' description',
category: 2, category: 2,
licence: 1,
tags: [ 'tag1', 'tag2', 'tag3' ], tags: [ 'tag1', 'tag2', 'tag3' ],
fixture: video fixture: video
} }
@ -548,6 +571,7 @@ describe('Test a single pod', function () {
const attributes = { const attributes = {
name: 'my super video updated', name: 'my super video updated',
category: 4, category: 4,
licence: 2,
description: 'my super description updated', description: 'my super description updated',
tags: [ 'tagup1', 'tagup2' ] tags: [ 'tagup1', 'tagup2' ]
} }
@ -565,6 +589,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super video updated') expect(video.name).to.equal('my super video updated')
expect(video.category).to.equal(4) expect(video.category).to.equal(4)
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(2)
expect(video.licenceLabel).to.equal('Attribution - Share Alike')
expect(video.description).to.equal('my super description updated') expect(video.description).to.equal('my super description updated')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
@ -604,6 +630,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super video updated') expect(video.name).to.equal('my super video updated')
expect(video.category).to.equal(4) expect(video.category).to.equal(4)
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(2)
expect(video.licenceLabel).to.equal('Attribution - Share Alike')
expect(video.description).to.equal('my super description updated') expect(video.description).to.equal('my super description updated')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.author).to.equal('root') expect(video.author).to.equal('root')
@ -633,6 +661,8 @@ describe('Test a single pod', function () {
expect(video.name).to.equal('my super video updated') expect(video.name).to.equal('my super video updated')
expect(video.category).to.equal(4) expect(video.category).to.equal(4)
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(2)
expect(video.licenceLabel).to.equal('Attribution - Share Alike')
expect(video.description).to.equal('hello everybody') expect(video.description).to.equal('hello everybody')
expect(video.podHost).to.equal('localhost:9001') expect(video.podHost).to.equal('localhost:9001')
expect(video.author).to.equal('root') expect(video.author).to.equal('root')

View file

@ -205,6 +205,7 @@ function upload (servers, numServer, callback) {
const videoAttributes = { const videoAttributes = {
name: Date.now() + ' name', name: Date.now() + ' name',
category: 4, category: 4,
licence: 2,
description: Date.now() + ' description', description: Date.now() + ' description',
tags: [ Date.now().toString().substring(0, 5) + 't1', Date.now().toString().substring(0, 5) + 't2' ], tags: [ Date.now().toString().substring(0, 5) + 't1', Date.now().toString().substring(0, 5) + 't2' ],
fixture: 'video_short1.webm' fixture: 'video_short1.webm'

View file

@ -9,7 +9,8 @@ program
.option('-u, --url <url>', 'Server url') .option('-u, --url <url>', 'Server url')
.option('-a, --access-token <token>', 'Access token') .option('-a, --access-token <token>', 'Access token')
.option('-n, --name <name>', 'Video name') .option('-n, --name <name>', 'Video name')
.option('-d, --category <category number>', 'Category number') .option('-c, --category <category number>', 'Category number')
.option('-l, --licence <licence number>', 'Licence number')
.option('-d, --description <description>', 'Video description') .option('-d, --description <description>', 'Video description')
.option('-t, --tags <tags>', 'Video tags', list) .option('-t, --tags <tags>', 'Video tags', list)
.option('-f, --file <file>', 'Video absolute file path') .option('-f, --file <file>', 'Video absolute file path')
@ -20,6 +21,7 @@ if (
!program.accessToken || !program.accessToken ||
!program.name || !program.name ||
!program.category || !program.category ||
!program.licence ||
!program.description || !program.description ||
!program.tags || !program.tags ||
!Array.isArray(program.tags) || !Array.isArray(program.tags) ||
@ -37,6 +39,7 @@ fs.access(program.file, fs.F_OK, function (err) {
program.accessToken, program.accessToken,
program.name, program.name,
program.category, program.category,
program.licence,
program.description, program.description,
program.tags, program.tags,
program.file program.file
@ -49,12 +52,13 @@ function list (val) {
return val.split(',') return val.split(',')
} }
function upload (url, accessToken, name, category, description, tags, fixture) { function upload (url, accessToken, name, category, licence, description, tags, fixture) {
console.log('Uploading %s video...', program.name) console.log('Uploading %s video...', program.name)
const videoAttributes = { const videoAttributes = {
name, name,
category, category,
licence,
description, description,
tags, tags,
fixture fixture

View file

@ -6,6 +6,7 @@ const request = require('supertest')
const videosUtils = { const videosUtils = {
getVideoCategories, getVideoCategories,
getVideoLicences,
getAllVideosListBy, getAllVideosListBy,
getVideo, getVideo,
getVideosList, getVideosList,
@ -34,6 +35,17 @@ function getVideoCategories (url, end) {
.end(end) .end(end)
} }
function getVideoLicences (url, end) {
const path = '/api/v1/videos/licences'
request(url)
.get(path)
.set('Accept', 'application/json')
.expect(200)
.expect('Content-Type', /json/)
.end(end)
}
function getAllVideosListBy (url, end) { function getAllVideosListBy (url, end) {
const path = '/api/v1/videos' const path = '/api/v1/videos'
@ -205,6 +217,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end)
let attributes = { let attributes = {
name: 'my super video', name: 'my super video',
category: 5, category: 5,
licence: 4,
description: 'my super description', description: 'my super description',
tags: [ 'tag' ], tags: [ 'tag' ],
fixture: 'video_short.webm' fixture: 'video_short.webm'
@ -217,6 +230,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end)
.set('Authorization', 'Bearer ' + accessToken) .set('Authorization', 'Bearer ' + accessToken)
.field('name', attributes.name) .field('name', attributes.name)
.field('category', attributes.category) .field('category', attributes.category)
.field('licence', attributes.licence)
.field('description', attributes.description) .field('description', attributes.description)
for (let i = 0; i < attributes.tags.length; i++) { for (let i = 0; i < attributes.tags.length; i++) {
@ -250,6 +264,7 @@ function updateVideo (url, accessToken, id, attributes, specialStatus, end) {
if (attributes.name) req.field('name', attributes.name) if (attributes.name) req.field('name', attributes.name)
if (attributes.category) req.field('category', attributes.category) if (attributes.category) req.field('category', attributes.category)
if (attributes.licence) req.field('licence', attributes.licence)
if (attributes.description) req.field('description', attributes.description) if (attributes.description) req.field('description', attributes.description)
if (attributes.tags) { if (attributes.tags) {