From f619de0e435f7ac3abad2ec772397486358b56e7 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 25 Nov 2020 09:50:12 +0100 Subject: Add tests to gif resizer --- server/helpers/ffmpeg-utils.ts | 33 ++++++------------------------ server/helpers/image-utils.ts | 34 ++++++++++++++++++------------- server/tests/api/users/users.ts | 23 ++++++++++++++++++--- server/tests/fixtures/avatar-resized.gif | Bin 0 -> 88318 bytes server/tests/fixtures/avatar.gif | Bin 0 -> 46917 bytes 5 files changed, 46 insertions(+), 44 deletions(-) create mode 100644 server/tests/fixtures/avatar-resized.gif create mode 100644 server/tests/fixtures/avatar.gif (limited to 'server') diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index 69defccc4..9755dd67c 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts @@ -64,35 +64,14 @@ function convertWebPToJPG (path: string, destination: string): Promise { function processGIF ( path: string, destination: string, - newSize: { width: number, height: number }, - keepOriginal = false + newSize: { width: number, height: number } ): Promise { - return new Promise(async (res, rej) => { - if (path === destination) { - throw new Error('FFmpeg needs an input path different that the output path.') - } - - logger.debug('Processing gif %s to %s.', path, destination) + const command = ffmpeg(path) + .fps(20) + .size(`${newSize.width}x${newSize.height}`) + .output(destination) - try { - const command = ffmpeg(path) - .fps(20) - .size(`${newSize.width}x${newSize.height}`) - .output(destination) - - command.on('error', (err, stdout, stderr) => { - logger.error('Error in ffmpeg gif resizing process.', { stdout, stderr }) - return rej(err) - }) - .on('end', async () => { - if (keepOriginal !== true) await remove(path) - res() - }) - .run() - } catch (err) { - return rej(err) - } - }) + return runCommand(command) } async function generateImageFromVideoFile (fromPath: string, folder: string, imageName: string, size: { width: number, height: number }) { diff --git a/server/helpers/image-utils.ts b/server/helpers/image-utils.ts index fdf06e848..3ebf07305 100644 --- a/server/helpers/image-utils.ts +++ b/server/helpers/image-utils.ts @@ -1,5 +1,5 @@ -import { extname } from 'path' import { remove, rename } from 'fs-extra' +import { extname } from 'path' import { convertWebPToJPG, processGIF } from './ffmpeg-utils' import { logger } from './logger' @@ -13,17 +13,31 @@ async function processImage ( ) { const extension = extname(path) + if (path === destination) { + throw new Error('Jimp/FFmpeg needs an input path different that the output path.') + } + + logger.debug('Processing image %s to %s.', path, destination) + // Use FFmpeg to process GIF if (extension === '.gif') { - return processGIF(path, destination, newSize, keepOriginal) + await processGIF(path, destination, newSize) + } else { + await jimpProcessor(path, destination, newSize) } - if (path === destination) { - throw new Error('Jimp needs an input path different that the output path.') - } + if (keepOriginal !== true) await remove(path) +} - logger.debug('Processing image %s to %s.', path, destination) +// --------------------------------------------------------------------------- +export { + processImage +} + +// --------------------------------------------------------------------------- + +async function jimpProcessor (path: string, destination: string, newSize: { width: number, height: number }) { let jimpInstance: any try { @@ -44,12 +58,4 @@ async function processImage ( .resize(newSize.width, newSize.height) .quality(80) .writeAsync(destination) - - if (keepOriginal !== true) await remove(path) -} - -// --------------------------------------------------------------------------- - -export { - processImage } diff --git a/server/tests/api/users/users.ts b/server/tests/api/users/users.ts index edb0b4bb3..fe83ca041 100644 --- a/server/tests/api/users/users.ts +++ b/server/tests/api/users/users.ts @@ -602,8 +602,8 @@ describe('Test users', function () { expect(user.account.description).to.be.null }) - it('Should be able to update my avatar', async function () { - const fixture = 'avatar.png' + it('Should be able to update my avatar with a gif', async function () { + const fixture = 'avatar.gif' await updateMyAvatar({ url: server.url, @@ -614,7 +614,24 @@ describe('Test users', function () { const res = await getMyUserInformation(server.url, accessTokenUser) const user = res.body - await testImage(server.url, 'avatar-resized', user.account.avatar.path, '.png') + await testImage(server.url, 'avatar-resized', user.account.avatar.path, '.gif') + }) + + it('Should be able to update my avatar with a gif, and then a png', async function () { + for (const extension of [ '.png', '.gif' ]) { + const fixture = 'avatar' + extension + + await updateMyAvatar({ + url: server.url, + accessToken: accessTokenUser, + fixture + }) + + const res = await getMyUserInformation(server.url, accessTokenUser) + const user = res.body + + await testImage(server.url, 'avatar-resized', user.account.avatar.path, extension) + } }) it('Should be able to update my display name', async function () { diff --git a/server/tests/fixtures/avatar-resized.gif b/server/tests/fixtures/avatar-resized.gif new file mode 100644 index 000000000..81a82189e Binary files /dev/null and b/server/tests/fixtures/avatar-resized.gif differ diff --git a/server/tests/fixtures/avatar.gif b/server/tests/fixtures/avatar.gif new file mode 100644 index 000000000..f29707760 Binary files /dev/null and b/server/tests/fixtures/avatar.gif differ -- cgit v1.2.3