diff --git a/lib/Uploads.js b/lib/Uploads.js index 79b2653..2cd207f 100644 --- a/lib/Uploads.js +++ b/lib/Uploads.js @@ -125,7 +125,8 @@ export default class Uploads { } /* Generate thumbnails, if any */ - const thumbs = new Utils().coerceArray(rule && rule.thumbnails ? rule.thumbnails : this.app.config.upload.thumbnails); + const thumbDefinition = rule && rule.thumbnails ? rule.thumbnails : this.app.config.upload.thumbnails; + const thumbs = thumbDefinition ? new Utils().coerceArray(thumbDefinition) : []; for (const [i, thumb] of thumbs.entries()) { /* Construct path for thumbnail */ diff --git a/test/_data/files/photo.jpg b/test/_data/files/photo.jpg new file mode 100644 index 0000000..f5a4069 Binary files /dev/null and b/test/_data/files/photo.jpg differ diff --git a/test/lib/Uploads.test.js b/test/lib/Uploads.test.js index e45ff73..2033e70 100644 --- a/test/lib/Uploads.test.js +++ b/test/lib/Uploads.test.js @@ -3,6 +3,7 @@ import path from 'path'; import fs from 'fs'; import _ from 'underscore'; import { fileURLToPath } from 'url'; +import imageSize from 'image-size'; import Response from '../../lib/Response.js'; import SaplingError from '../../lib/SaplingError.js'; @@ -61,6 +62,46 @@ test('uploads an image', async t => { t.is(upload.image.height, 180); }); +test('processes thumbnails', async t => { + t.context.app.uploads = new Uploads(t.context.app); + const request = _.extend({ + files: { + image: getFileObject('photo.jpg') + } + }, t.context.request); + + const upload = await t.context.app.uploads.handleUpload(request, t.context.response, { + image: { + thumbnails: [ + { + name: 'web', + width: 500, + }, + { + name: 'thumb', + width: 128, + height: 128, + fit: 'cover', + }, + ] + } + }); + + const thumbWebPath = path.join(__dirname, 'uploads/thumbs/web/photo.jpg'); + const thumbWebDims = await imageSize(thumbWebPath); + + t.true(fs.existsSync(thumbWebPath)); + t.is(thumbWebDims.width, 500); + t.is(thumbWebDims.height, 375); + + const thumbThumbPath = path.join(__dirname, 'uploads/thumbs/thumb/photo.jpg'); + const thumbThumbDims = await imageSize(thumbThumbPath); + + t.true(fs.existsSync(thumbThumbPath)); + t.is(thumbThumbDims.width, 128); + t.is(thumbThumbDims.height, 128); +}); + test('uploads a video', async t => { t.context.app.uploads = new Uploads(t.context.app); const request = _.extend({