Server: add video language attribute

This commit is contained in:
Chocobozzz 2017-04-07 12:13:37 +02:00
parent 023553a2bd
commit 3092476e64
14 changed files with 197 additions and 3 deletions

View File

@ -296,6 +296,7 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
infoHash: videoToCreateData.infoHash, infoHash: videoToCreateData.infoHash,
category: videoToCreateData.category, category: videoToCreateData.category,
licence: videoToCreateData.licence, licence: videoToCreateData.licence,
language: videoToCreateData.language,
nsfw: videoToCreateData.nsfw, nsfw: videoToCreateData.nsfw,
description: videoToCreateData.description, description: videoToCreateData.description,
authorId: author.id, authorId: author.id,
@ -395,6 +396,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('licence', videoAttributesToUpdate.licence)
videoInstance.set('language', videoAttributesToUpdate.language)
videoInstance.set('nsfw', videoAttributesToUpdate.nsfw) videoInstance.set('nsfw', videoAttributesToUpdate.nsfw)
videoInstance.set('description', videoAttributesToUpdate.description) videoInstance.set('description', videoAttributesToUpdate.description)
videoInstance.set('infoHash', videoAttributesToUpdate.infoHash) videoInstance.set('infoHash', videoAttributesToUpdate.infoHash)

View File

