done purchases remove, ocr scan, read image
This commit is contained in:
		
							
								
								
									
										78
									
								
								express-server/node_modules/express-fileupload/test/fileFactory.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								express-server/node_modules/express-fileupload/test/fileFactory.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const assert = require('assert');
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const md5 = require('md5');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const fileFactory = require('../lib').fileFactory;
 | 
			
		||||
const server = require('./server');
 | 
			
		||||
 | 
			
		||||
const mockBuffer = fs.readFileSync(path.join(server.fileDir, 'basketball.png'));
 | 
			
		||||
 | 
			
		||||
describe('Test of the fileFactory factory', function() {
 | 
			
		||||
  beforeEach(function() {
 | 
			
		||||
    server.clearUploadsDir();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('return a file object', function() {
 | 
			
		||||
    assert.ok(fileFactory({
 | 
			
		||||
      name: 'basketball.png',
 | 
			
		||||
      buffer: mockBuffer
 | 
			
		||||
    }));
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('File object behavior', function() {
 | 
			
		||||
    const file = fileFactory({
 | 
			
		||||
      name: 'basketball.png',
 | 
			
		||||
      buffer: mockBuffer
 | 
			
		||||
    });
 | 
			
		||||
    it('move the file to the specified folder', function(done) {
 | 
			
		||||
      file.mv(path.join(server.uploadDir, 'basketball.png'), function(err) {
 | 
			
		||||
        assert.ifError(err);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('reject the mv if the destination does not exists', function(done) {
 | 
			
		||||
      file.mv(path.join(server.uploadDir, 'unknown', 'basketball.png'), function(err) {
 | 
			
		||||
        assert.ok(err);
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Properties', function() {
 | 
			
		||||
    it('contains the name property', function() {
 | 
			
		||||
      assert.equal(fileFactory({
 | 
			
		||||
        name: 'basketball.png',
 | 
			
		||||
        buffer: mockBuffer
 | 
			
		||||
      }).name, 'basketball.png');
 | 
			
		||||
    });
 | 
			
		||||
    it('contains the data property', function() {
 | 
			
		||||
      assert.ok(fileFactory({
 | 
			
		||||
        name: 'basketball.png',
 | 
			
		||||
        buffer: mockBuffer
 | 
			
		||||
      }).data);
 | 
			
		||||
    });
 | 
			
		||||
    it('contains the encoding property', function() {
 | 
			
		||||
      assert.equal(fileFactory({
 | 
			
		||||
        name: 'basketball.png',
 | 
			
		||||
        buffer: mockBuffer,
 | 
			
		||||
        encoding: 'utf-8'
 | 
			
		||||
      }).encoding, 'utf-8');
 | 
			
		||||
    });
 | 
			
		||||
    it('contains the mimetype property', function() {
 | 
			
		||||
      assert.equal(fileFactory({
 | 
			
		||||
        name: 'basketball.png',
 | 
			
		||||
        buffer: mockBuffer,
 | 
			
		||||
        mimetype: 'image/png'
 | 
			
		||||
      }).mimetype, 'image/png');
 | 
			
		||||
    });
 | 
			
		||||
    it('contains the md5 property', function() {
 | 
			
		||||
      const mockMd5 = md5(mockBuffer);
 | 
			
		||||
      assert.equal(fileFactory({
 | 
			
		||||
        name: 'basketball.png',
 | 
			
		||||
        buffer: mockBuffer
 | 
			
		||||
      }).md5(), mockMd5);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										66
									
								
								express-server/node_modules/express-fileupload/test/fileLimitUploads.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								express-server/node_modules/express-fileupload/test/fileLimitUploads.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const request = require('supertest');
 | 
			
		||||
const assert = require('assert');
 | 
			
		||||
const server = require('./server');
 | 
			
		||||
const clearUploadsDir = server.clearUploadsDir;
 | 
			
		||||
const fileDir = server.fileDir;
 | 
			
		||||
 | 
			
		||||
describe('Test Single File Upload With File Size Limit', function() {
 | 
			
		||||
  let app;
 | 
			
		||||
 | 
			
		||||
  beforeEach(function() {
 | 
			
		||||
    clearUploadsDir();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('abort connection on limit reached', function() {
 | 
			
		||||
    before(function() {
 | 
			
		||||
      app = server.setup({
 | 
			
		||||
        limits: {fileSize: 200 * 1024}, // set 200kb upload limit
 | 
			
		||||
        abortOnLimit: true
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`upload 'basketball.png' (~154kb) with 200kb size limit`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, 'basketball.png');
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single/truncated')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(200)
 | 
			
		||||
        .end(done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`fail when uploading 'car.png' (~269kb) with 200kb size limit`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, 'car.png');
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single/truncated')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(413)
 | 
			
		||||
        .end(done);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('pass truncated file to the next handler', function() {
 | 
			
		||||
    before(function() {
 | 
			
		||||
      app = server.setup({
 | 
			
		||||
        limits: {fileSize: 200 * 1024} // set 200kb upload limit
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`fail when uploading 'car.png' (~269kb) with 200kb size limit`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, 'car.png');
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single/truncated')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(400)
 | 
			
		||||
        .end(function(err, res) {
 | 
			
		||||
          assert.ok(res.error.text === 'File too big');
 | 
			
		||||
          done();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/basket.ball.bp
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/basket.ball.bp
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 151 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/basketball.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/basketball.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 151 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/car.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/car.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 263 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/my$Invalid#fileName.png123
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/my$Invalid#fileName.png123
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 263 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/tree.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								express-server/node_modules/express-fileupload/test/files/tree.png
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 265 KiB  | 
							
								
								
									
										85
									
								
								express-server/node_modules/express-fileupload/test/multipartFields.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								express-server/node_modules/express-fileupload/test/multipartFields.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const request = require('supertest');
 | 
			
		||||
const server = require('./server');
 | 
			
		||||
const app = server.setup();
 | 
			
		||||
 | 
			
		||||
let mockUser = {
 | 
			
		||||
  firstName: 'Joe',
 | 
			
		||||
  lastName: 'Schmo',
 | 
			
		||||
  email: 'joe@mailinator.com'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
let mockCars = [
 | 
			
		||||
  'rsx',
 | 
			
		||||
  'tsx',
 | 
			
		||||
  'civic',
 | 
			
		||||
  'integra'
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
describe('Test Multipart Form Single Field Submissions', function() {
 | 
			
		||||
  it('submit multipart user data with POST', function(done) {
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/fields/user')
 | 
			
		||||
      .field('firstName', mockUser.firstName)
 | 
			
		||||
      .field('lastName', mockUser.lastName)
 | 
			
		||||
      .field('email', mockUser.email)
 | 
			
		||||
      .expect('Content-Type', /json/)
 | 
			
		||||
      .expect(200, {
 | 
			
		||||
        firstName: mockUser.firstName,
 | 
			
		||||
        lastName: mockUser.lastName,
 | 
			
		||||
        email: mockUser.email
 | 
			
		||||
      }, done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('submit multipart user data with PUT', function(done) {
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/fields/user')
 | 
			
		||||
      .field('firstName', mockUser.firstName)
 | 
			
		||||
      .field('lastName', mockUser.lastName)
 | 
			
		||||
      .field('email', mockUser.email)
 | 
			
		||||
      .expect('Content-Type', /json/)
 | 
			
		||||
      .expect(200, {
 | 
			
		||||
        firstName: mockUser.firstName,
 | 
			
		||||
        lastName: mockUser.lastName,
 | 
			
		||||
        email: mockUser.email
 | 
			
		||||
      }, done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fail when user data submitted without multipart', function(done) {
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/fields/user')
 | 
			
		||||
      .send(mockUser)
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fail when user data not submitted', function(done) {
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/fields/user')
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test Multipart Form Array Field Submissions', function() {
 | 
			
		||||
  it('submit array of data with POST', function(done) {
 | 
			
		||||
    let req = request(app).post('/fields/array');
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < mockCars.length; i++) {
 | 
			
		||||
      req.field('testField', mockCars[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    req
 | 
			
		||||
      .expect(200)
 | 
			
		||||
      .end(function(err, res) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return done(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let responseMatchesRequest = res.body.join(',') === mockCars.join(',');
 | 
			
		||||
 | 
			
		||||
        done(responseMatchesRequest ? null : 'Data was returned as expected.');
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										294
									
								
								express-server/node_modules/express-fileupload/test/multipartUploads.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								express-server/node_modules/express-fileupload/test/multipartUploads.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,294 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const request = require('supertest');
 | 
			
		||||
const server = require('./server');
 | 
			
		||||
const app = server.setup();
 | 
			
		||||
const clearUploadsDir = server.clearUploadsDir;
 | 
			
		||||
const fileDir = server.fileDir;
 | 
			
		||||
const uploadDir = server.uploadDir;
 | 
			
		||||
 | 
			
		||||
const mockFiles = [
 | 
			
		||||
  'car.png',
 | 
			
		||||
  'tree.png',
 | 
			
		||||
  'basketball.png'
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
let mockUser = {
 | 
			
		||||
  firstName: 'Joe',
 | 
			
		||||
  lastName: 'Schmo',
 | 
			
		||||
  email: 'joe@mailinator.com'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
describe('Test Directory Cleaning Method', function() {
 | 
			
		||||
  it('emptied "uploads" directory', function(done) {
 | 
			
		||||
    clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
    let filesFound = fs.readdirSync(uploadDir).length;
 | 
			
		||||
 | 
			
		||||
    done(filesFound ? `Directory not empty. Found ${filesFound} files.` : null);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test Single File Upload', function() {
 | 
			
		||||
  for (let i = 0; i < mockFiles.length; i++) {
 | 
			
		||||
    let fileName = mockFiles[i];
 | 
			
		||||
 | 
			
		||||
    it(`upload ${fileName} with POST`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, fileName);
 | 
			
		||||
      let uploadedFilePath = path.join(uploadDir, fileName);
 | 
			
		||||
 | 
			
		||||
      clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(200)
 | 
			
		||||
        .end(function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(uploadedFilePath, done);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`upload ${fileName} with PUT`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, fileName);
 | 
			
		||||
      let uploadedFilePath = path.join(uploadDir, fileName);
 | 
			
		||||
 | 
			
		||||
      clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(200)
 | 
			
		||||
        .end(function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(uploadedFilePath, done);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  it('fail when no files were attached', function(done) {
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/upload/single')
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fail when using GET', function(done) {
 | 
			
		||||
    let filePath = path.join(fileDir, mockFiles[0]);
 | 
			
		||||
 | 
			
		||||
    request(app)
 | 
			
		||||
      .get('/upload/single')
 | 
			
		||||
      .attach('testFile', filePath)
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fail when using HEAD', function(done) {
 | 
			
		||||
    let filePath = path.join(fileDir, mockFiles[0]);
 | 
			
		||||
 | 
			
		||||
    request(app)
 | 
			
		||||
      .head('/upload/single')
 | 
			
		||||
      .attach('testFile', filePath)
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test Single File Upload w/ .mv() Promise', function() {
 | 
			
		||||
  for (let i = 0; i < mockFiles.length; i++) {
 | 
			
		||||
    let fileName = mockFiles[i];
 | 
			
		||||
 | 
			
		||||
    it(`upload ${fileName} with POST w/ .mv() Promise`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, fileName);
 | 
			
		||||
      let uploadedFilePath = path.join(uploadDir, fileName);
 | 
			
		||||
 | 
			
		||||
      clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single/promise')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(200)
 | 
			
		||||
        .end(function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(uploadedFilePath, done);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`upload ${fileName} with PUT w/ .mv() Promise`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, fileName);
 | 
			
		||||
      let uploadedFilePath = path.join(uploadDir, fileName);
 | 
			
		||||
 | 
			
		||||
      clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single/promise')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .expect(200)
 | 
			
		||||
        .end(function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(uploadedFilePath, done);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  it('fail when no files were attached', function(done) {
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/upload/single')
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fail when using GET', function(done) {
 | 
			
		||||
    let filePath = path.join(fileDir, mockFiles[0]);
 | 
			
		||||
 | 
			
		||||
    request(app)
 | 
			
		||||
      .get('/upload/single')
 | 
			
		||||
      .attach('testFile', filePath)
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fail when using HEAD', function(done) {
 | 
			
		||||
    let filePath = path.join(fileDir, mockFiles[0]);
 | 
			
		||||
 | 
			
		||||
    request(app)
 | 
			
		||||
      .head('/upload/single')
 | 
			
		||||
      .attach('testFile', filePath)
 | 
			
		||||
      .expect(400)
 | 
			
		||||
      .end(done);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test Multi-File Upload', function() {
 | 
			
		||||
  it('upload multiple files with POST', function(done) {
 | 
			
		||||
    let upload1 = path.join(fileDir, mockFiles[0]);
 | 
			
		||||
    let upload2 = path.join(fileDir, mockFiles[1]);
 | 
			
		||||
    let upload3 = path.join(fileDir, mockFiles[2]);
 | 
			
		||||
 | 
			
		||||
    clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
    request(app)
 | 
			
		||||
      .post('/upload/multiple')
 | 
			
		||||
      .attach('testFile1', upload1)
 | 
			
		||||
      .attach('testFile2', upload2)
 | 
			
		||||
      .attach('testFile3', upload3)
 | 
			
		||||
      .expect(200)
 | 
			
		||||
      .end(function(err) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return done(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fs.stat(upload1, function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(upload2, function(err) {
 | 
			
		||||
            if (err) {
 | 
			
		||||
              return done(err);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            fs.stat(upload3, done);
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test File Array Upload', function() {
 | 
			
		||||
  it('upload array of files with POST', function(done) {
 | 
			
		||||
    let req = request(app).post('/upload/array');
 | 
			
		||||
 | 
			
		||||
    clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < mockFiles.length; i++) {
 | 
			
		||||
      req.attach('testFiles', path.join(fileDir, mockFiles[i]));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    req
 | 
			
		||||
      .expect(200)
 | 
			
		||||
      .end(function(err) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return done(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < mockFiles.length; i++) {
 | 
			
		||||
          fs.statSync(path.join(uploadDir, mockFiles[i]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        done();
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test Upload With Fields', function() {
 | 
			
		||||
  for (let i = 0; i < mockFiles.length; i++) {
 | 
			
		||||
    let fileName = mockFiles[i];
 | 
			
		||||
 | 
			
		||||
    it(`upload ${fileName} and submit fields at the same time with POST`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, fileName);
 | 
			
		||||
      let uploadedFilePath = path.join(uploadDir, fileName);
 | 
			
		||||
 | 
			
		||||
      clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/upload/single/withfields')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .field('firstName', mockUser.firstName)
 | 
			
		||||
        .field('lastName', mockUser.lastName)
 | 
			
		||||
        .field('email', mockUser.email)
 | 
			
		||||
        .expect(200, {
 | 
			
		||||
          firstName: mockUser.firstName,
 | 
			
		||||
          lastName: mockUser.lastName,
 | 
			
		||||
          email: mockUser.email
 | 
			
		||||
        },
 | 
			
		||||
        function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(uploadedFilePath, done);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`upload ${fileName} and submit fields at the same time with PUT`, function(done) {
 | 
			
		||||
      let filePath = path.join(fileDir, fileName);
 | 
			
		||||
      let uploadedFilePath = path.join(uploadDir, fileName);
 | 
			
		||||
 | 
			
		||||
      clearUploadsDir();
 | 
			
		||||
 | 
			
		||||
      request(app)
 | 
			
		||||
        .put('/upload/single/withfields')
 | 
			
		||||
        .attach('testFile', filePath)
 | 
			
		||||
        .field('firstName', mockUser.firstName)
 | 
			
		||||
        .field('lastName', mockUser.lastName)
 | 
			
		||||
        .field('email', mockUser.email)
 | 
			
		||||
        .expect(200, {
 | 
			
		||||
          firstName: mockUser.firstName,
 | 
			
		||||
          lastName: mockUser.lastName,
 | 
			
		||||
          email: mockUser.email
 | 
			
		||||
        },
 | 
			
		||||
        function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return done(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fs.stat(uploadedFilePath, done);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										219
									
								
								express-server/node_modules/express-fileupload/test/options.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								express-server/node_modules/express-fileupload/test/options.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,219 @@
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const request = require('supertest');
 | 
			
		||||
const server = require('./server');
 | 
			
		||||
const clearUploadsDir = server.clearUploadsDir;
 | 
			
		||||
const fileDir = server.fileDir;
 | 
			
		||||
const uploadDir = server.uploadDir;
 | 
			
		||||
 | 
			
		||||
describe('File Upload Options Tests', function() {
 | 
			
		||||
  afterEach(function(done) {
 | 
			
		||||
    clearUploadsDir();
 | 
			
		||||
    done();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Upload the file for testing and verify the expected filename.
 | 
			
		||||
   * @param {object} options The expressFileUpload options.
 | 
			
		||||
   * @param {string} actualFileNameToUpload The name of the file to upload.
 | 
			
		||||
   * @param {string} expectedFileNameOnFileSystem The name of the file after upload.
 | 
			
		||||
   * @param {function} done The mocha continuation function.
 | 
			
		||||
   */
 | 
			
		||||
  function executeFileUploadTestWalk(options,
 | 
			
		||||
    actualFileNameToUpload,
 | 
			
		||||
    expectedFileNameOnFileSystem,
 | 
			
		||||
    done) {
 | 
			
		||||
    request(server.setup(options))
 | 
			
		||||
      .post('/upload/single')
 | 
			
		||||
      .attach('testFile', path.join(fileDir, actualFileNameToUpload))
 | 
			
		||||
      .expect(200)
 | 
			
		||||
      .end(function(err) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return done(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const uploadedFilePath = path.join(uploadDir, expectedFileNameOnFileSystem);
 | 
			
		||||
 | 
			
		||||
        fs.stat(uploadedFilePath, done);
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  describe('Testing [safeFileNames] option to ensure:', function() {
 | 
			
		||||
    it('Does nothing to your filename when disabled.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: false};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Is disabled by default.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = null;
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Strips away all non-alphanumeric characters (excluding hyphens/underscores) when enabled.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Accepts a regex for stripping (decidedly) "invalid" characters from filename.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: /[$#]/g};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileName.png123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Testing [preserveExtension] option to ensure:', function() {
 | 
			
		||||
    it('Does not preserve the extension of your filename when disabled.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: false};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Is disabled by default.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Shortens your extension to the default(3) when enabled, if the extension found is larger.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: true};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng.123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Leaves your extension alone when enabled, if the extension found is <= default(3) length',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: true};
 | 
			
		||||
        const actualFileName = 'car.png';
 | 
			
		||||
        const expectedFileName = 'car.png';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Can be configured for an extension length > default(3).',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: 7};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileName.png123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Can be configured for an extension length < default(3).',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: 2};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng1.23';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Will use the absolute value of your extension length when negative.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: -5};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamep.ng123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Will leave no extension when the extension length == 0.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: 0};
 | 
			
		||||
        const actualFileName = 'car.png';
 | 
			
		||||
        const expectedFileName = 'car';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Will accept numbers as strings, if they can be resolved with parseInt.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: '3'};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng.123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Will be evaluated for truthy-ness if it cannot be parsed as an int.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: 'not-a-#-but-truthy'};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng.123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Will ignore any decimal amount when evaluating for extension length.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: 4.98};
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepn.g123';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it('Only considers the last dotted part as the extension.',
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {safeFileNames: true, preserveExtension: true};
 | 
			
		||||
        const actualFileName = 'basket.ball.bp';
 | 
			
		||||
        const expectedFileName = 'basketball.bp';
 | 
			
		||||
 | 
			
		||||
        executeFileUploadTestWalk(fileUploadOptions, actualFileName, expectedFileName, done);
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Testing [parseNested] option to ensure:', function() {
 | 
			
		||||
    it('When [parseNested] is enabled result are nested', function(done){
 | 
			
		||||
      const app = server.setup({parseNested: true});
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/fields/nested')
 | 
			
		||||
        .field('name', 'John')
 | 
			
		||||
        .field('hobbies[0]', 'Cinema')
 | 
			
		||||
        .field('hobbies[1]', 'Bike')
 | 
			
		||||
        .expect('Content-Type', /json/)
 | 
			
		||||
        .expect(200, {
 | 
			
		||||
          name: 'John',
 | 
			
		||||
          hobbies: ['Cinema', 'Bike']
 | 
			
		||||
        }, done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('When [parseNested] is disabled are flattened', function(done){
 | 
			
		||||
      const app = server.setup({parseNested: false});
 | 
			
		||||
      request(app)
 | 
			
		||||
        .post('/fields/flattened')
 | 
			
		||||
        .field('name', 'John')
 | 
			
		||||
        .field('hobbies[0]', 'Cinema')
 | 
			
		||||
        .field('hobbies[1]', 'Bike')
 | 
			
		||||
        .expect('Content-Type', /json/)
 | 
			
		||||
        .expect(200, {
 | 
			
		||||
          name: 'John',
 | 
			
		||||
          'hobbies[0]': 'Cinema',
 | 
			
		||||
          'hobbies[1]': 'Bike'
 | 
			
		||||
        }, done);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										48
									
								
								express-server/node_modules/express-fileupload/test/processNested.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								express-server/node_modules/express-fileupload/test/processNested.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const assert = require('assert');
 | 
			
		||||
const processNested = require('../lib').processNested;
 | 
			
		||||
 | 
			
		||||
describe('Test Convert Flatten object to Nested object', function() {
 | 
			
		||||
  it('With no nested data', function(){
 | 
			
		||||
    const data = {
 | 
			
		||||
        'firstname': 'John',
 | 
			
		||||
        'lastname': 'Doe',
 | 
			
		||||
        'age': 22
 | 
			
		||||
      },
 | 
			
		||||
      excerpt= { firstname: 'John', lastname: 'Doe', age: 22 },
 | 
			
		||||
      processed = processNested(data);
 | 
			
		||||
 | 
			
		||||
    assert.deepEqual(processed, excerpt);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('With nested data', function(){
 | 
			
		||||
    const data = {
 | 
			
		||||
        'firstname': 'John',
 | 
			
		||||
        'lastname': 'Doe',
 | 
			
		||||
        'age': 22,
 | 
			
		||||
        'hobbies[0]': 'Cinema',
 | 
			
		||||
        'hobbies[1]': 'Bike',
 | 
			
		||||
        'address[line]': '78  Lynch Street',
 | 
			
		||||
        'address[city]': 'Milwaukee',
 | 
			
		||||
        'friends[0][name]': 'Jane',
 | 
			
		||||
        'friends[0][lastname]': 'Doe',
 | 
			
		||||
        'friends[1][name]': 'Joe',
 | 
			
		||||
        'friends[1][lastname]': 'Doe'
 | 
			
		||||
      },
 | 
			
		||||
      excerpt = {
 | 
			
		||||
        firstname: 'John',
 | 
			
		||||
        lastname: 'Doe',
 | 
			
		||||
        age: 22,
 | 
			
		||||
        hobbies: [ 'Cinema', 'Bike' ],
 | 
			
		||||
        address: { line: '78  Lynch Street', city: 'Milwaukee' },
 | 
			
		||||
        friends: [
 | 
			
		||||
          { name: 'Jane', lastname: 'Doe' },
 | 
			
		||||
          { name: 'Joe', lastname: 'Doe' }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      processed = processNested(data);
 | 
			
		||||
 | 
			
		||||
    assert.deepEqual(processed, excerpt);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										284
									
								
								express-server/node_modules/express-fileupload/test/server.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								express-server/node_modules/express-fileupload/test/server.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,284 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const fileDir = path.join(__dirname, 'files');
 | 
			
		||||
const uploadDir = path.join(__dirname, 'uploads');
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const rimraf = require('rimraf');
 | 
			
		||||
 | 
			
		||||
const clearUploadsDir = function() {
 | 
			
		||||
  if (!fs.existsSync(uploadDir)) {
 | 
			
		||||
    fs.mkdirSync(uploadDir);
 | 
			
		||||
  } else {
 | 
			
		||||
    rimraf.sync(uploadDir);
 | 
			
		||||
    fs.mkdirSync(uploadDir);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const setup = function(fileUploadOptions) {
 | 
			
		||||
  const express = require('express');
 | 
			
		||||
  const expressFileupload = require('../lib/index');
 | 
			
		||||
 | 
			
		||||
  const app = express();
 | 
			
		||||
 | 
			
		||||
  fileUploadOptions = fileUploadOptions || {};
 | 
			
		||||
  app.use(expressFileupload(fileUploadOptions));
 | 
			
		||||
 | 
			
		||||
  app.all('/upload/single', function(req, res) {
 | 
			
		||||
    if (!req.files) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let testFile = req.files.testFile;
 | 
			
		||||
    let uploadPath = path.join(uploadDir, testFile.name);
 | 
			
		||||
 | 
			
		||||
    testFile.mv(uploadPath, function(err) {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        console.log('ERR', err); // eslint-disable-line
 | 
			
		||||
        return res.status(500).send(err);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      res.send('File uploaded to ' + uploadPath);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/upload/single/promise', function(req, res) {
 | 
			
		||||
    if (!req.files) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let testFile = req.files.testFile;
 | 
			
		||||
    let uploadPath = path.join(uploadDir, testFile.name);
 | 
			
		||||
 | 
			
		||||
    testFile
 | 
			
		||||
      .mv(uploadPath)
 | 
			
		||||
      .then(() => {
 | 
			
		||||
        res.send('File uploaded to ' + uploadPath);
 | 
			
		||||
      })
 | 
			
		||||
      .catch(err => {
 | 
			
		||||
        res.status(500).send(err);
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/upload/single/withfields', function(req, res) {
 | 
			
		||||
    if (!req.files) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body) {
 | 
			
		||||
      return res.status(400).send('No request body found');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.firstName || !req.body.firstName.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid first name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.lastName || !req.body.lastName.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid last name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.email || !req.body.email.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid email');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let testFile = req.files.testFile;
 | 
			
		||||
    let uploadPath = path.join(uploadDir, testFile.name);
 | 
			
		||||
 | 
			
		||||
    testFile.mv(uploadPath, function(err) {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        return res.status(500).send(err);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      res.json({
 | 
			
		||||
        firstName: req.body.firstName,
 | 
			
		||||
        lastName: req.body.lastName,
 | 
			
		||||
        email: req.body.email
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/upload/single/truncated', function(req, res) {
 | 
			
		||||
    if (!req.files) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (req.files.testFile.truncated) {
 | 
			
		||||
      // status 400 to differentiate from ending the request in the on limit
 | 
			
		||||
      return res.status(400).send(`File too big`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return res.status(200).send('Upload succeed');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/upload/multiple', function(req, res) {
 | 
			
		||||
    if (!req.files) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let testFile1 = req.files.testFile1;
 | 
			
		||||
    let testFile2 = req.files.testFile2;
 | 
			
		||||
    let testFile3 = req.files.testFile3;
 | 
			
		||||
    let uploadPath1 = path.join(uploadDir, testFile1.name);
 | 
			
		||||
    let uploadPath2 = path.join(uploadDir, testFile2.name);
 | 
			
		||||
    let uploadPath3 = path.join(uploadDir, testFile3.name);
 | 
			
		||||
 | 
			
		||||
    if (!testFile1) {
 | 
			
		||||
      return res.status(400).send('testFile1 was not uploaded');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!testFile2) {
 | 
			
		||||
      return res.status(400).send('testFile2 was not uploaded');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!testFile3) {
 | 
			
		||||
      return res.status(400).send('testFile3 was not uploaded');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    testFile1.mv(uploadPath1, function(err) {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        return res.status(500).send(err);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      testFile2.mv(uploadPath2, function(err) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return res.status(500).send(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        testFile3.mv(uploadPath3, function(err) {
 | 
			
		||||
          if (err) {
 | 
			
		||||
            return res.status(500).send(err);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          res.send('Files uploaded to ' + uploadDir);
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/upload/array', function(req, res) {
 | 
			
		||||
    if (!req.files) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let testFiles = req.files.testFiles;
 | 
			
		||||
 | 
			
		||||
    if (!testFiles) {
 | 
			
		||||
      return res.status(400).send('No files were uploaded');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!Array.isArray(testFiles)) {
 | 
			
		||||
      return res.status(400).send('Files were not uploaded as an array');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!testFiles.length) {
 | 
			
		||||
      return res.status(400).send('Files array is empty');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let filesUploaded = 0;
 | 
			
		||||
    for (let i = 0; i < testFiles.length; i++) {
 | 
			
		||||
      let uploadPath = path.join(uploadDir, testFiles[i].name);
 | 
			
		||||
 | 
			
		||||
      testFiles[i].mv(uploadPath, function(err) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return res.status(500).send(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (++filesUploaded === testFiles.length) {
 | 
			
		||||
          res.send('File uploaded to ' + uploadPath);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/fields/user', function(req, res) {
 | 
			
		||||
    if (!req.body) {
 | 
			
		||||
      return res.status(400).send('No request body found');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.firstName || !req.body.firstName.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid first name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.lastName || !req.body.lastName.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid last name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.email || !req.body.email.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid email');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json({
 | 
			
		||||
      firstName: req.body.firstName,
 | 
			
		||||
      lastName: req.body.lastName,
 | 
			
		||||
      email: req.body.email
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/fields/nested', function(req, res) {
 | 
			
		||||
    if (!req.body) {
 | 
			
		||||
      return res.status(400).send('No request body found');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.name || !req.body.name.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.hobbies || !req.body.hobbies.length == 2) {
 | 
			
		||||
      return res.status(400).send('Invalid hobbies');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json({
 | 
			
		||||
      name: req.body.name,
 | 
			
		||||
      hobbies: req.body.hobbies
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/fields/flattened', function(req, res) {
 | 
			
		||||
    if (!req.body) {
 | 
			
		||||
      return res.status(400).send('No request body found');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.name || !req.body.name.trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body['hobbies[0]'] || !req.body['hobbies[0]'].trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid hobbies[0]');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body['hobbies[1]'] || !req.body['hobbies[1]'].trim()) {
 | 
			
		||||
      return res.status(400).send('Invalid hobbies[1]');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json({
 | 
			
		||||
      name: req.body.name,
 | 
			
		||||
      'hobbies[0]': req.body['hobbies[0]'],
 | 
			
		||||
      'hobbies[1]': req.body['hobbies[1]']
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  app.all('/fields/array', function(req, res) {
 | 
			
		||||
    if (!req.body) {
 | 
			
		||||
      return res.status(400).send('No request body found');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!req.body.testField) {
 | 
			
		||||
      return res.status(400).send('Invalid field');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!Array.isArray(req.body.testField)) {
 | 
			
		||||
      return res.status(400).send('Field is not an array');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json(req.body.testField);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return app;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  setup,
 | 
			
		||||
  fileDir,
 | 
			
		||||
  uploadDir,
 | 
			
		||||
  clearUploadsDir
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										126
									
								
								express-server/node_modules/express-fileupload/test/tempFile.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								express-server/node_modules/express-fileupload/test/tempFile.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const request = require('supertest');
 | 
			
		||||
const server = require('./server');
 | 
			
		||||
const clearUploadsDir =
 | 
			
		||||
  server.clearUploadsDir;
 | 
			
		||||
const fileDir =
 | 
			
		||||
  server.fileDir;
 | 
			
		||||
const uploadDir =
 | 
			
		||||
  server.uploadDir;
 | 
			
		||||
describe('File Upload Options Tests', function() {
 | 
			
		||||
  afterEach(function(done) {
 | 
			
		||||
    clearUploadsDir();
 | 
			
		||||
    done();
 | 
			
		||||
  });
 | 
			
		||||
  /**
 | 
			
		||||
   * Upload the file for testing and verify the expected filename.
 | 
			
		||||
   * @param {object} options The expressFileUpload options.
 | 
			
		||||
   * @param {string} actualFileNameToUpload The name of the file to upload.
 | 
			
		||||
   * @param {string} expectedFileNameOnFileSystem The name of the file after upload.
 | 
			
		||||
   * @param {function} done The mocha continuation function.
 | 
			
		||||
   */
 | 
			
		||||
  function executeFileUploadTestWalk(
 | 
			
		||||
    options,
 | 
			
		||||
    actualFileNameToUpload,
 | 
			
		||||
    expectedFileNameOnFileSystem,
 | 
			
		||||
    done
 | 
			
		||||
  ) {
 | 
			
		||||
    request(
 | 
			
		||||
      server.setup(options)
 | 
			
		||||
    )
 | 
			
		||||
      .post('/upload/single')
 | 
			
		||||
      .attach(
 | 
			
		||||
        'testFile',
 | 
			
		||||
        path.join(
 | 
			
		||||
          fileDir,
 | 
			
		||||
          actualFileNameToUpload
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
      .expect(200)
 | 
			
		||||
      .end(function(err) {
 | 
			
		||||
        if (err) {
 | 
			
		||||
          return done(err);
 | 
			
		||||
        }
 | 
			
		||||
        const uploadedFilePath = path.join(
 | 
			
		||||
          uploadDir,
 | 
			
		||||
          expectedFileNameOnFileSystem
 | 
			
		||||
        );
 | 
			
		||||
        fs.stat(
 | 
			
		||||
          uploadedFilePath,
 | 
			
		||||
          done
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
  describe('Testing [safeFileNames with useTempFiles] option to ensure:', function() {
 | 
			
		||||
    it('Does nothing to your filename when disabled.', function(done) {
 | 
			
		||||
      const fileUploadOptions = {
 | 
			
		||||
        safeFileNames: false,
 | 
			
		||||
        useTempFiles: true,
 | 
			
		||||
        tempFileDir: '/tmp/'
 | 
			
		||||
      };
 | 
			
		||||
      const actualFileName =
 | 
			
		||||
        'my$Invalid#fileName.png123';
 | 
			
		||||
      const expectedFileName =
 | 
			
		||||
        'my$Invalid#fileName.png123';
 | 
			
		||||
      executeFileUploadTestWalk(
 | 
			
		||||
        fileUploadOptions,
 | 
			
		||||
        actualFileName,
 | 
			
		||||
        expectedFileName,
 | 
			
		||||
        done
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('Is disabled by default.', function(done) {
 | 
			
		||||
      const fileUploadOptions = {
 | 
			
		||||
        useTempFiles: true,
 | 
			
		||||
        tempFileDir: '/tmp/'
 | 
			
		||||
      };
 | 
			
		||||
      const actualFileName =
 | 
			
		||||
        'my$Invalid#fileName.png123';
 | 
			
		||||
      const expectedFileName =
 | 
			
		||||
        'my$Invalid#fileName.png123';
 | 
			
		||||
      executeFileUploadTestWalk(
 | 
			
		||||
        fileUploadOptions,
 | 
			
		||||
        actualFileName,
 | 
			
		||||
        expectedFileName,
 | 
			
		||||
        done
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(
 | 
			
		||||
      'Strips away all non-alphanumeric characters (excluding hyphens/underscores) when enabled.', 
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {
 | 
			
		||||
          safeFileNames: true,
 | 
			
		||||
          useTempFiles: true,
 | 
			
		||||
          tempFileDir: '/tmp/'
 | 
			
		||||
        };
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileNamepng123';
 | 
			
		||||
        executeFileUploadTestWalk(
 | 
			
		||||
          fileUploadOptions,
 | 
			
		||||
          actualFileName,
 | 
			
		||||
          expectedFileName,
 | 
			
		||||
          done
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    it(
 | 
			
		||||
      'Accepts a regex for stripping (decidedly) "invalid" characters from filename.', 
 | 
			
		||||
      function(done) {
 | 
			
		||||
        const fileUploadOptions = {
 | 
			
		||||
          safeFileNames: /[$#]/g,
 | 
			
		||||
          useTempFiles: true,
 | 
			
		||||
          tempFileDir: '/tmp/'
 | 
			
		||||
        };
 | 
			
		||||
        const actualFileName = 'my$Invalid#fileName.png123';
 | 
			
		||||
        const expectedFileName = 'myInvalidfileName.png123';
 | 
			
		||||
        executeFileUploadTestWalk(
 | 
			
		||||
          fileUploadOptions,
 | 
			
		||||
          actualFileName,
 | 
			
		||||
          expectedFileName,
 | 
			
		||||
          done
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
		Reference in New Issue
	
	Block a user