'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,
getFriendsList: getFriendsList,
getVideo: getVideo,
getVideosList: getVideosList,
+ getVideosListPagination: getVideosListPagination,
+ getVideosListSort: getVideosListSort,
login: login,
loginAndGetAccessToken: loginAndGetAccessToken,
makeFriends: makeFriends,
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 getFriendsList (url, end) {
request(url)
.get(path)
+ .query({ sort: 'name' })
+ .set('Accept', 'application/json')
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(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 login (url, client, user, expected_status, 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'
.post(path)
.type('form')
.send(body)
- .expect(expected_status)
+ .expect(expectedStatus)
.end(end)
}
})
}
-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'
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
})
}
-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
})
}
-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'
.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
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) {
}
// 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
}
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)) {
}
// 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) {
+function searchVideoWithSort (url, search, sort, end) {
+ const path = '/api/v1/videos'
+
+ request(url)
+ .get(path + '/search/' + search)
+ .query({ sort: sort })
+ .set('Accept', 'application/json')
+ .expect(200)
+ .expect('Content-Type', /json/)
+ .end(end)
+}
+
+function testImage (url, videoName, imagePath, callback) {
+ 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))
+ })
+ })
+}
+
+function uploadVideo (url, accessToken, name, description, fixture, specialStatus, end) {
if (!end) {
- end = special_status
- special_status = 204
+ end = specialStatus
+ specialStatus = 204
}
const path = '/api/v1/videos'
request(url)
.post(path)
.set('Accept', 'application/json')
- .set('Authorization', 'Bearer ' + access_token)
+ .set('Authorization', 'Bearer ' + accessToken)
.field('name', name)
.field('description', description)
.attach('videofile', pathUtils.join(__dirname, 'fixtures', fixture))
- .expect(special_status)
+ .expect(specialStatus)
.end(end)
}