From 64a662ce50c1a05bdb3b5c7ec9277aed2be0e40d Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 1 Nov 2016 17:33:19 +0300 Subject: [PATCH] some upload tests --- test/helpers/index.js | 29 ++++++++- test/uploads.js | 137 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 test/uploads.js diff --git a/test/helpers/index.js b/test/helpers/index.js index a519771839..a04a6a855c 100644 --- a/test/helpers/index.js +++ b/test/helpers/index.js @@ -2,8 +2,10 @@ var request = require('request'); var nconf = require('nconf'); +var fs = require('fs'); var myXhr = require('../mocks/newXhr'); +var utils = require('../../public/src/utils'); var helpers = module.exports; @@ -45,7 +47,7 @@ helpers.loginUser = function (username, password, callback) { var io = socketClient.connect(nconf.get('url'), {forceNew: true, multiplex: false}); io.on('connect', function () { - callback(null, jar, io); + callback(null, jar, io, body.csrf_token); }); io.on('error', function (err) { @@ -86,3 +88,28 @@ helpers.initSocketIO = function (callback) { }); }); }; + + +helpers.uploadFile = function (uploadEndPoint, filePath, body, jar, csrf_token, callback) { + var formData = { + files: [ + fs.createReadStream(filePath), + fs.createReadStream(filePath) // see https://github.com/request/request/issues/2445 + ] + }; + formData = utils.merge(formData, body); + request.post({ + url: uploadEndPoint, + formData: formData, + json: true, + jar: jar, + headers: { + 'x-csrf-token': csrf_token + } + }, function (err, res, body) { + if (err) { + return callback(err); + } + callback(err, res, body); + }); +}; \ No newline at end of file diff --git a/test/uploads.js b/test/uploads.js new file mode 100644 index 0000000000..85089fed4b --- /dev/null +++ b/test/uploads.js @@ -0,0 +1,137 @@ +'use strict'; + +var async = require('async'); +var assert = require('assert'); +var nconf = require('nconf'); +var path = require('path'); + +var db = require('./mocks/databasemock'); +var categories = require('../src/categories'); +var topics = require('../src/topics'); +var user = require('../src/user'); +var groups = require('../src/groups'); +var privileges = require('../src/privileges'); +var meta = require('../src/meta'); +var helpers = require('./helpers'); + + +describe('Upload Controllers', function () { + + var tid; + var cid; + var pid; + var adminUid; + var regularUid; + + before(function (done) { + async.series({ + category: function (next) { + categories.create({ + name: 'Test Category', + description: 'Test category created by testing script' + }, next); + }, + adminUid: function (next) { + user.create({username: 'admin', password: 'barbar'}, next); + }, + regularUid: function (next) { + user.create({username: 'regular', password: 'zugzug'}, next); + } + }, function (err, results) { + if (err) { + return done(err); + } + adminUid = results.adminUid; + regularUid = results.regularUid; + cid = results.category.cid; + + topics.post({uid: adminUid, title: 'test topic title', content: 'test topic content', cid: results.category.cid}, function (err, result) { + tid = result.topicData.tid; + pid = result.postData.pid; + done(err); + }); + }); + }); + + describe('regular user uploads', function () { + var jar; + var csrf_token; + + before(function (done) { + helpers.loginUser('regular', 'zugzug', function (err, _jar, io, _csrf_token) { + assert.ifError(err); + jar = _jar; + csrf_token = _csrf_token; + privileges.categories.give(['upload:post:file'], cid, 'registered-users', done); + }); + }); + + it('should upload a profile picture', function (done) { + helpers.uploadFile(nconf.get('url') + '/api/user/regular/uploadpicture', path.join(__dirname, '../public/logo.png'), {}, jar, csrf_token, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(Array.isArray(body)); + assert.equal(body.length, 1); + assert.equal(body[0].url, '/uploads/profile/' + regularUid + '-profileimg.png'); + done(); + }); + }); + + it('should upload an image to a post', function (done) { + helpers.uploadFile(nconf.get('url') + '/api/post/upload', path.join(__dirname, '../public/logo.png'), {cid: cid}, jar, csrf_token, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(Array.isArray(body)); + assert(body[0].path); + assert(body[0].url); + done(); + }); + }); + + + it('should upload a file to a post', function (done) { + meta.config.allowFileUploads = 1; + helpers.uploadFile(nconf.get('url') + '/api/post/upload', path.join(__dirname, '../public/503.html'), {cid: cid}, jar, csrf_token, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(Array.isArray(body)); + assert(body[0].path); + assert(body[0].url); + done(); + }); + }); + + }); + + + describe('admin uploads', function () { + var jar; + var csrf_token; + + before(function (done) { + helpers.loginUser('admin', 'barbar', function (err, _jar, io, _csrf_token) { + assert.ifError(err); + jar = _jar; + csrf_token = _csrf_token; + groups.join('administrators', adminUid, done); + }); + }); + + it('should upload site logo', function (done) { + helpers.uploadFile(nconf.get('url') + '/api/admin/uploadlogo', path.join(__dirname, '../public/logo.png'), {}, jar, csrf_token, function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(Array.isArray(body)); + assert.equal(body[0].url, '/uploads/system/site-logo.png'); + done(); + }); + }); + }); + + + + + after(function (done) { + db.emptydb(done); + }); +});