From 8a7c7f08e91952f286963942bf35b608f72b9f7d Mon Sep 17 00:00:00 2001 From: Daniel Lockyer Date: Thu, 9 Sep 2021 11:16:40 +0100 Subject: [PATCH] Enabled fetching `.ico` dimension size via `probe-image-size` refs https://github.com/nodeca/probe-image-size/blob/master/CHANGELOG.md#600---2020-11-04 - `probe-image-size` v6 now supports `.ico` files so we can allow probing of dimensions via this library rather than falling back to downloading the entire image via `image-size` - also updates a test because .ico files no longer use the internal request lib, which simplifies things a little bit --- core/server/lib/image/image-size.js | 2 +- test/unit/server/lib/image/image-size.test.js | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/core/server/lib/image/image-size.js b/core/server/lib/image/image-size.js index 0c8672d12f..bfb6b6e57d 100644 --- a/core/server/lib/image/image-size.js +++ b/core/server/lib/image/image-size.js @@ -14,7 +14,7 @@ const messages = { // these are formats supported by image-size but not probe-image-size const FETCH_ONLY_FORMATS = [ - 'cur', 'icns', 'ico', 'dds' + 'cur', 'icns', 'dds' ]; class ImageSize { diff --git a/test/unit/server/lib/image/image-size.test.js b/test/unit/server/lib/image/image-size.test.js index dd3e51c784..a7cbb2a666 100644 --- a/test/unit/server/lib/image/image-size.test.js +++ b/test/unit/server/lib/image/image-size.test.js @@ -127,7 +127,10 @@ describe('lib/image: image size', function () { width: 64 }; - const requestMock = nock('https://super-website.com').get('/random-path').reply(404); + const requestMock = nock('https://super-website.com') + .get('/media/icon.ico') + .replyWithFile(200, path.join(__dirname, '../../../../utils/fixtures/images/favicon_multi_sizes.ico')); + const requestMockNotFound = nock('https://super-website.com').get('/random-path').reply(404); const imageSize = new ImageSize({config: { get: () => {} @@ -135,17 +138,11 @@ describe('lib/image: image size', function () { isLocalImage: () => false }, validator: { isURL: () => true - }, urlUtils: {}, request: (requestUrl) => { - if (requestUrl === url) { - return Promise.resolve({ - body: fs.readFileSync(path.join(__dirname, '../../../../utils/fixtures/images/favicon_multi_sizes.ico')) - }); - } - return Promise.reject(); - }}); + }, urlUtils: {}, request: {}}); imageSize.getImageSizeFromUrl(url).then(function (res) { - requestMock.isDone().should.be.false(); + requestMockNotFound.isDone().should.be.false(); + requestMock.isDone().should.be.true(); should.exist(res); res.width.should.be.equal(expectedImageObject.width); res.height.should.be.equal(expectedImageObject.height);