Server: add video language attribute
authorChocobozzz <florian.bigard@gmail.com>
Fri, 7 Apr 2017 10:13:37 +0000 (12:13 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Fri, 7 Apr 2017 10:13:37 +0000 (12:13 +0200)
14 files changed:
server/controllers/api/remote/videos.js
server/controllers/api/videos.js
server/helpers/custom-validators/remote/videos.js
server/helpers/custom-validators/videos.js
server/initializers/constants.js
server/initializers/migrations/0050-video-language.js [new file with mode: 0644]
server/middlewares/validators/videos.js
server/models/video.js
server/tests/api/check-params/videos.js
server/tests/api/multiple-pods.js
server/tests/api/single-pod.js
server/tests/real-world/real-world.js
server/tests/real-world/tools/upload.js
server/tests/utils/videos.js

index ea1eeb146dbd1954999bc1d36d9730ce76be2602..e54793628944e24f6667b02fe9bb03cdcd63911a 100644 (file)
@@ -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)
index 3d616e33ddb7ebc5fde16c07aa6a291130380796..5e9ff482fe34d63677876aa8e87219546b343216 100644 (file)
@@ -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)
 
index df8f8a22e014169afa7606ec4b2034161747cc01..24715b4b3b2059bda545515324ec6c376bc2dcfd 100644 (file)
@@ -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) &&
index d0b08e7aca120ad89fb8e666482bd8f697c8a0f7..8dabb828d0d51941b626671d17fac7c6e126e405 100644 (file)
@@ -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)
 }
index 6352d7c46d81c47268e870e536bddc03d5e05d27..d6da20982b29a0eded0e0c70dfebda862db334dd 100644 (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'
 }
 
+// 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 (file)
index 0000000..1c97875
--- /dev/null
@@ -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.')
+}
index 095fc382b61c984cc4af677131dff50c46f0870b..c07825e50e3484bdd62958d5da35dc8297158035 100644 (file)
@@ -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()
index 86d6438c8ba79a9db7e08273fae29d95bcda8476..39eb28ed9ff60bbe7691a3444552330f9750a0e7 100644 (file)
@@ -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,
index 551fe687b679227d38acf797929f320752c6b064..1a24d26cc76db81a2da2c2b28b569856506b4490 100644 (file)
@@ -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' ]
index cc4f7be701090d94fc6e622fab4454444849d013..45969e83a5e2fef80d94bccff6fcdaaf1b7e9af1 100644 (file)
@@ -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' ])
index aff6d56ecc688c9f5a2961beb8ac49166b896149..fe388698f9b24407719a350eded938f06078dc09 100644 (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) {
     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')
index ddce45cde303246b3094945a8cbd3d7b6a91baa0..21f0732d0bf071ceae370fdd9e3ca618594dfeca 100644 (file)
@@ -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'
index 4b6dbe60364e7c65325659d83a7ce8365432c661..efb91e228a5595d65aa8b8f436f45999caeca7c3 100644 (file)
@@ -12,6 +12,7 @@ program
   .option('-x, --nsfw', 'Video is Not Safe For Work')
   .option('-c, --category <category number>', 'Category number')
   .option('-l, --licence <licence number>', 'Licence number')
+  .option('-g, --language <language number>', 'Language number')
   .option('-d, --description <description>', 'Video description')
   .option('-t, --tags <tags>', 'Video tags', list)
   .option('-f, --file <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,
index 3c7d99eec61de373a083d52a2afd34a7954e31f8..f0eeec497d32b7adecd429ba378b9a9029ce4767 100644 (file)
@@ -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)