295 lines
7.0 KiB
JavaScript
295 lines
7.0 KiB
JavaScript
'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);
|
|
});
|
|
});
|
|
}
|
|
});
|