From 6f0c39e2de400685b7baf8340b9e132f2659365a Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 27 Mar 2017 20:53:11 +0200 Subject: [PATCH] Server: add licence video 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 | 14 ++++- .../migrations/0035-video-licence.js | 34 +++++++++++ server/middlewares/validators/videos.js | 2 + server/models/video.js | 18 ++++++ server/tests/api/check-params/videos.js | 59 +++++++++++++++++++ server/tests/api/multiple-pods.js | 16 +++++ server/tests/api/single-pod.js | 30 ++++++++++ server/tests/real-world/real-world.js | 1 + server/tests/real-world/tools/upload.js | 8 ++- server/tests/utils/videos.js | 15 +++++ 14 files changed, 209 insertions(+), 3 deletions(-) create mode 100644 server/initializers/migrations/0035-video-licence.js diff --git a/server/controllers/api/remote/videos.js b/server/controllers/api/remote/videos.js index c8ef0c445..a3e1189c7 100644 --- a/server/controllers/api/remote/videos.js +++ b/server/controllers/api/remote/videos.js @@ -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) diff --git a/server/controllers/api/videos.js b/server/controllers/api/videos.js index 8c69ff4e5..375e89387 100644 --- a/server/controllers/api/videos.js +++ b/server/controllers/api/videos.js @@ -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) { diff --git a/server/helpers/custom-validators/remote/videos.js b/server/helpers/custom-validators/remote/videos.js index 701acdbfd..9a9055676 100644 --- a/server/helpers/custom-validators/remote/videos.js +++ b/server/helpers/custom-validators/remote/videos.js @@ -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) && diff --git a/server/helpers/custom-validators/videos.js b/server/helpers/custom-validators/videos.js index efa89c427..8495e9665 100644 --- a/server/helpers/custom-validators/videos.js +++ b/server/helpers/custom-validators/videos.js @@ -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) } diff --git a/server/initializers/constants.js b/server/initializers/constants.js index 40f01e389..af494cb66 100644 --- a/server/initializers/constants.js +++ b/server/initializers/constants.js @@ -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 index 000000000..9cf75858d --- /dev/null +++ b/server/initializers/migrations/0035-video-licence.js @@ -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.') +} diff --git a/server/middlewares/validators/videos.js b/server/middlewares/validators/videos.js index cf3874a97..6cc0c2565 100644 --- a/server/middlewares/validators/videos.js +++ b/server/middlewares/validators/videos.js @@ -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() diff --git a/server/models/video.js b/server/models/video.js index c4c7b5de8..0f44b98c3 100644 --- a/server/models/video.js +++ b/server/models/video.js @@ -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, diff --git a/server/tests/api/check-params/videos.js b/server/tests/api/check-params/videos.js index 03b4db3fe..e58f9893b 100644 --- a/server/tests/api/check-params/videos.js +++ b/server/tests/api/check-params/videos.js @@ -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' ] } diff --git a/server/tests/api/multiple-pods.js b/server/tests/api/multiple-pods.js index d5c723b3b..69ef38c20 100644 --- a/server/tests/api/multiple-pods.js +++ b/server/tests/api/multiple-pods.js @@ -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 diff --git a/server/tests/api/single-pod.js b/server/tests/api/single-pod.js index 9465f6034..6d7ebdc9b 100644 --- a/server/tests/api/single-pod.js +++ b/server/tests/api/single-pod.js @@ -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') diff --git a/server/tests/real-world/real-world.js b/server/tests/real-world/real-world.js index 32afeec68..7777768c8 100644 --- a/server/tests/real-world/real-world.js +++ b/server/tests/real-world/real-world.js @@ -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' diff --git a/server/tests/real-world/tools/upload.js b/server/tests/real-world/tools/upload.js index 856251c7f..7b97ebf0b 100644 --- a/server/tests/real-world/tools/upload.js +++ b/server/tests/real-world/tools/upload.js @@ -9,7 +9,8 @@ program .option('-u, --url ', 'Server url') .option('-a, --access-token ', 'Access token') .option('-n, --name ', 'Video name') - .option('-d, --category ', 'Category number') + .option('-c, --category ', 'Category number') + .option('-l, --licence ', 'Licence number') .option('-d, --description ', 'Video description') .option('-t, --tags ', 'Video tags', list) .option('-f, --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 diff --git a/server/tests/utils/videos.js b/server/tests/utils/videos.js index ad0d74076..d1e0b7b14 100644 --- a/server/tests/utils/videos.js +++ b/server/tests/utils/videos.js @@ -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) {