multer-storage-imgur
Version:
Multer storage engine for imgur. Images upload through multer will directly upload to Imgur
111 lines (83 loc) • 3.48 kB
JavaScript
/* globals describe, it */
const assert = require('chai').assert;
const ImgurStorage = require('./index');
const fs = require('fs');
const stream = require('stream');
const onFinished = require('on-finished');
const multer = require('multer');
const FormData = require('form-data');
const path = require('path');
describe('Imgur Storage', function () {
const upload = multer({
storage: ImgurStorage({ clientId: '{INPUT_YOUR_IMGUR_CLIENTID}' }),
});
it('should process parser/form-data POST request', function (done) {
const form = new FormData();
const parser = upload.single('img');
form.append('name', 'Multer');
form.append('img', fs.createReadStream(path.resolve(__dirname, './files/img2.jpg')));
submitForm(parser, form, function (err, req) {
const file = req.file;
assert.isUndefined(err);
assert.isDefined(req);
assert.isDefined(file.data);
assert.isDefined(file.success);
assert.isDefined(file.status);
assert.equal(file.status, 200);
assert.isTrue(file.success, true);
assert.isDefined(file.data.link);
done();
});
});
it('should throw error if file is not image', function (done) {
const form = new FormData();
const parser = upload.single('empty');
form.append('empty', fs.createReadStream(path.resolve(__dirname, './files/empty.dat')));
form.append('name', 'Multer');
submitForm(parser, form, function (err, req) {
assert.isDefined(err);
assert.equal(err.message, 'File is not of image type');
done();
});
});
it('should process multiple files', function (done) {
const form = new FormData();
const parser = upload.fields([
{ name: 'img1', maxCount: 1 },
{ name: 'img2', maxCount: 1 },
]);
form.append('img1', fs.createReadStream(path.resolve(__dirname, './files/img1.png')));
form.append('img2', fs.createReadStream(path.resolve(__dirname, './files/img2.jpg')));
submitForm(parser, form, function (err, req) {
assert.ifError(err);
assert.deepEqual(req.body, {});
assert.equal(req.files['img1'][0].fieldname, 'img1');
assert.equal(req.files['img1'][0].originalname, 'img1.png');
assert.isDefined(req.files['img1'][0].data);
assert.isString(req.files['img1'][0].data.link);
assert.equal(req.files['img2'][0].fieldname, 'img2');
assert.equal(req.files['img2'][0].originalname, 'img2.jpg');
assert.isDefined(req.files['img2'][0].data);
assert.isString(req.files['img2'][0].data.link);
done();
});
});
});
function submitForm(parser, form, cb) {
form.getLength((err, length) => {
if (err) return cb(err);
const req = new stream.PassThrough();
req.complete = false;
form.once('end', () => {
req.complete = true;
});
form.pipe(req);
req.headers = {
'content-type': `multipart/form-data; boundary=${form.getBoundary()}`,
'content-length': length,
};
return parser(req, null, (err2) => {
onFinished(req, () => cb(err2, req));
});
});
}