UNPKG

docparse-upload-process

Version:

process upload api request for the docparse server

184 lines (168 loc) 6.11 kB
var assert = require('should'); var fs = require('fs'); var path = require('path'); var mongoose = require('mongoose'); var Upload = require('docparse-upload'); var User = require('docparse-user'); var Supplier = require('docparse-supplier'); var should = require('should'); var ce = require('cloneextend'); var createUser = require('docparse-create-user') var createSupplier = require('docparse-create-supplier'); var createUpload = require('docparse-create-upload'); var create = require('../index').create; var remove = require('../index').remove; var inspect = require('eyespect').inspector(); var configFilePath = path.join(__dirname, 'local_config.json'); var configFileExists = fs.existsSync(configFilePath); assert.ok(configFileExists, 'config file not found at path, note that you must supply this file manually to run the test suite. It is not included with the public module since it contains sensitive user and passwords for the remote pdfer service'); var config = require('docparse-config')(configFilePath); var pathhash = require('pathhash'); describe('remove test', function(done) { var filePath = path.join(__dirname, 'data/big.pdf'); assert.ok(fs.existsSync(filePath), 'test file not found at path: ' + filePath); var user; var data = { configFilePath: configFilePath, supplier_code: 'FGS', files: { upload: {} } } var hash; var createData = { filePath: filePath, supplierCode: 'FGS', config: config, }; before(function (done) { this.timeout(20*1000); this.slow(10*1000); mongoose.connect('mongodb://localhost/test', function (err, reply) { Upload.remove({}, function (err, reply) { should.not.exist(err, 'error removing existing bills: ' + err); createUser(function (err, userReply) { should.not.exist(err, 'error creating test user: ' + err); data.userID = userReply._id.toString(); createData.userID = data.userID; createSupplier(function (err, reply) { data.files.upload.path = filePath done(); }); }); }); }); }); beforeEach(function (done) { Upload.remove({}, function (err, reply) { createUpload(createData, function (err, reply) { should.not.exist(err); should.exist(reply); hash = reply.hash; data.hash = hash; Upload.findOne({hash: reply.hash}, function (err, reply) { should.not.exist(err); should.exist(reply, 'upload not found'); reply.users.push(data.userID); reply.user_details = {}; reply.user_details[data.userID] = {} reply.save(done); }); }); }); }); it('should reject remove requests missing a hash field', function(done) { var testData = ce.clone(data); delete testData.hash; remove(testData, function (err, reply) { should.exist(err, 'create should return error'); err.should.match(/key does not exist in data: hash/); done(); }); }); it('should reject remove requests with invalid hash field', function(done) { var testData = ce.clone(data); testData.hash = 'abc'; remove(testData, function (err, reply) { err.should.match(/upload not found with hash:/) should.exist(err, 'create should return error'); done(); }); }); it('should reject remove requests missing a userID field', function(done) { var testData = ce.clone(data); delete testData.userID; remove(testData, function (err, reply) { should.exist(err, 'create should return error'); err.should.match(/key does not exist in data: userID/); done(); }); }); it('should reject remove requests with invalid userID field', function(done) { var testData = ce.clone(data); testData.userID = 'dummy userID value'; Upload.findOne({hash: testData.hash}, function (err, reply) { should.not.exist(err); should.exist(reply); remove(testData, function (err, reply) { var pattern = /user not found with id/; err.should.match(pattern, 'wrong error message'); should.exist(err, 'create should return error'); done(); }); }); }); it('should reject remove requests where user does not own the upload', function(done) { this.timeout(2*1000); this.slow(1000); var userData = { username: 'username2', password: 'password2', email: 'test2@example.com', remove: false } createUser(userData, function (err, user) { var testData = ce.clone(data); testData.userID = user._id; remove(testData, function (err, reply) { err.should.match(/you are not permitted to remove this upload/) should.exist(err, 'remove should return error'); done(); }); }); }); it('should proces valid remove requests correctly', function(done) { this.timeout(2*1000); this.slow(1000); var testData = ce.clone(data); var userID = testData.userID; Upload.findOne({hash: data.hash}, function (err, reply) { should.not.exist(err); should.exist(reply, 'upload should exist in database before we try to remove it'); var userIndex = reply.users.indexOf(userID); userIndex.should.be.above(-1); User.findById(userID, function (err, user) { should.not.exist(err); should.exist(user, 'user should exist in database'); // remove it! remove(testData, function (err) { should.not.exist(err, 'remove request should not return error: ' + err); // make sure the upload is actually gone Upload.findOne({hash: data.hash}, function (err, reply) { should.not.exist(err); should.exist(reply, 'upload should still be in database'); var userIndex = reply.users.indexOf(userID); userIndex.should.eql(-1); done(); }); }); }); }); }); // cleanup after(function(done) { Upload.remove({}, function(err, reply) { mongoose.disconnect(done); }); }); });