UNPKG

docparse-upload-process

Version:

process upload api request for the docparse server

188 lines (171 loc) 6.34 kB
var assert = require('should'); var fs = require('fs'); var path = require('path'); var mongoose = require('mongoose'); var Upload = require('docparse-upload'); var Supplier = require('docparse-supplier'); var should = require('should'); var ce = require('cloneextend'); var createUser = require('./createUser'); var createSupplier = require('./createSupplier'); var create = require('../index').create; var inspect = require('eyespect').inspector(); var configFilePath = path.join(__dirname, 'local_config.json'); var configFileExists = fs.existsSync(configFilePath); var config = require('docparse-config')(configFilePath); var logger = require('docparse-logger')(config); var pathhash = require('pathhash'); 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'); describe('create test', function(done) { var user; var filePath; var filename = 'big.pdf'; var data = { supplierCode: 'FGS', filename: filename }; var hash; var userData1 = { username: 'api_test_user', password:'123455', email: 'api_tester@example.com' }; var userData2 = { username: 'api_test_user2', password:'22222', email: 'api_tester2@example.com', remove: false }; var user1, user2; before(function (done) { mongoose.connect('mongodb://localhost/test22'); Upload.remove({}, function (err, reply) { should.not.exist(err, 'error removing existing bills: ' + err); createUser(userData1, function (err, user1Reply) { should.not.exist(err, 'error creating test user: ' + err); should.exist(user1Reply); data.userID = user1Reply._id.toString(); data.logger = logger; user1 = user1Reply; createUser(userData2, function (err, user2Reply) { should.not.exist(err, 'error creating test user: ' + err); should.exist(user2Reply); user2 = user2Reply; createSupplier(function (err, supplier) { filePath = path.join(__dirname, 'data', filename); var exists = fs.existsSync(filePath); assert.ok(exists, 'test file not found at path: ' + filePath); data.filePath = filePath; pathhash(filePath, function (err, reply) { should.not.exist(err); should.exist(reply); hash = reply; done(); }); }); }); }); }); }); it('should reject create requests missing a supplierCode field', function(done) { var testData = ce.clone(data); testData.config = config; delete testData.supplierCode; create(testData, function (err, reply) { err.should.match(/key does not exist in data: supplierCode/); should.exist(err, 'create should return error'); done(); }); }); it('should reject create requests missing a userID field', function(done) { var testData = ce.clone(data); testData.config = config; delete testData.userID; create(testData, function (err, reply) { err.should.match(/key does not exist in data: userID/); should.exist(err, 'create should return error'); done(); }); }); it('should reject create requests missing a filePath', function(done) { var testData = ce.clone(data); testData.config = config; delete testData.filePath; create(testData, function (err, reply) { err.should.match(/key does not exist in data: filePath/); should.exist(err, 'create should return error'); done(); }); }); it('should reject create requests missing a filename', function(done) { var testData = ce.clone(data); testData.config = config; delete testData.filename; create(testData, function (err, reply) { err.should.match(/key does not exist in data: filename/); should.exist(err, 'create should return error'); done(); }); }); it('should reject create requests where file cannot be found on disk', function(done) { var testData = ce.clone(data); testData.config = config; testData.filePath = 'null'; create(testData, function (err, reply) { err.should.match(/file not found at path:/); should.exist(err, 'create should return error'); done(); }); }); it('should process valid create requests correctly', function(done) { this.timeout(40*1000); this.slow(20*1000); var testData = ce.clone(data); testData.config = config; Upload.remove({}, function (err) { should.not.exist(err); create(testData, function (err, reply) { should.not.exist(err, 'error in create request: ' + create); should.exist(reply, 'no upload returned from in create request'); reply.should.have.property('hash'); reply.hash.should.eql(hash); hash = reply.hash; done(); }); }); }); it('should process duplicate create requests correctly', function(done) { this.timeout(40*1000); this.slow(20*1000); var testData = ce.clone(data); testData.config = config; testData.userID = user2._id.toString(); Upload.findOne({hash: hash}, function (err, findReply) { should.exist(findReply,'uploadReply'); create(testData, function (err, reply) { should.not.exist(err, 'error in create request: ' + err); should.exist(reply, 'no upload returned from in create request'); reply.should.have.property('hash'); reply.hash.should.eql(hash); var details = reply.toObject().user_details; details.length.should.eql(2); // make sure the database agrees Upload.find({}, function (err, uploadReply) { should.not.exist(err); should.exist(uploadReply); uploadReply.length.should.eql(1); var upload = uploadReply[0].toObject(); upload.should.have.property('user_details'); upload.should.have.property('hash'); var details = upload.user_details; details.length.should.eql(2, 'there should be 2 user detail records'); done(); }); }); }); }); // cleanup after(function(done) { mongoose.disconnect(done); }); });