@ -47,6 +47,7 @@ const reqFiles = multer({ storage: storage }).fields([{ name: 'videofile', maxCo
router.get('/categories', listVideoCategories) router.get('/categories', listVideoCategories)
router.get('/licences', listVideoLicences) router.get('/licences', listVideoLicences)
router.get('/languages', listVideoLanguages)
router.get('/abuse', router.get('/abuse',
oAuth.authenticate, oAuth.authenticate,
@ -121,6 +122,10 @@ function listVideoLicences (req, res, next) {
res.json(constants.VIDEO_LICENCES) res.json(constants.VIDEO_LICENCES)
} }
function listVideoLanguages (req, res, next) {
res.json(constants.VIDEO_LANGUAGES)
}
function rateVideoRetryWrapper (req, res, next) { function rateVideoRetryWrapper (req, res, next) {
const options = { const options = {
arguments: [ req, res ], arguments: [ req, res ],
@ -313,6 +318,7 @@ function addVideo (req, res, videoFile, finalCallback) {
extname: path.extname(videoFile.filename), extname: path.extname(videoFile.filename),
category: videoInfos.category, category: videoInfos.category,
licence: videoInfos.licence, licence: videoInfos.licence,
language: videoInfos.language,
nsfw: videoInfos.nsfw, nsfw: videoInfos.nsfw,
description: videoInfos.description, description: videoInfos.description,
duration: videoFile.duration, duration: videoFile.duration,
@ -429,6 +435,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.licence) videoInstance.set('licence', videoInfosToUpdate.licence)
if (videoInfosToUpdate.language) videoInstance.set('language', videoInfosToUpdate.language)
if (videoInfosToUpdate.nsfw) videoInstance.set('nsfw', videoInfosToUpdate.nsfw) if (videoInfosToUpdate.nsfw) videoInstance.set('nsfw', videoInfosToUpdate.nsfw)
if (videoInfosToUpdate.description) videoInstance.set('description', videoInfosToUpdate.description) if (videoInfosToUpdate.description) videoInstance.set('description', videoInfosToUpdate.description)

View File

@ -87,6 +87,7 @@ function isCommonVideoAttributesValid (video) {
videosValidators.isVideoDateValid(video.updatedAt) && videosValidators.isVideoDateValid(video.updatedAt) &&
videosValidators.isVideoCategoryValid(video.category) && videosValidators.isVideoCategoryValid(video.category) &&
videosValidators.isVideoLicenceValid(video.licence) && videosValidators.isVideoLicenceValid(video.licence) &&
videosValidators.isVideoLanguageValid(video.language) &&
videosValidators.isVideoNSFWValid(video.nsfw) && videosValidators.isVideoNSFWValid(video.nsfw) &&
videosValidators.isVideoDescriptionValid(video.description) && videosValidators.isVideoDescriptionValid(video.description) &&
videosValidators.isVideoDurationValid(video.duration) && videosValidators.isVideoDurationValid(video.duration) &&

View File

@ -15,6 +15,7 @@ const videosValidators = {
isVideoDateValid, isVideoDateValid,
isVideoCategoryValid, isVideoCategoryValid,
isVideoLicenceValid, isVideoLicenceValid,
isVideoLanguageValid,
isVideoNSFWValid, isVideoNSFWValid,
isVideoDescriptionValid, isVideoDescriptionValid,
isVideoDurationValid, isVideoDurationValid,
@ -51,6 +52,10 @@ function isVideoLicenceValid (value) {
return constants.VIDEO_LICENCES[value] !== undefined return constants.VIDEO_LICENCES[value] !== undefined
} }
function isVideoLanguageValid (value) {
return constants.VIDEO_LANGUAGES[value] !== undefined
}
function isVideoNSFWValid (value) { function isVideoNSFWValid (value) {
return validator.isBoolean(value) return validator.isBoolean(value)
} }

View File

@ -5,7 +5,7 @@ const path = require('path')
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const LAST_MIGRATION_VERSION = 45 const LAST_MIGRATION_VERSION = 50
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -135,6 +135,24 @@ const VIDEO_LICENCES = {
7: 'Public Domain Dedication' 7: 'Public Domain Dedication'
} }
// See https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers#Nationalencyklopedin
const VIDEO_LANGUAGES = {
1: 'English',
2: 'Spanish',
3: 'Mandarin',
4: 'Hindi',
5: 'Arabic',
6: 'Portuguese',
7: 'Bengali',
8: 'Russian',
9: 'Japanese',
10: 'Punjabi',
11: 'German',
12: 'Korean',
13: 'French',
14: 'Italien'
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Score a pod has when we create it as a friend // Score a pod has when we create it as a friend
@ -291,6 +309,7 @@ module.exports = {
THUMBNAILS_SIZE, THUMBNAILS_SIZE,
USER_ROLES, USER_ROLES,
VIDEO_CATEGORIES, VIDEO_CATEGORIES,
VIDEO_LANGUAGES,
VIDEO_LICENCES, VIDEO_LICENCES,
VIDEO_RATE_TYPES VIDEO_RATE_TYPES
} }

View File

@ -0,0 +1,19 @@
'use strict'
// utils = { transaction, queryInterface, sequelize, Sequelize }
exports.up = function (utils, finalCallback) {
const q = utils.queryInterface
const Sequelize = utils.Sequelize
const data = {
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: null
}
q.addColumn('Videos', 'language', data, { transaction: utils.transaction }).asCallback(finalCallback)
}
exports.down = function (options, callback) {
throw new Error('Not implemented.')
}

View File

@ -23,6 +23,7 @@ function videosAdd (req, res, next) {
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('licence', 'Should have a valid licence').isVideoLicenceValid()
req.checkBody('language', 'Should have a valid language').optional().isVideoLanguageValid()
req.checkBody('nsfw', 'Should have a valid NSFW attribute').isVideoNSFWValid() req.checkBody('nsfw', 'Should have a valid NSFW attribute').isVideoNSFWValid()
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()
@ -52,6 +53,7 @@ function videosUpdate (req, res, next) {
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('licence', 'Should have a valid licence').optional().isVideoLicenceValid()
req.checkBody('language', 'Should have a valid language').optional().isVideoLanguageValid()
req.checkBody('nsfw', 'Should have a valid NSFW attribute').optional().isVideoNSFWValid() req.checkBody('nsfw', 'Should have a valid NSFW attribute').optional().isVideoNSFWValid()
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

@ -64,6 +64,7 @@ module.exports = function (sequelize, DataTypes) {
licence: { licence: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
defaultValue: null,
validate: { validate: {
licenceValid: function (value) { licenceValid: function (value) {
const res = customVideosValidators.isVideoLicenceValid(value) const res = customVideosValidators.isVideoLicenceValid(value)
@ -71,6 +72,16 @@ module.exports = function (sequelize, DataTypes) {
} }
} }
}, },
language: {
type: DataTypes.INTEGER,
allowNull: true,
validate: {
languageValid: function (value) {
const res = customVideosValidators.isVideoLanguageValid(value)
if (res === false) throw new Error('Video language is not valid.')
}
}
},
nsfw: { nsfw: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
allowNull: false, allowNull: false,
@ -398,6 +409,10 @@ function toFormatedJSON () {
let licenceLabel = constants.VIDEO_LICENCES[this.licence] let licenceLabel = constants.VIDEO_LICENCES[this.licence]
if (!licenceLabel) licenceLabel = 'Unknown' if (!licenceLabel) licenceLabel = 'Unknown'
// Language is an optional attribute
let languageLabel = constants.VIDEO_LANGUAGES[this.language]
if (!languageLabel) languageLabel = 'Unknown'
const json = { const json = {
id: this.id, id: this.id,
name: this.name, name: this.name,
@ -405,6 +420,8 @@ function toFormatedJSON () {
categoryLabel, categoryLabel,
licence: this.licence, licence: this.licence,
licenceLabel, licenceLabel,
language: this.language,
languageLabel,
nsfw: this.nsfw, nsfw: this.nsfw,
description: this.description, description: this.description,
podHost, podHost,
@ -439,6 +456,7 @@ function toAddRemoteJSON (callback) {
name: self.name, name: self.name,
category: self.category, category: self.category,
licence: self.licence, licence: self.licence,
language: self.language,
nsfw: self.nsfw, nsfw: self.nsfw,
description: self.description, description: self.description,
infoHash: self.infoHash, infoHash: self.infoHash,
@ -464,6 +482,7 @@ function toUpdateRemoteJSON (callback) {
name: this.name, name: this.name,
category: this.category, category: this.category,
licence: this.licence, licence: this.licence,
language: this.language,
nsfw: this.nsfw, nsfw: this.nsfw,
description: this.description, description: this.description,
infoHash: this.infoHash, infoHash: this.infoHash,

View File

@ -114,6 +114,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -129,6 +130,7 @@ describe('Test videos API validator', function () {
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, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -143,6 +145,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -158,6 +161,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 125, category: 125,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -172,6 +176,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -187,6 +192,23 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 125, licence: 125,
language: 6,
nsfw: false,
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 language', function (done) {
const data = {
name: 'my super name',
category: 5,
licence: 4,
language: 563,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -202,6 +224,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 4, licence: 4,
language: 6,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -216,6 +239,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 4, licence: 4,
language: 6,
nsfw: 2, nsfw: 2,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -231,6 +255,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
} }
@ -245,6 +270,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
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' +
@ -262,6 +288,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ] tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ]
@ -277,6 +304,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 't' ] tags: [ 'tag1', 't' ]
@ -292,6 +320,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'mysupertagtoolong', 'tag1' ] tags: [ 'mysupertagtoolong', 'tag1' ]
@ -307,6 +336,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -320,6 +350,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -335,6 +366,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -350,6 +382,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 1, licence: 1,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -389,6 +422,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
category: 5, category: 5,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -400,6 +434,7 @@ describe('Test videos API validator', function () {
const data = { const data = {
category: 5, category: 5,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -412,6 +447,7 @@ describe('Test videos API validator', function () {
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, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -424,6 +460,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 128, category: 128,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -436,6 +473,20 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 128, licence: 128,
language: 6,
nsfw: false,
description: 'my super description',
tags: [ 'tag1', 'tag2' ]
}
requestsUtils.makePutBodyRequest(server.url, path + videoId, server.accessToken, data, done)
})
it('Should fail with a bad language', function (done) {
const data = {
name: 'my super name',
category: 5,
licence: 3,
language: 896,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -448,6 +499,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 5, licence: 5,
language: 6,
nsfw: -4, nsfw: -4,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2' ] tags: [ 'tag1', 'tag2' ]
@ -460,6 +512,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
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' +
@ -474,6 +527,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ] tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ]
@ -486,6 +540,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'tag1', 't' ] tags: [ 'tag1', 't' ]
@ -498,6 +553,7 @@ describe('Test videos API validator', function () {
name: 'my super name', name: 'my super name',
category: 5, category: 5,
licence: 2, licence: 2,
language: 6,
nsfw: false, nsfw: false,
description: 'my super description', description: 'my super description',
tags: [ 'mysupertagtoolong', 'tag1' ] tags: [ 'mysupertagtoolong', 'tag1' ]

View File

@ -84,6 +84,7 @@ describe('Test multiple pods', function () {
name: 'my super name for pod 1', name: 'my super name for pod 1',
category: 5, category: 5,
licence: 4, licence: 4,
language: 9,
nsfw: true, nsfw: true,
description: 'my super description for pod 1', description: 'my super description for pod 1',
tags: [ 'tag1p1', 'tag2p1' ], tags: [ 'tag1p1', 'tag2p1' ],
@ -113,6 +114,8 @@ describe('Test multiple pods', function () {
expect(video.categoryLabel).to.equal('Sports') expect(video.categoryLabel).to.equal('Sports')
expect(video.licence).to.equal(4) expect(video.licence).to.equal(4)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial') expect(video.licenceLabel).to.equal('Attribution - Non Commercial')
expect(video.language).to.equal(9)
expect(video.languageLabel).to.equal('Japanese')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -157,6 +160,7 @@ describe('Test multiple pods', function () {
name: 'my super name for pod 2', name: 'my super name for pod 2',
category: 4, category: 4,
licence: 3, licence: 3,
language: 11,
nsfw: true, nsfw: true,
description: 'my super description for pod 2', description: 'my super description for pod 2',
tags: [ 'tag1p2', 'tag2p2', 'tag3p2' ], tags: [ 'tag1p2', 'tag2p2', 'tag3p2' ],
@ -186,6 +190,8 @@ describe('Test multiple pods', function () {
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(3) expect(video.licence).to.equal(3)
expect(video.licenceLabel).to.equal('Attribution - No Derivatives') expect(video.licenceLabel).to.equal('Attribution - No Derivatives')
expect(video.language).to.equal(11)
expect(video.languageLabel).to.equal('German')
expect(video.nsfw).to.be.falsy expect(video.nsfw).to.be.falsy
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')
@ -230,6 +236,7 @@ describe('Test multiple pods', function () {
name: 'my super name for pod 3', name: 'my super name for pod 3',
category: 6, category: 6,
licence: 5, licence: 5,
language: 11,
nsfw: true, nsfw: true,
description: 'my super description for pod 3', description: 'my super description for pod 3',
tags: [ 'tag1p3' ], tags: [ 'tag1p3' ],
@ -242,6 +249,7 @@ describe('Test multiple pods', function () {
name: 'my super name for pod 3-2', name: 'my super name for pod 3-2',
category: 7, category: 7,
licence: 6, licence: 6,
language: 12,
nsfw: false, nsfw: false,
description: 'my super description for pod 3-2', description: 'my super description for pod 3-2',
tags: [ 'tag2p3', 'tag3p3', 'tag4p3' ], tags: [ 'tag2p3', 'tag3p3', 'tag4p3' ],
@ -281,6 +289,8 @@ describe('Test multiple pods', function () {
expect(video1.categoryLabel).to.equal('Travels') expect(video1.categoryLabel).to.equal('Travels')
expect(video1.licence).to.equal(5) expect(video1.licence).to.equal(5)
expect(video1.licenceLabel).to.equal('Attribution - Non Commercial - Share Alike') expect(video1.licenceLabel).to.equal('Attribution - Non Commercial - Share Alike')
expect(video1.language).to.equal(11)
expect(video1.languageLabel).to.equal('German')
expect(video1.nsfw).to.be.truthy expect(video1.nsfw).to.be.truthy
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')
@ -296,6 +306,8 @@ describe('Test multiple pods', function () {
expect(video2.categoryLabel).to.equal('Gaming') expect(video2.categoryLabel).to.equal('Gaming')
expect(video2.licence).to.equal(6) expect(video2.licence).to.equal(6)
expect(video2.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives') expect(video2.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video2.language).to.equal(12)
expect(video2.languageLabel).to.equal('Korean')
expect(video2.nsfw).to.be.falsy expect(video2.nsfw).to.be.falsy
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')
@ -646,6 +658,7 @@ describe('Test multiple pods', function () {
name: 'my super video updated', name: 'my super video updated',
category: 10, category: 10,
licence: 7, licence: 7,
language: 13,
nsfw: true, nsfw: true,
description: 'my super description updated', description: 'my super description updated',
tags: [ 'tagup1', 'tagup2' ] tags: [ 'tagup1', 'tagup2' ]
@ -677,6 +690,8 @@ describe('Test multiple pods', function () {
expect(videoUpdated.categoryLabel).to.equal('Entertainment') expect(videoUpdated.categoryLabel).to.equal('Entertainment')
expect(videoUpdated.licence).to.equal(7) expect(videoUpdated.licence).to.equal(7)
expect(videoUpdated.licenceLabel).to.equal('Public Domain Dedication') expect(videoUpdated.licenceLabel).to.equal('Public Domain Dedication')
expect(videoUpdated.language).to.equal(13)
expect(videoUpdated.languageLabel).to.equal('French')
expect(videoUpdated.nsfw).to.be.truthy expect(videoUpdated.nsfw).to.be.truthy
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' ])

View File

@ -70,6 +70,19 @@ describe('Test a single pod', function () {
}) })
}) })
it('Should list video languages', function (done) {
videosUtils.getVideoLanguages(server.url, function (err, res) {
if (err) throw err
const languages = res.body
expect(Object.keys(languages)).to.have.length.above(5)
expect(languages[3]).to.equal('Mandarin')
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
@ -110,6 +123,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6) expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives') expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.language).to.equal(3)
expect(video.languageLabel).to.equal('Mandarin')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -150,6 +165,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6) expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives') expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.language).to.equal(3)
expect(video.languageLabel).to.equal('Mandarin')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -194,6 +211,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6) expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives') expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.language).to.equal(3)
expect(video.languageLabel).to.equal('Mandarin')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -254,6 +273,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Films') expect(video.categoryLabel).to.equal('Films')
expect(video.licence).to.equal(6) expect(video.licence).to.equal(6)
expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives') expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
expect(video.language).to.equal(3)
expect(video.languageLabel).to.equal('Mandarin')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -352,6 +373,7 @@ describe('Test a single pod', function () {
description: video + ' description', description: video + ' description',
category: 2, category: 2,
licence: 1, licence: 1,
language: 1,
nsfw: true, nsfw: true,
tags: [ 'tag1', 'tag2', 'tag3' ], tags: [ 'tag1', 'tag2', 'tag3' ],
fixture: video fixture: video
@ -578,6 +600,7 @@ describe('Test a single pod', function () {
name: 'my super video updated', name: 'my super video updated',
category: 4, category: 4,
licence: 2, licence: 2,
language: 5,
nsfw: false, nsfw: false,
description: 'my super description updated', description: 'my super description updated',
tags: [ 'tagup1', 'tagup2' ] tags: [ 'tagup1', 'tagup2' ]
@ -598,6 +621,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(2) expect(video.licence).to.equal(2)
expect(video.licenceLabel).to.equal('Attribution - Share Alike') expect(video.licenceLabel).to.equal('Attribution - Share Alike')
expect(video.language).to.equal(5)
expect(video.languageLabel).to.equal('Arabic')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -640,6 +665,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(2) expect(video.licence).to.equal(2)
expect(video.licenceLabel).to.equal('Attribution - Share Alike') expect(video.licenceLabel).to.equal('Attribution - Share Alike')
expect(video.language).to.equal(5)
expect(video.languageLabel).to.equal('Arabic')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')
@ -672,6 +699,8 @@ describe('Test a single pod', function () {
expect(video.categoryLabel).to.equal('Art') expect(video.categoryLabel).to.equal('Art')
expect(video.licence).to.equal(2) expect(video.licence).to.equal(2)
expect(video.licenceLabel).to.equal('Attribution - Share Alike') expect(video.licenceLabel).to.equal('Attribution - Share Alike')
expect(video.language).to.equal(5)
expect(video.languageLabel).to.equal('Arabic')
expect(video.nsfw).to.be.truthy expect(video.nsfw).to.be.truthy
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')

View File

@ -21,7 +21,7 @@ program
.option('-u, --update [weight]', 'Weight for updating videos') .option('-u, --update [weight]', 'Weight for updating videos')
.option('-v, --view [weight]', 'Weight for viewing videos') .option('-v, --view [weight]', 'Weight for viewing videos')
.option('-l, --like [weight]', 'Weight for liking videos') .option('-l, --like [weight]', 'Weight for liking videos')
.option('-s --dislike [weight]', 'Weight for disliking videos') .option('-s, --dislike [weight]', 'Weight for disliking videos')
.option('-p, --pods [n]', 'Number of pods to run (3 or 6)', /^3|6$/, 3) .option('-p, --pods [n]', 'Number of pods to run (3 or 6)', /^3|6$/, 3)
.option('-a, --action [interval]', 'Interval in ms for an action') .option('-a, --action [interval]', 'Interval in ms for an action')
.option('-i, --integrity [interval]', 'Interval in ms for an integrity check') .option('-i, --integrity [interval]', 'Interval in ms for an integrity check')
@ -207,6 +207,7 @@ function upload (servers, numServer, callback) {
category: 4, category: 4,
nsfw: false, nsfw: false,
licence: 2, licence: 2,
language: 1,
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

@ -12,6 +12,7 @@ program
.option('-x, --nsfw', 'Video is Not Safe For Work') .option('-x, --nsfw', 'Video is Not Safe For Work')
.option('-c, --category <category number>', 'Category number') .option('-c, --category <category number>', 'Category number')
.option('-l, --licence <licence number>', 'Licence number') .option('-l, --licence <licence number>', 'Licence number')
.option('-g, --language <language number>', 'Language 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')
@ -23,6 +24,7 @@ if (
!program.name || !program.name ||
!program.category || !program.category ||
!program.licence || !program.licence ||
!program.language ||
!program.nsfw || !program.nsfw ||
!program.description || !program.description ||
!program.tags || !program.tags ||
@ -42,6 +44,7 @@ fs.access(program.file, fs.F_OK, function (err) {
program.name, program.name,
program.category, program.category,
program.licence, program.licence,
program.language,
program.nsfw, program.nsfw,
program.description, program.description,
program.tags, program.tags,
@ -55,13 +58,14 @@ function list (val) {
return val.split(',') return val.split(',')
} }
function upload (url, accessToken, name, category, licence, nsfw, description, tags, fixture) { function upload (url, accessToken, name, category, licence, language, nsfw, 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, licence,
language,
nsfw, nsfw,
description, description,
tags, tags,

View File

@ -7,6 +7,7 @@ const request = require('supertest')
const videosUtils = { const videosUtils = {
getVideoCategories, getVideoCategories,
getVideoLicences, getVideoLicences,
getVideoLanguages,
getAllVideosListBy, getAllVideosListBy,
getVideo, getVideo,
getVideosList, getVideosList,
@ -46,6 +47,17 @@ function getVideoLicences (url, end) {
.end(end) .end(end)
} }
function getVideoLanguages (url, end) {
const path = '/api/v1/videos/languages'
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'
@ -218,6 +230,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end)
name: 'my super video', name: 'my super video',
category: 5, category: 5,
licence: 4, licence: 4,
language: 3,
nsfw: true, nsfw: true,
description: 'my super description', description: 'my super description',
tags: [ 'tag' ], tags: [ 'tag' ],
@ -232,6 +245,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end)
.field('name', attributes.name) .field('name', attributes.name)
.field('category', attributes.category) .field('category', attributes.category)
.field('licence', attributes.licence) .field('licence', attributes.licence)
.field('language', attributes.language)
.field('nsfw', attributes.nsfw) .field('nsfw', attributes.nsfw)
.field('description', attributes.description) .field('description', attributes.description)
@ -267,6 +281,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.licence) req.field('licence', attributes.licence)
if (attributes.language) req.field('language', attributes.language)
if (attributes.nsfw) req.field('nsfw', attributes.nsfw) if (attributes.nsfw) req.field('nsfw', attributes.nsfw)
if (attributes.description) req.field('description', attributes.description) if (attributes.description) req.field('description', attributes.description)