'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, limitHandlerRun; 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('Run limitHandler on limit reached.', function(){ before(function() { app = server.setup({ limits: {fileSize: 200 * 1024}, // set 200kb upload limit limitHandler: (req, res) => { // set limit handler res.writeHead(500, { Connection: 'close', 'Content-Type': 'application/json'}); res.end(JSON.stringify({response: 'Limit reached!'})); limitHandlerRun = true; } }); }); it(`Run limit handler when uploading 'car.png' (~269kb) with 200kb size limit`, function(done) { let filePath = path.join(fileDir, 'car.png'); limitHandlerRun = false; request(app) .post('/upload/single/truncated') .attach('testFile', filePath) .expect(500, {response: 'Limit reached!'}) .end(function(err){ if (err) return done(err); if (!limitHandlerRun) return done('handler did not run'); 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(); }); }); }); });