X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Futils.js;h=3cc769f265a26066ba85dd668700073d1955767c;hb=677618d4a600a1678088d107850c8f1f8c95255f;hp=d37e12cb207df3ff36d023ccce2e2fa795e57514;hpb=0c1cbbfe29d91c95f9c574b57adf067654b8b5b4;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/utils.js b/server/tests/api/utils.js index d37e12cb2..3cc769f26 100644 --- a/server/tests/api/utils.js +++ b/server/tests/api/utils.js @@ -1,16 +1,22 @@ 'use strict' -const child_process = require('child_process') -const exec = child_process.exec -const fork = child_process.fork +const childProcess = require('child_process') +const exec = childProcess.exec +const fork = childProcess.fork +const fs = require('fs') const pathUtils = require('path') const request = require('supertest') const testUtils = { + dateIsValid: dateIsValid, flushTests: flushTests, + getAllVideosListBy: getAllVideosListBy, + getClient: getClient, getFriendsList: getFriendsList, getVideo: getVideo, getVideosList: getVideosList, + getVideosListPagination: getVideosListPagination, + getVideosListSort: getVideosListSort, login: login, loginAndGetAccessToken: loginAndGetAccessToken, makeFriends: makeFriends, @@ -19,13 +25,51 @@ const testUtils = { flushAndRunMultipleServers: flushAndRunMultipleServers, runServer: runServer, searchVideo: searchVideo, + searchVideoWithPagination: searchVideoWithPagination, + searchVideoWithSort: searchVideoWithSort, + testImage: testImage, uploadVideo: uploadVideo } // ---------------------- 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(pathUtils.join(__dirname, '../../../bin/clean_test.sh'), callback) + exec('npm run clean:server:test', callback) +} + +function getAllVideosListBy (url, end) { + const path = '/api/v1/videos' + + request(url) + .get(path) + .query({ sort: 'createdDate' }) + .query({ start: 0 }) + .query({ count: 10000 }) + .set('Accept', 'application/json') + .expect(200) + .expect('Content-Type', /json/) + .end(end) +} + +function getClient (url, end) { + const path = '/api/v1/users/client' + + request(url) + .get(path) + .set('Accept', 'application/json') + .expect(200) + .expect('Content-Type', /json/) + .end(end) } function getFriendsList (url, end) { @@ -55,16 +99,42 @@ function getVideosList (url, end) { request(url) .get(path) + .query({ sort: 'name' }) .set('Accept', 'application/json') .expect(200) .expect('Content-Type', /json/) .end(end) } -function login (url, client, user, expected_status, end) { +function getVideosListPagination (url, start, count, end) { + const path = '/api/v1/videos' + + request(url) + .get(path) + .query({ start: start }) + .query({ count: count }) + .set('Accept', 'application/json') + .expect(200) + .expect('Content-Type', /json/) + .end(end) +} + +function getVideosListSort (url, sort, end) { + const path = '/api/v1/videos' + + request(url) + .get(path) + .query({ sort: sort }) + .set('Accept', 'application/json') + .expect(200) + .expect('Content-Type', /json/) + .end(end) +} + +function login (url, client, user, expectedStatus, end) { if (!end) { - end = expected_status - expected_status = 200 + end = expectedStatus + expectedStatus = 200 } const path = '/api/v1/users/token' @@ -83,7 +153,7 @@ function login (url, client, user, expected_status, end) { .post(path) .type('form') .send(body) - .expect(expected_status) + .expect(expectedStatus) .end(end) } @@ -95,10 +165,10 @@ function loginAndGetAccessToken (server, callback) { }) } -function makeFriends (url, expected_status, callback) { +function makeFriends (url, accessToken, expectedStatus, callback) { if (!callback) { - callback = expected_status - expected_status = 204 + callback = expectedStatus + expectedStatus = 204 } const path = '/api/v1/pods/makefriends' @@ -107,7 +177,8 @@ function makeFriends (url, expected_status, callback) { request(url) .get(path) .set('Accept', 'application/json') - .expect(expected_status) + .set('Authorization', 'Bearer ' + accessToken) + .expect(expectedStatus) .end(function (err, res) { if (err) throw err @@ -116,14 +187,20 @@ function makeFriends (url, expected_status, callback) { }) } -function quitFriends (url, callback) { +function quitFriends (url, accessToken, expectedStatus, callback) { + if (!callback) { + callback = expectedStatus + expectedStatus = 204 + } + const path = '/api/v1/pods/quitfriends' // The first pod make friend with the third request(url) .get(path) .set('Accept', 'application/json') - .expect(204) + .set('Authorization', 'Bearer ' + accessToken) + .expect(expectedStatus) .end(function (err, res) { if (err) throw err @@ -132,10 +209,10 @@ function quitFriends (url, callback) { }) } -function removeVideo (url, token, id, expected_status, end) { +function removeVideo (url, token, id, expectedStatus, end) { if (!end) { - end = expected_status - expected_status = 204 + end = expectedStatus + expectedStatus = 204 } const path = '/api/v1/videos' @@ -144,11 +221,11 @@ function removeVideo (url, token, id, expected_status, end) { .delete(path + '/' + id) .set('Accept', 'application/json') .set('Authorization', 'Bearer ' + token) - .expect(expected_status) + .expect(expectedStatus) .end(end) } -function flushAndRunMultipleServers (total_servers, serversRun) { +function flushAndRunMultipleServers (totalServers, serversRun) { let apps = [] let urls = [] let i = 0 @@ -157,13 +234,13 @@ function flushAndRunMultipleServers (total_servers, serversRun) { apps[number - 1] = app urls[number - 1] = url i++ - if (i === total_servers) { + if (i === totalServers) { serversRun(apps, urls) } } flushTests(function () { - for (let j = 1; j <= total_servers; j++) { + for (let j = 1; j <= totalServers; j++) { // For the virtual buffer setTimeout(function () { runServer(j, function (app, url) { @@ -189,7 +266,7 @@ function runServer (number, callback) { } // These actions are async so we need to be sure that they have both been done - const server_run_string = { + const serverRunString = { 'Connected to mongodb': false, 'Server listening on port': false } @@ -213,7 +290,7 @@ function runServer (number, callback) { server.app = fork(pathUtils.join(__dirname, '../../../server.js'), [], options) server.app.stdout.on('data', function onStdout (data) { - let dont_continue = false + let dontContinue = false // Capture things if we want to for (const key of Object.keys(regexps)) { @@ -228,49 +305,115 @@ function runServer (number, callback) { } // Check if all required sentences are here - for (const key of Object.keys(server_run_string)) { - if (data.toString().indexOf(key) !== -1) server_run_string[key] = true - if (server_run_string[key] === false) dont_continue = true + for (const key of Object.keys(serverRunString)) { + if (data.toString().indexOf(key) !== -1) serverRunString[key] = true + if (serverRunString[key] === false) dontContinue = true } // If no, there is maybe one thing not already initialized (mongodb...) - if (dont_continue === true) return + if (dontContinue === true) return server.app.stdout.removeListener('data', onStdout) callback(server) }) } -function searchVideo (url, search, end) { +function searchVideo (url, search, field, end) { + if (!end) { + end = field + field = null + } + + const path = '/api/v1/videos' + const req = request(url) + .get(path + '/search/' + search) + .set('Accept', 'application/json') + + if (field) req.query({ field: field }) + req.expect(200) + .expect('Content-Type', /json/) + .end(end) +} + +function searchVideoWithPagination (url, search, field, start, count, end) { const path = '/api/v1/videos' request(url) .get(path + '/search/' + search) + .query({ start: start }) + .query({ count: count }) + .query({ field: field }) .set('Accept', 'application/json') .expect(200) .expect('Content-Type', /json/) .end(end) } -function uploadVideo (url, access_token, name, description, fixture, special_status, end) { - if (!end) { - end = special_status - special_status = 204 - } - +function searchVideoWithSort (url, search, sort, end) { const path = '/api/v1/videos' request(url) - .post(path) + .get(path + '/search/' + search) + .query({ sort: sort }) .set('Accept', 'application/json') - .set('Authorization', 'Bearer ' + access_token) - .field('name', name) - .field('description', description) - .attach('videofile', pathUtils.join(__dirname, 'fixtures', fixture)) - .expect(special_status) + .expect(200) + .expect('Content-Type', /json/) .end(end) } +function testImage (url, videoName, imagePath, callback) { + // Don't test images if the node env is not set + // Because we need a special ffmpeg version for this test + if (process.env.NODE_TEST_IMAGE) { + request(url) + .get(imagePath) + .expect(200) + .end(function (err, res) { + if (err) return callback(err) + + fs.readFile(pathUtils.join(__dirname, 'fixtures', videoName + '.jpg'), function (err, data) { + if (err) return callback(err) + + callback(null, data.equals(res.body)) + }) + }) + } else { + console.log('Do not test images. Enable it by setting NODE_TEST_IMAGE env variable.') + callback(null, true) + } +} + +function uploadVideo (url, accessToken, name, description, tags, fixture, specialStatus, end) { + if (!end) { + end = specialStatus + specialStatus = 204 + } + + const path = '/api/v1/videos' + + const req = request(url) + .post(path) + .set('Accept', 'application/json') + .set('Authorization', 'Bearer ' + accessToken) + .field('name', name) + .field('description', description) + + for (let i = 0; i < tags.length; i++) { + req.field('tags[' + i + ']', tags[i]) + } + + let filepath = '' + if (pathUtils.isAbsolute(fixture)) { + filepath = fixture + } else { + filepath = pathUtils.join(__dirname, 'fixtures', fixture) + } + + req.attach('videofile', filepath) + .expect(specialStatus) + .end(end) +} + // --------------------------------------------------------------------------- module.exports = testUtils