From 3092476e64d09b449b4ad4f5198024afec1b22ca Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 7 Apr 2017 12:13:37 +0200 Subject: [PATCH] Server: add video language attribute --- server/controllers/api/remote/videos.js | 2 + server/controllers/api/videos.js | 7 +++ .../custom-validators/remote/videos.js | 1 + server/helpers/custom-validators/videos.js | 5 ++ server/initializers/constants.js | 21 ++++++- .../migrations/0050-video-language.js | 19 +++++++ server/middlewares/validators/videos.js | 2 + server/models/video.js | 19 +++++++ server/tests/api/check-params/videos.js | 56 +++++++++++++++++++ server/tests/api/multiple-pods.js | 15 +++++ server/tests/api/single-pod.js | 29 ++++++++++ server/tests/real-world/real-world.js | 3 +- server/tests/real-world/tools/upload.js | 6 +- server/tests/utils/videos.js | 15 +++++ 14 files changed, 197 insertions(+), 3 deletions(-) create mode 100644 server/initializers/migrations/0050-video-language.js diff --git a/server/controllers/api/remote/videos.js b/server/controllers/api/remote/videos.js index ea1eeb146..e54793628 100644 --- a/server/controllers/api/remote/videos.js +++ b/server/controllers/api/remote/videos.js @@ -296,6 +296,7 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) { infoHash: videoToCreateData.infoHash, category: videoToCreateData.category, licence: videoToCreateData.licence, + language: videoToCreateData.language, nsfw: videoToCreateData.nsfw, description: videoToCreateData.description, authorId: author.id, @@ -395,6 +396,7 @@ function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) { videoInstance.set('name', videoAttributesToUpdate.name) videoInstance.set('category', videoAttributesToUpdate.category) videoInstance.set('licence', videoAttributesToUpdate.licence) + videoInstance.set('language', videoAttributesToUpdate.language) videoInstance.set('nsfw', videoAttributesToUpdate.nsfw) videoInstance.set('description', videoAttributesToUpdate.description) videoInstance.set('infoHash', videoAttributesToUpdate.infoHash) diff --git a/server/controllers/api/videos.js b/server/controllers/api/videos.js index 3d616e33d..5e9ff482f 100644 --- a/server/controllers/api/videos.js +++ b/server/controllers/api/videos.js @@ -47,6 +47,7 @@ const reqFiles = multer({ storage: storage }).fields([{ name: 'videofile', maxCo router.get('/categories', listVideoCategories) router.get('/licences', listVideoLicences) +router.get('/languages', listVideoLanguages) router.get('/abuse', oAuth.authenticate, @@ -121,6 +122,10 @@ function listVideoLicences (req, res, next) { res.json(constants.VIDEO_LICENCES) } +function listVideoLanguages (req, res, next) { + res.json(constants.VIDEO_LANGUAGES) +} + function rateVideoRetryWrapper (req, res, next) { const options = { arguments: [ req, res ], @@ -313,6 +318,7 @@ function addVideo (req, res, videoFile, finalCallback) { extname: path.extname(videoFile.filename), category: videoInfos.category, licence: videoInfos.licence, + language: videoInfos.language, nsfw: videoInfos.nsfw, description: videoInfos.description, duration: videoFile.duration, @@ -429,6 +435,7 @@ function updateVideo (req, res, finalCallback) { if (videoInfosToUpdate.name) videoInstance.set('name', videoInfosToUpdate.name) if (videoInfosToUpdate.category) videoInstance.set('category', videoInfosToUpdate.category) 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.description) videoInstance.set('description', videoInfosToUpdate.description) diff --git a/server/helpers/custom-validators/remote/videos.js b/server/helpers/custom-validators/remote/videos.js index df8f8a22e..24715b4b3 100644 --- a/server/helpers/custom-validators/remote/videos.js +++ b/server/helpers/custom-validators/remote/videos.js @@ -87,6 +87,7 @@ function isCommonVideoAttributesValid (video) { videosValidators.isVideoDateValid(video.updatedAt) && videosValidators.isVideoCategoryValid(video.category) && videosValidators.isVideoLicenceValid(video.licence) && + videosValidators.isVideoLanguageValid(video.language) && videosValidators.isVideoNSFWValid(video.nsfw) && videosValidators.isVideoDescriptionValid(video.description) && videosValidators.isVideoDurationValid(video.duration) && diff --git a/server/helpers/custom-validators/videos.js b/server/helpers/custom-validators/videos.js index d0b08e7ac..8dabb828d 100644 --- a/server/helpers/custom-validators/videos.js +++ b/server/helpers/custom-validators/videos.js @@ -15,6 +15,7 @@ const videosValidators = { isVideoDateValid, isVideoCategoryValid, isVideoLicenceValid, + isVideoLanguageValid, isVideoNSFWValid, isVideoDescriptionValid, isVideoDurationValid, @@ -51,6 +52,10 @@ function isVideoLicenceValid (value) { return constants.VIDEO_LICENCES[value] !== undefined } +function isVideoLanguageValid (value) { + return constants.VIDEO_LANGUAGES[value] !== undefined +} + function isVideoNSFWValid (value) { return validator.isBoolean(value) } diff --git a/server/initializers/constants.js b/server/initializers/constants.js index 6352d7c46..d6da20982 100644 --- a/server/initializers/constants.js +++ b/server/initializers/constants.js @@ -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' } +// 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 @@ -291,6 +309,7 @@ module.exports = { THUMBNAILS_SIZE, USER_ROLES, VIDEO_CATEGORIES, + VIDEO_LANGUAGES, VIDEO_LICENCES, VIDEO_RATE_TYPES } diff --git a/server/initializers/migrations/0050-video-language.js b/server/initializers/migrations/0050-video-language.js new file mode 100644 index 000000000..1c978758d --- /dev/null +++ b/server/initializers/migrations/0050-video-language.js @@ -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.') +} diff --git a/server/middlewares/validators/videos.js b/server/middlewares/validators/videos.js index 095fc382b..c07825e50 100644 --- a/server/middlewares/validators/videos.js +++ b/server/middlewares/validators/videos.js @@ -23,6 +23,7 @@ function videosAdd (req, res, next) { req.checkBody('name', 'Should have a valid name').isVideoNameValid() req.checkBody('category', 'Should have a valid category').isVideoCategoryValid() 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('description', 'Should have a valid description').isVideoDescriptionValid() 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('category', 'Should have a valid category').optional().isVideoCategoryValid() 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('description', 'Should have a valid description').optional().isVideoDescriptionValid() req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid() diff --git a/server/models/video.js b/server/models/video.js index 86d6438c8..39eb28ed9 100644 --- a/server/models/video.js +++ b/server/models/video.js @@ -64,6 +64,7 @@ module.exports = function (sequelize, DataTypes) { licence: { type: DataTypes.INTEGER, allowNull: false, + defaultValue: null, validate: { licenceValid: function (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: { type: DataTypes.BOOLEAN, allowNull: false, @@ -398,6 +409,10 @@ function toFormatedJSON () { let licenceLabel = constants.VIDEO_LICENCES[this.licence] if (!licenceLabel) licenceLabel = 'Unknown' + // Language is an optional attribute + let languageLabel = constants.VIDEO_LANGUAGES[this.language] + if (!languageLabel) languageLabel = 'Unknown' + const json = { id: this.id, name: this.name, @@ -405,6 +420,8 @@ function toFormatedJSON () { categoryLabel, licence: this.licence, licenceLabel, + language: this.language, + languageLabel, nsfw: this.nsfw, description: this.description, podHost, @@ -439,6 +456,7 @@ function toAddRemoteJSON (callback) { name: self.name, category: self.category, licence: self.licence, + language: self.language, nsfw: self.nsfw, description: self.description, infoHash: self.infoHash, @@ -464,6 +482,7 @@ function toUpdateRemoteJSON (callback) { name: this.name, category: this.category, licence: this.licence, + language: this.language, nsfw: this.nsfw, description: this.description, infoHash: this.infoHash, diff --git a/server/tests/api/check-params/videos.js b/server/tests/api/check-params/videos.js index 551fe687b..1a24d26cc 100644 --- a/server/tests/api/check-params/videos.js +++ b/server/tests/api/check-params/videos.js @@ -114,6 +114,7 @@ describe('Test videos API validator', function () { const data = { category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', 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', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -143,6 +145,7 @@ describe('Test videos API validator', function () { const data = { name: 'my super name', licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -158,6 +161,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 125, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -172,6 +176,7 @@ describe('Test videos API validator', function () { const data = { name: 'my super name', category: 5, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -187,6 +192,23 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, 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, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -202,6 +224,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 4, + language: 6, description: 'my super description', tags: [ 'tag1', 'tag2' ] } @@ -216,6 +239,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 4, + language: 6, nsfw: 2, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -231,6 +255,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, tags: [ 'tag1', 'tag2' ] } @@ -245,6 +270,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, 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' + @@ -262,6 +288,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ] @@ -277,6 +304,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 't' ] @@ -292,6 +320,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'mysupertagtoolong', 'tag1' ] @@ -307,6 +336,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -320,6 +350,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -335,6 +366,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -350,6 +382,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 1, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -389,6 +422,7 @@ describe('Test videos API validator', function () { const data = { category: 5, licence: 2, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -400,6 +434,7 @@ describe('Test videos API validator', function () { const data = { category: 5, licence: 2, + language: 6, nsfw: false, description: 'my super description', 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', category: 5, licence: 2, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -424,6 +460,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 128, licence: 2, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -436,6 +473,20 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, 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, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -448,6 +499,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 5, + language: 6, nsfw: -4, description: 'my super description', tags: [ 'tag1', 'tag2' ] @@ -460,6 +512,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 2, + language: 6, nsfw: false, 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' + @@ -474,6 +527,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 2, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ] @@ -486,6 +540,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 2, + language: 6, nsfw: false, description: 'my super description', tags: [ 'tag1', 't' ] @@ -498,6 +553,7 @@ describe('Test videos API validator', function () { name: 'my super name', category: 5, licence: 2, + language: 6, nsfw: false, description: 'my super description', tags: [ 'mysupertagtoolong', 'tag1' ] diff --git a/server/tests/api/multiple-pods.js b/server/tests/api/multiple-pods.js index cc4f7be70..45969e83a 100644 --- a/server/tests/api/multiple-pods.js +++ b/server/tests/api/multiple-pods.js @@ -84,6 +84,7 @@ describe('Test multiple pods', function () { name: 'my super name for pod 1', category: 5, licence: 4, + language: 9, nsfw: true, description: 'my super description for pod 1', tags: [ 'tag1p1', 'tag2p1' ], @@ -113,6 +114,8 @@ describe('Test multiple pods', function () { expect(video.categoryLabel).to.equal('Sports') expect(video.licence).to.equal(4) 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.description).to.equal('my super description for pod 1') expect(video.podHost).to.equal('localhost:9001') @@ -157,6 +160,7 @@ describe('Test multiple pods', function () { name: 'my super name for pod 2', category: 4, licence: 3, + language: 11, nsfw: true, description: 'my super description for pod 2', tags: [ 'tag1p2', 'tag2p2', 'tag3p2' ], @@ -186,6 +190,8 @@ describe('Test multiple pods', function () { expect(video.categoryLabel).to.equal('Art') expect(video.licence).to.equal(3) 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.description).to.equal('my super description for pod 2') expect(video.podHost).to.equal('localhost:9002') @@ -230,6 +236,7 @@ describe('Test multiple pods', function () { name: 'my super name for pod 3', category: 6, licence: 5, + language: 11, nsfw: true, description: 'my super description for pod 3', tags: [ 'tag1p3' ], @@ -242,6 +249,7 @@ describe('Test multiple pods', function () { name: 'my super name for pod 3-2', category: 7, licence: 6, + language: 12, nsfw: false, description: 'my super description for pod 3-2', tags: [ 'tag2p3', 'tag3p3', 'tag4p3' ], @@ -281,6 +289,8 @@ describe('Test multiple pods', function () { expect(video1.categoryLabel).to.equal('Travels') expect(video1.licence).to.equal(5) 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.description).to.equal('my super description for pod 3') expect(video1.podHost).to.equal('localhost:9003') @@ -296,6 +306,8 @@ describe('Test multiple pods', function () { expect(video2.categoryLabel).to.equal('Gaming') expect(video2.licence).to.equal(6) 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.description).to.equal('my super description for pod 3-2') expect(video2.podHost).to.equal('localhost:9003') @@ -646,6 +658,7 @@ describe('Test multiple pods', function () { name: 'my super video updated', category: 10, licence: 7, + language: 13, nsfw: true, description: 'my super description updated', tags: [ 'tagup1', 'tagup2' ] @@ -677,6 +690,8 @@ describe('Test multiple pods', function () { expect(videoUpdated.categoryLabel).to.equal('Entertainment') expect(videoUpdated.licence).to.equal(7) 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.description).to.equal('my super description updated') expect(videoUpdated.tags).to.deep.equal([ 'tagup1', 'tagup2' ]) diff --git a/server/tests/api/single-pod.js b/server/tests/api/single-pod.js index aff6d56ec..fe388698f 100644 --- a/server/tests/api/single-pod.js +++ b/server/tests/api/single-pod.js @@ -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) { videosUtils.getVideosList(server.url, function (err, res) { if (err) throw err @@ -110,6 +123,8 @@ describe('Test a single pod', function () { expect(video.categoryLabel).to.equal('Films') expect(video.licence).to.equal(6) 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.description).to.equal('my super description') 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.licence).to.equal(6) 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.description).to.equal('my super description') 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.licence).to.equal(6) 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.description).to.equal('my super description') 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.licence).to.equal(6) 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.description).to.equal('my super description') expect(video.podHost).to.equal('localhost:9001') @@ -352,6 +373,7 @@ describe('Test a single pod', function () { description: video + ' description', category: 2, licence: 1, + language: 1, nsfw: true, tags: [ 'tag1', 'tag2', 'tag3' ], fixture: video @@ -578,6 +600,7 @@ describe('Test a single pod', function () { name: 'my super video updated', category: 4, licence: 2, + language: 5, nsfw: false, description: 'my super description updated', tags: [ 'tagup1', 'tagup2' ] @@ -598,6 +621,8 @@ describe('Test a single pod', function () { expect(video.categoryLabel).to.equal('Art') expect(video.licence).to.equal(2) 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.description).to.equal('my super description updated') 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.licence).to.equal(2) 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.description).to.equal('my super description updated') 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.licence).to.equal(2) 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.description).to.equal('hello everybody') expect(video.podHost).to.equal('localhost:9001') diff --git a/server/tests/real-world/real-world.js b/server/tests/real-world/real-world.js index ddce45cde..21f0732d0 100644 --- a/server/tests/real-world/real-world.js +++ b/server/tests/real-world/real-world.js @@ -21,7 +21,7 @@ program .option('-u, --update [weight]', 'Weight for updating videos') .option('-v, --view [weight]', 'Weight for viewing 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('-a, --action [interval]', 'Interval in ms for an action') .option('-i, --integrity [interval]', 'Interval in ms for an integrity check') @@ -207,6 +207,7 @@ function upload (servers, numServer, callback) { category: 4, nsfw: false, licence: 2, + language: 1, description: Date.now() + ' description', tags: [ Date.now().toString().substring(0, 5) + 't1', Date.now().toString().substring(0, 5) + 't2' ], fixture: 'video_short1.webm' diff --git a/server/tests/real-world/tools/upload.js b/server/tests/real-world/tools/upload.js index 4b6dbe603..efb91e228 100644 --- a/server/tests/real-world/tools/upload.js +++ b/server/tests/real-world/tools/upload.js @@ -12,6 +12,7 @@ program .option('-x, --nsfw', 'Video is Not Safe For Work') .option('-c, --category ', 'Category number') .option('-l, --licence ', 'Licence number') + .option('-g, --language ', 'Language number') .option('-d, --description ', 'Video description') .option('-t, --tags ', 'Video tags', list) .option('-f, --file ', 'Video absolute file path') @@ -23,6 +24,7 @@ if ( !program.name || !program.category || !program.licence || + !program.language || !program.nsfw || !program.description || !program.tags || @@ -42,6 +44,7 @@ fs.access(program.file, fs.F_OK, function (err) { program.name, program.category, program.licence, + program.language, program.nsfw, program.description, program.tags, @@ -55,13 +58,14 @@ function list (val) { 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) const videoAttributes = { name, category, licence, + language, nsfw, description, tags, diff --git a/server/tests/utils/videos.js b/server/tests/utils/videos.js index 3c7d99eec..f0eeec497 100644 --- a/server/tests/utils/videos.js +++ b/server/tests/utils/videos.js @@ -7,6 +7,7 @@ const request = require('supertest') const videosUtils = { getVideoCategories, getVideoLicences, + getVideoLanguages, getAllVideosListBy, getVideo, getVideosList, @@ -46,6 +47,17 @@ function getVideoLicences (url, 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) { const path = '/api/v1/videos' @@ -218,6 +230,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end) name: 'my super video', category: 5, licence: 4, + language: 3, nsfw: true, description: 'my super description', tags: [ 'tag' ], @@ -232,6 +245,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end) .field('name', attributes.name) .field('category', attributes.category) .field('licence', attributes.licence) + .field('language', attributes.language) .field('nsfw', attributes.nsfw) .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.category) req.field('category', attributes.category) 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.description) req.field('description', attributes.description) -- 2.25.1