diff --git a/server/controllers/api/v1/videos.js b/server/controllers/api/v1/videos.js index 0e058836e..5bdfdbf58 100644 --- a/server/controllers/api/v1/videos.js +++ b/server/controllers/api/v1/videos.js @@ -111,13 +111,15 @@ function addVideo (req, res, next) { thumbnail: thumbnailName } - Videos.add(videoData, function (err) { + Videos.add(videoData, function (err, insertedVideo) { if (err) { // TODO unseed the video logger.error('Cannot insert this video in the database.') return next(err) } + videoData.createdDate = insertedVideo.createdDate + fs.readFile(thumbnailsDir + thumbnailName, function (err, data) { if (err) { // TODO: remove video? @@ -205,7 +207,8 @@ function getFormatedVideo (videoObj) { magnetUri: videoObj.magnetUri, author: videoObj.author, duration: videoObj.duration, - thumbnailPath: constants.THUMBNAILS_STATIC_PATH + '/' + videoObj.thumbnail + thumbnailPath: constants.THUMBNAILS_STATIC_PATH + '/' + videoObj.thumbnail, + createdDate: videoObj.createdDate } return formatedVideo diff --git a/server/helpers/customValidators.js b/server/helpers/customValidators.js index 0fbabab52..a8fc6942d 100644 --- a/server/helpers/customValidators.js +++ b/server/helpers/customValidators.js @@ -14,7 +14,8 @@ function eachIsRemoteVideosAddValid (values) { validator.isLength(val.description, 1, 50) && validator.isLength(val.magnetUri, 10) && validator.isURL(val.podUrl) && - !isNaN(val.duration) + !isNaN(val.duration) && + validator.isDate(val.createdDate) }) } diff --git a/server/models/videos.js b/server/models/videos.js index aa9ed687d..250ad3952 100644 --- a/server/models/videos.js +++ b/server/models/videos.js @@ -19,7 +19,11 @@ const videosSchema = mongoose.Schema({ podUrl: String, author: String, duration: Number, - thumbnail: String + thumbnail: String, + createdDate: { + type: Date, + default: Date.now + } }) const VideosDB = mongoose.model('videos', videosSchema) @@ -46,13 +50,13 @@ function add (video, callback) { const params = video params.podUrl = http + '://' + host + ':' + port - VideosDB.create(params, function (err, video) { + VideosDB.create(params, function (err, insertedVideo) { if (err) { logger.error('Cannot insert this video into database.') return callback(err) } - callback(null) + callback(null, insertedVideo) }) } diff --git a/server/tests/api/multiplePods.js b/server/tests/api/multiplePods.js index 51e7fb3d1..c31c18b02 100644 --- a/server/tests/api/multiplePods.js +++ b/server/tests/api/multiplePods.js @@ -98,6 +98,7 @@ describe('Test multiple pods', function () { expect(video.podUrl).to.equal('http://localhost:9001') expect(video.magnetUri).to.exist expect(video.duration).to.equal(10) + expect(utils.dateIsValid(video.createdDate)).to.be.true if (server.url !== 'http://localhost:9001') { expect(video.isLocal).to.be.false @@ -153,6 +154,7 @@ describe('Test multiple pods', function () { expect(video.podUrl).to.equal('http://localhost:9002') expect(video.magnetUri).to.exist expect(video.duration).to.equal(5) + expect(utils.dateIsValid(video.createdDate)).to.be.true if (server.url !== 'http://localhost:9002') { expect(video.isLocal).to.be.false @@ -221,12 +223,14 @@ describe('Test multiple pods', function () { expect(video1.podUrl).to.equal('http://localhost:9003') expect(video1.magnetUri).to.exist expect(video1.duration).to.equal(5) + expect(utils.dateIsValid(video1.createdDate)).to.be.true expect(video2.name).to.equal('my super name for pod 3-2') expect(video2.description).to.equal('my super description for pod 3-2') expect(video2.podUrl).to.equal('http://localhost:9003') expect(video2.magnetUri).to.exist expect(video2.duration).to.equal(5) + expect(utils.dateIsValid(video2.createdDate)).to.be.true if (server.url !== 'http://localhost:9003') { expect(video1.isLocal).to.be.false diff --git a/server/tests/api/singlePod.js b/server/tests/api/singlePod.js index d377bdf45..72002b631 100644 --- a/server/tests/api/singlePod.js +++ b/server/tests/api/singlePod.js @@ -76,6 +76,7 @@ describe('Test a single pod', function () { expect(video.magnetUri).to.exist expect(video.author).to.equal('root') expect(video.isLocal).to.be.true + expect(utils.dateIsValid(video.createdDate)).to.be.true utils.testImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) { if (err) throw err @@ -109,6 +110,7 @@ describe('Test a single pod', function () { expect(video.magnetUri).to.exist expect(video.author).to.equal('root') expect(video.isLocal).to.be.true + expect(utils.dateIsValid(video.createdDate)).to.be.true utils.testImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) { if (err) throw err @@ -138,6 +140,7 @@ describe('Test a single pod', function () { expect(video.podUrl).to.equal('http://localhost:9001') expect(video.author).to.equal('root') expect(video.isLocal).to.be.true + expect(utils.dateIsValid(video.createdDate)).to.be.true utils.testImage(server.url, 'video_short.webm', video.thumbnailPath, function (err, test) { if (err) throw err diff --git a/server/tests/api/utils.js b/server/tests/api/utils.js index f0b1c3653..d505cb5d9 100644 --- a/server/tests/api/utils.js +++ b/server/tests/api/utils.js @@ -8,6 +8,7 @@ const pathUtils = require('path') const request = require('supertest') const testUtils = { + dateIsValid: dateIsValid, flushTests: flushTests, getFriendsList: getFriendsList, getVideo: getVideo, @@ -28,6 +29,16 @@ const testUtils = { // ---------------------- Export functions -------------------- +function dateIsValid (dateString) { + const dateToCheck = new Date(dateString) + const now = new Date() + + // Check if the interval is more than 2 minutes + if (now - dateToCheck > 120000) return false + + return true +} + function flushTests (callback) { exec('npm run clean:server:test', callback) }