]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Server: add licence video attribute
authorChocobozzz <florian.bigard@gmail.com>
Mon, 27 Mar 2017 18:53:11 +0000 (20:53 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Mon, 27 Mar 2017 18:53:11 +0000 (20:53 +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/0035-video-licence.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 c8ef0c445045222fa6f5d90dd32457f718e28e18..a3e1189c749b29e788587b241301483a765e8150 100644 (file)
@@ -295,6 +295,7 @@ function addRemoteVideo (videoToCreateData, fromPod, finalCallback) {
         extname: videoToCreateData.extname,
         infoHash: videoToCreateData.infoHash,
         category: videoToCreateData.category,
+        licence: videoToCreateData.licence,
         description: videoToCreateData.description,
         authorId: author.id,
         duration: videoToCreateData.duration,
@@ -392,6 +393,7 @@ function updateRemoteVideo (videoAttributesToUpdate, fromPod, finalCallback) {
 
       videoInstance.set('name', videoAttributesToUpdate.name)
       videoInstance.set('category', videoAttributesToUpdate.category)
+      videoInstance.set('licence', videoAttributesToUpdate.licence)
       videoInstance.set('description', videoAttributesToUpdate.description)
       videoInstance.set('infoHash', videoAttributesToUpdate.infoHash)
       videoInstance.set('duration', videoAttributesToUpdate.duration)
index 8c69ff4e5b9dd31ded315e5b9d35c013d20c8abf..375e89387472c9f15bf38d4f2ca305572331f557 100644 (file)
@@ -46,6 +46,7 @@ const storage = multer.diskStorage({
 const reqFiles = multer({ storage: storage }).fields([{ name: 'videofile', maxCount: 1 }])
 
 router.get('/categories', listVideoCategories)
+router.get('/licences', listVideoLicences)
 
 router.get('/abuse',
   oAuth.authenticate,
@@ -116,6 +117,10 @@ function listVideoCategories (req, res, next) {
   res.json(constants.VIDEO_CATEGORIES)
 }
 
+function listVideoLicences (req, res, next) {
+  res.json(constants.VIDEO_LICENCES)
+}
+
 function rateVideoRetryWrapper (req, res, next) {
   const options = {
     arguments: [ req, res ],
@@ -307,6 +312,7 @@ function addVideo (req, res, videoFile, finalCallback) {
         remoteId: null,
         extname: path.extname(videoFile.filename),
         category: videoInfos.category,
+        licence: videoInfos.licence,
         description: videoInfos.description,
         duration: videoFile.duration,
         authorId: author.id
@@ -421,6 +427,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.description) videoInstance.set('description', videoInfosToUpdate.description)
 
       videoInstance.save(options).asCallback(function (err) {
index 701acdbfd69f617fcdada8eee8e37a9e13245f87..9a905567651cf8997b102107dd0d3d859f14b419 100644 (file)
@@ -86,6 +86,7 @@ function isCommonVideoAttributesValid (video) {
   return videosValidators.isVideoDateValid(video.createdAt) &&
          videosValidators.isVideoDateValid(video.updatedAt) &&
          videosValidators.isVideoCategoryValid(video.category) &&
+         videosValidators.isVideoLicenceValid(video.licence) &&
          videosValidators.isVideoDescriptionValid(video.description) &&
          videosValidators.isVideoDurationValid(video.duration) &&
          videosValidators.isVideoInfoHashValid(video.infoHash) &&
index efa89c427d363c2b0092efd07bc3f3b685e2641a..8495e9665965d3b9a759c6d2b09f1829a43e38ad 100644 (file)
@@ -14,6 +14,7 @@ const videosValidators = {
   isVideoAuthorValid,
   isVideoDateValid,
   isVideoCategoryValid,
+  isVideoLicenceValid,
   isVideoDescriptionValid,
   isVideoDurationValid,
   isVideoInfoHashValid,
@@ -45,6 +46,10 @@ function isVideoCategoryValid (value) {
   return constants.VIDEO_CATEGORIES[value] !== undefined
 }
 
+function isVideoLicenceValid (value) {
+  return constants.VIDEO_LICENCES[value] !== undefined
+}
+
 function isVideoDescriptionValid (value) {
   return validator.isLength(value, VIDEOS_CONSTRAINTS_FIELDS.DESCRIPTION)
 }
index 40f01e389f123f18d8b6b9fbb83d678069bc0da4..af494cb66f0f885dcb09267f3d3ab2e3f1dfa84a 100644 (file)
@@ -5,7 +5,7 @@ const path = require('path')
 
 // ---------------------------------------------------------------------------
 
-const LAST_MIGRATION_VERSION = 30
+const LAST_MIGRATION_VERSION = 35
 
 // ---------------------------------------------------------------------------
 
@@ -124,6 +124,17 @@ const VIDEO_CATEGORIES = {
   18: 'Food'
 }
 
+// See https://creativecommons.org/licenses/?lang=en
+const VIDEO_LICENCES = {
+  1: 'Attribution',
+  2: 'Attribution - Share Alike',
+  3: 'Attribution - No Derivatives',
+  4: 'Attribution - Non Commercial',
+  5: 'Attribution - Non Commercial - Share Alike',
+  6: 'Attribution - Non Commercial - No Derivatives',
+  7: 'Public Domain Dedication'
+}
+
 // ---------------------------------------------------------------------------
 
 // Score a pod has when we create it as a friend
@@ -280,6 +291,7 @@ module.exports = {
   THUMBNAILS_SIZE,
   USER_ROLES,
   VIDEO_CATEGORIES,
+  VIDEO_LICENCES,
   VIDEO_RATE_TYPES
 }
 
diff --git a/server/initializers/migrations/0035-video-licence.js b/server/initializers/migrations/0035-video-licence.js
new file mode 100644 (file)
index 0000000..9cf7585
--- /dev/null
@@ -0,0 +1,34 @@
+'use strict'
+
+const waterfall = require('async/waterfall')
+
+// utils = { transaction, queryInterface, sequelize, Sequelize }
+exports.up = function (utils, finalCallback) {
+  const q = utils.queryInterface
+  const Sequelize = utils.Sequelize
+
+  const data = {
+    type: Sequelize.INTEGER,
+    allowNull: false,
+    defaultValue: 0
+  }
+
+  waterfall([
+
+    function addLicenceColumn (callback) {
+      q.addColumn('Videos', 'licence', data, { transaction: utils.transaction }).asCallback(function (err) {
+        return callback(err)
+      })
+    },
+
+    function nullOnDefault (callback) {
+      data.defaultValue = null
+
+      q.changeColumn('Videos', 'licence', data, { transaction: utils.transaction }).asCallback(callback)
+    }
+  ], finalCallback)
+}
+
+exports.down = function (options, callback) {
+  throw new Error('Not implemented.')
+}
index cf3874a978e55aead83389f7fdde3dc4a1f87422..6cc0c2565bca36c21bfeeba34f8c4b5fb342548d 100644 (file)
@@ -22,6 +22,7 @@ function videosAdd (req, res, next) {
   req.checkBody('videofile', 'Should have a valid file').isVideoFile(req.files)
   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('description', 'Should have a valid description').isVideoDescriptionValid()
   req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid()
 
@@ -49,6 +50,7 @@ function videosUpdate (req, res, next) {
   req.checkParams('id', 'Should have a valid id').notEmpty().isUUID(4)
   req.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('description', 'Should have a valid description').optional().isVideoDescriptionValid()
   req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid()
 
index c4c7b5de84b4fc1b7e220d3869a8d17489a61901..0f44b98c3b27a5625f546602e7c028a9ce9d7f87 100644 (file)
@@ -61,6 +61,16 @@ module.exports = function (sequelize, DataTypes) {
           }
         }
       },
+      licence: {
+        type: DataTypes.INTEGER,
+        allowNull: false,
+        validate: {
+          licenceValid: function (value) {
+            const res = customVideosValidators.isVideoLicenceValid(value)
+            if (res === false) throw new Error('Video licence is not valid.')
+          }
+        }
+      },
       description: {
         type: DataTypes.STRING,
         allowNull: false,
@@ -374,11 +384,17 @@ function toFormatedJSON () {
   let categoryLabel = constants.VIDEO_CATEGORIES[this.category]
   if (!categoryLabel) categoryLabel = 'Misc'
 
+  // Maybe our pod is not up to date and there are new licences since our version
+  let licenceLabel = constants.VIDEO_LICENCES[this.licence]
+  if (!licenceLabel) licenceLabel = 'Unknown'
+
   const json = {
     id: this.id,
     name: this.name,
     category: this.category,
     categoryLabel,
+    licence: this.licence,
+    licenceLabel,
     description: this.description,
     podHost,
     isLocal: this.isOwned(),
@@ -411,6 +427,7 @@ function toAddRemoteJSON (callback) {
     const remoteVideo = {
       name: self.name,
       category: self.category,
+      licence: self.licence,
       description: self.description,
       infoHash: self.infoHash,
       remoteId: self.id,
@@ -434,6 +451,7 @@ function toUpdateRemoteJSON (callback) {
   const json = {
     name: this.name,
     category: this.category,
+    licence: this.licence,
     description: this.description,
     infoHash: this.infoHash,
     remoteId: this.id,
index 03b4db3fe68d72ebd680eed9135672852dd5334a..e58f9893bea540b110a6bade534910195455ef5f 100644 (file)
@@ -113,6 +113,7 @@ describe('Test videos API validator', function () {
     it('Should fail without name', function (done) {
       const data = {
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -126,6 +127,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'My very very very very very very very very very very very very very very very very long name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -138,6 +140,7 @@ describe('Test videos API validator', function () {
     it('Should fail without a category', function (done) {
       const data = {
         name: 'my super name',
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -151,6 +154,34 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 125,
+        licence: 1,
+        description: 'my super description',
+        tags: [ 'tag1', 'tag2' ]
+      }
+      const attach = {
+        'videofile': pathUtils.join(__dirname, '..', 'fixtures', 'video_short.webm')
+      }
+      requestsUtils.makePostUploadRequest(server.url, path, server.accessToken, data, attach, done)
+    })
+
+    it('Should fail without a licence', function (done) {
+      const data = {
+        name: 'my super name',
+        category: 5,
+        description: 'my super description',
+        tags: [ 'tag1', 'tag2' ]
+      }
+      const attach = {
+        'videofile': pathUtils.join(__dirname, '..', 'fixtures', 'video_short.webm')
+      }
+      requestsUtils.makePostUploadRequest(server.url, path, server.accessToken, data, attach, done)
+    })
+
+    it('Should fail with a bad licence', function (done) {
+      const data = {
+        name: 'my super name',
+        category: 5,
+        licence: 125,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -164,6 +195,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         tags: [ 'tag1', 'tag2' ]
       }
       const attach = {
@@ -176,6 +208,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         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 long',
@@ -191,6 +224,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ]
       }
@@ -204,6 +238,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 't' ]
       }
@@ -217,6 +252,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'mysupertagtoolong', 'tag1' ]
       }
@@ -230,6 +266,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -241,6 +278,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -254,6 +292,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -267,6 +306,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 1,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -304,6 +344,7 @@ describe('Test videos API validator', function () {
     it('Should fail without a valid uuid', function (done) {
       const data = {
         category: 5,
+        licence: 2,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -313,6 +354,7 @@ describe('Test videos API validator', function () {
     it('Should fail with an unknown id', function (done) {
       const data = {
         category: 5,
+        licence: 2,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -323,6 +365,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'My very very very very very very very very very very very very very very very very long name',
         category: 5,
+        licence: 2,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -333,6 +376,18 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 128,
+        licence: 2,
+        description: 'my super description',
+        tags: [ 'tag1', 'tag2' ]
+      }
+      requestsUtils.makePutBodyRequest(server.url, path + videoId, server.accessToken, data, done)
+    })
+
+    it('Should fail with a bad licence', function (done) {
+      const data = {
+        name: 'my super name',
+        category: 5,
+        licence: 128,
         description: 'my super description',
         tags: [ 'tag1', 'tag2' ]
       }
@@ -343,6 +398,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 2,
         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 long',
@@ -355,6 +411,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 2,
         description: 'my super description',
         tags: [ 'tag1', 'tag2', 'tag3', 'tag4' ]
       }
@@ -365,6 +422,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 2,
         description: 'my super description',
         tags: [ 'tag1', 't' ]
       }
@@ -375,6 +433,7 @@ describe('Test videos API validator', function () {
       const data = {
         name: 'my super name',
         category: 5,
+        licence: 2,
         description: 'my super description',
         tags: [ 'mysupertagtoolong', 'tag1' ]
       }
index d5c723b3bc9bf49fca648620930f5aa57e8d497d..69ef38c20e34df0176ce21a59bb5419aec8b69fc 100644 (file)
@@ -82,6 +82,8 @@ describe('Test multiple pods', function () {
         function (next) {
           const videoAttributes = {
             name: 'my super name for pod 1',
+            category: 5,
+            licence: 4,
             description: 'my super description for pod 1',
             tags: [ 'tag1p1', 'tag2p1' ],
             fixture: 'video_short1.webm'
@@ -108,6 +110,8 @@ describe('Test multiple pods', function () {
               expect(video.name).to.equal('my super name for pod 1')
               expect(video.category).to.equal(5)
               expect(video.categoryLabel).to.equal('Sports')
+              expect(video.licence).to.equal(4)
+              expect(video.licenceLabel).to.equal('Attribution - Non Commercial')
               expect(video.description).to.equal('my super description for pod 1')
               expect(video.podHost).to.equal('localhost:9001')
               expect(video.magnetUri).to.exist
@@ -150,6 +154,7 @@ describe('Test multiple pods', function () {
           const videoAttributes = {
             name: 'my super name for pod 2',
             category: 4,
+            licence: 3,
             description: 'my super description for pod 2',
             tags: [ 'tag1p2', 'tag2p2', 'tag3p2' ],
             fixture: 'video_short2.webm'
@@ -176,6 +181,8 @@ describe('Test multiple pods', function () {
               expect(video.name).to.equal('my super name for pod 2')
               expect(video.category).to.equal(4)
               expect(video.categoryLabel).to.equal('Art')
+              expect(video.licence).to.equal(3)
+              expect(video.licenceLabel).to.equal('Attribution - No Derivatives')
               expect(video.description).to.equal('my super description for pod 2')
               expect(video.podHost).to.equal('localhost:9002')
               expect(video.magnetUri).to.exist
@@ -218,6 +225,7 @@ describe('Test multiple pods', function () {
           const videoAttributes = {
             name: 'my super name for pod 3',
             category: 6,
+            licence: 5,
             description: 'my super description for pod 3',
             tags: [ 'tag1p3' ],
             fixture: 'video_short3.webm'
@@ -228,6 +236,7 @@ describe('Test multiple pods', function () {
           const videoAttributes = {
             name: 'my super name for pod 3-2',
             category: 7,
+            licence: 6,
             description: 'my super description for pod 3-2',
             tags: [ 'tag2p3', 'tag3p3', 'tag4p3' ],
             fixture: 'video_short.webm'
@@ -264,6 +273,8 @@ describe('Test multiple pods', function () {
               expect(video1.name).to.equal('my super name for pod 3')
               expect(video1.category).to.equal(6)
               expect(video1.categoryLabel).to.equal('Travels')
+              expect(video1.licence).to.equal(5)
+              expect(video1.licenceLabel).to.equal('Attribution - Non Commercial - Share Alike')
               expect(video1.description).to.equal('my super description for pod 3')
               expect(video1.podHost).to.equal('localhost:9003')
               expect(video1.magnetUri).to.exist
@@ -276,6 +287,8 @@ describe('Test multiple pods', function () {
               expect(video2.name).to.equal('my super name for pod 3-2')
               expect(video2.category).to.equal(7)
               expect(video2.categoryLabel).to.equal('Gaming')
+              expect(video2.licence).to.equal(6)
+              expect(video2.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
               expect(video2.description).to.equal('my super description for pod 3-2')
               expect(video2.podHost).to.equal('localhost:9003')
               expect(video2.magnetUri).to.exist
@@ -624,6 +637,7 @@ describe('Test multiple pods', function () {
       const attributes = {
         name: 'my super video updated',
         category: 10,
+        licence: 7,
         description: 'my super description updated',
         tags: [ 'tagup1', 'tagup2' ]
       }
@@ -652,6 +666,8 @@ describe('Test multiple pods', function () {
           expect(!!videoUpdated).to.be.true
           expect(videoUpdated.category).to.equal(10)
           expect(videoUpdated.categoryLabel).to.equal('Entertainment')
+          expect(videoUpdated.licence).to.equal(7)
+          expect(videoUpdated.licenceLabel).to.equal('Public Domain Dedication')
           expect(videoUpdated.description).to.equal('my super description updated')
           expect(videoUpdated.tags).to.deep.equal([ 'tagup1', 'tagup2' ])
           expect(miscsUtils.dateIsValid(videoUpdated.updatedAt, 20000)).to.be.true
index 9465f60345e0eb50225169992767968760a59335..6d7ebdc9b515241ef24c0a44f261a218fee5c072 100644 (file)
@@ -57,6 +57,19 @@ describe('Test a single pod', function () {
     })
   })
 
+  it('Should list video licences', function (done) {
+    videosUtils.getVideoLicences(server.url, function (err, res) {
+      if (err) throw err
+
+      const licences = res.body
+      expect(Object.keys(licences)).to.have.length.above(5)
+
+      expect(licences[3]).to.equal('Attribution - No Derivatives')
+
+      done()
+    })
+  })
+
   it('Should not have videos', function (done) {
     videosUtils.getVideosList(server.url, function (err, res) {
       if (err) throw err
@@ -73,6 +86,7 @@ describe('Test a single pod', function () {
     const videoAttributes = {
       name: 'my super name',
       category: 2,
+      licence: 6,
       tags: [ 'tag1', 'tag2', 'tag3' ]
     }
     videosUtils.uploadVideo(server.url, server.accessToken, videoAttributes, done)
@@ -93,6 +107,8 @@ describe('Test a single pod', function () {
       expect(video.name).to.equal('my super name')
       expect(video.category).to.equal(2)
       expect(video.categoryLabel).to.equal('Films')
+      expect(video.licence).to.equal(6)
+      expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
       expect(video.description).to.equal('my super description')
       expect(video.podHost).to.equal('localhost:9001')
       expect(video.magnetUri).to.exist
@@ -130,6 +146,8 @@ describe('Test a single pod', function () {
       expect(video.name).to.equal('my super name')
       expect(video.category).to.equal(2)
       expect(video.categoryLabel).to.equal('Films')
+      expect(video.licence).to.equal(6)
+      expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
       expect(video.description).to.equal('my super description')
       expect(video.podHost).to.equal('localhost:9001')
       expect(video.magnetUri).to.exist
@@ -171,6 +189,8 @@ describe('Test a single pod', function () {
       expect(video.name).to.equal('my super name')
       expect(video.category).to.equal(2)
       expect(video.categoryLabel).to.equal('Films')
+      expect(video.licence).to.equal(6)
+      expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
       expect(video.description).to.equal('my super description')
       expect(video.podHost).to.equal('localhost:9001')
       expect(video.author).to.equal('root')
@@ -228,6 +248,8 @@ describe('Test a single pod', function () {
       expect(video.name).to.equal('my super name')
       expect(video.category).to.equal(2)
       expect(video.categoryLabel).to.equal('Films')
+      expect(video.licence).to.equal(6)
+      expect(video.licenceLabel).to.equal('Attribution - Non Commercial - No Derivatives')
       expect(video.description).to.equal('my super description')
       expect(video.podHost).to.equal('localhost:9001')
       expect(video.author).to.equal('root')
@@ -324,6 +346,7 @@ describe('Test a single pod', function () {
         name: video + ' name',
         description: video + ' description',
         category: 2,
+        licence: 1,
         tags: [ 'tag1', 'tag2', 'tag3' ],
         fixture: video
       }
@@ -548,6 +571,7 @@ describe('Test a single pod', function () {
     const attributes = {
       name: 'my super video updated',
       category: 4,
+      licence: 2,
       description: 'my super description updated',
       tags: [ 'tagup1', 'tagup2' ]
     }
@@ -565,6 +589,8 @@ describe('Test a single pod', function () {
       expect(video.name).to.equal('my super video updated')
       expect(video.category).to.equal(4)
       expect(video.categoryLabel).to.equal('Art')
+      expect(video.licence).to.equal(2)
+      expect(video.licenceLabel).to.equal('Attribution - Share Alike')
       expect(video.description).to.equal('my super description updated')
       expect(video.podHost).to.equal('localhost:9001')
       expect(video.author).to.equal('root')
@@ -604,6 +630,8 @@ describe('Test a single pod', function () {
         expect(video.name).to.equal('my super video updated')
         expect(video.category).to.equal(4)
         expect(video.categoryLabel).to.equal('Art')
+        expect(video.licence).to.equal(2)
+        expect(video.licenceLabel).to.equal('Attribution - Share Alike')
         expect(video.description).to.equal('my super description updated')
         expect(video.podHost).to.equal('localhost:9001')
         expect(video.author).to.equal('root')
@@ -633,6 +661,8 @@ describe('Test a single pod', function () {
         expect(video.name).to.equal('my super video updated')
         expect(video.category).to.equal(4)
         expect(video.categoryLabel).to.equal('Art')
+        expect(video.licence).to.equal(2)
+        expect(video.licenceLabel).to.equal('Attribution - Share Alike')
         expect(video.description).to.equal('hello everybody')
         expect(video.podHost).to.equal('localhost:9001')
         expect(video.author).to.equal('root')
index 32afeec68d0b8f4f437307a3472d44072fe60bd7..7777768c88c56aebd85be9c6e18ac1cb24e0eb49 100644 (file)
@@ -205,6 +205,7 @@ function upload (servers, numServer, callback) {
   const videoAttributes = {
     name: Date.now() + ' name',
     category: 4,
+    licence: 2,
     description: Date.now() + ' description',
     tags: [ Date.now().toString().substring(0, 5) + 't1', Date.now().toString().substring(0, 5) + 't2' ],
     fixture: 'video_short1.webm'
index 856251c7fd9b8fc87ed3af119fe61667c37f5a8f..7b97ebf0b5e3e5ba344eeda27a1e416e18251c11 100644 (file)
@@ -9,7 +9,8 @@ program
   .option('-u, --url <url>', 'Server url')
   .option('-a, --access-token <token>', 'Access token')
   .option('-n, --name <name>', 'Video name')
-  .option('-d, --category <category number>', 'Category number')
+  .option('-c, --category <category number>', 'Category number')
+  .option('-l, --licence <licence number>', 'Licence number')
   .option('-d, --description <description>', 'Video description')
   .option('-t, --tags <tags>', 'Video tags', list)
   .option('-f, --file <file>', 'Video absolute file path')
@@ -20,6 +21,7 @@ if (
   !program.accessToken ||
   !program.name ||
   !program.category ||
+  !program.licence ||
   !program.description ||
   !program.tags ||
   !Array.isArray(program.tags) ||
@@ -37,6 +39,7 @@ fs.access(program.file, fs.F_OK, function (err) {
     program.accessToken,
     program.name,
     program.category,
+    program.licence,
     program.description,
     program.tags,
     program.file
@@ -49,12 +52,13 @@ function list (val) {
   return val.split(',')
 }
 
-function upload (url, accessToken, name, category, description, tags, fixture) {
+function upload (url, accessToken, name, category, licence, description, tags, fixture) {
   console.log('Uploading %s video...', program.name)
 
   const videoAttributes = {
     name,
     category,
+    licence,
     description,
     tags,
     fixture
index ad0d7407686e9767d0dcc2e3a7075feb68e12e42..d1e0b7b14e5ad8ba50efd1e29dc86b5345bb34b8 100644 (file)
@@ -6,6 +6,7 @@ const request = require('supertest')
 
 const videosUtils = {
   getVideoCategories,
+  getVideoLicences,
   getAllVideosListBy,
   getVideo,
   getVideosList,
@@ -34,6 +35,17 @@ function getVideoCategories (url, end) {
     .end(end)
 }
 
+function getVideoLicences (url, end) {
+  const path = '/api/v1/videos/licences'
+
+  request(url)
+    .get(path)
+    .set('Accept', 'application/json')
+    .expect(200)
+    .expect('Content-Type', /json/)
+    .end(end)
+}
+
 function getAllVideosListBy (url, end) {
   const path = '/api/v1/videos'
 
@@ -205,6 +217,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end)
   let attributes = {
     name: 'my super video',
     category: 5,
+    licence: 4,
     description: 'my super description',
     tags: [ 'tag' ],
     fixture: 'video_short.webm'
@@ -217,6 +230,7 @@ function uploadVideo (url, accessToken, videoAttributesArg, specialStatus, end)
               .set('Authorization', 'Bearer ' + accessToken)
               .field('name', attributes.name)
               .field('category', attributes.category)
+              .field('licence', attributes.licence)
               .field('description', attributes.description)
 
   for (let i = 0; i < attributes.tags.length; i++) {
@@ -250,6 +264,7 @@ function updateVideo (url, accessToken, id, attributes, specialStatus, end) {
 
   if (attributes.name) req.field('name', attributes.name)
   if (attributes.category) req.field('category', attributes.category)
+  if (attributes.licence) req.field('licence', attributes.licence)
   if (attributes.description) req.field('description', attributes.description)
 
   if (attributes.tags) {