From 09fdd984c11c187f026e58e2dba789d7a008ae03 Mon Sep 17 00:00:00 2001 From: Marc-Roig Date: Mon, 1 Aug 2022 15:53:03 +0200 Subject: [PATCH] test upload image --- .../formatFileInfo.test.js} | 2 +- .../services/__tests__/upload/image.png | Bin 0 -> 6646 bytes .../__tests__/upload/uploadImage.test.js | 88 ++++++++++++++++++ .../core/upload/server/services/upload.js | 2 + 4 files changed, 91 insertions(+), 1 deletion(-) rename packages/core/upload/server/services/__tests__/{upload.test.js => upload/formatFileInfo.test.js} (98%) create mode 100644 packages/core/upload/server/services/__tests__/upload/image.png create mode 100644 packages/core/upload/server/services/__tests__/upload/uploadImage.test.js diff --git a/packages/core/upload/server/services/__tests__/upload.test.js b/packages/core/upload/server/services/__tests__/upload/formatFileInfo.test.js similarity index 98% rename from packages/core/upload/server/services/__tests__/upload.test.js rename to packages/core/upload/server/services/__tests__/upload/formatFileInfo.test.js index 0ebab147b5..884ae3bbf7 100644 --- a/packages/core/upload/server/services/__tests__/upload.test.js +++ b/packages/core/upload/server/services/__tests__/upload/formatFileInfo.test.js @@ -1,6 +1,6 @@ 'use strict'; -const uploadService = require('../upload')({}); +const uploadService = require('../../upload')({}); describe('Upload service', () => { beforeAll(() => { diff --git a/packages/core/upload/server/services/__tests__/upload/image.png b/packages/core/upload/server/services/__tests__/upload/image.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec3f1189a739f68f3bf24cab90be09cd0196dbb GIT binary patch literal 6646 zcmeHLX;f3$vW_A+fDl6v6p%p!1TX;yKx9%TnZqE1ra@3Z1OfpX!mRB@NVuqt2)C6< zk-=65MI{QFraefbqS7`)1`;^TvtbMn$U6tUZQp+Ve!TU5ygz-`%F5nVUsZioyY@ai zp%R>Jw{F?F1%W_pwL50zhCql@5r_?%o5UaqbyoHO^tB=Qh|>`S;=vV3p}#mZUl;9W zdlXUiPH6;zSYH(4;T_}c0 z^)-YsG={}^b=5UUOsJ{4w-Z6tG9oHa)c~i5(^EIwqN=KD5_KlX*v-o3i#aqiRX-aO z6KRac$Hm3r;`ZYrqJr`IhYlUW>+Qqu+qV}&?2V2m#rRY9lA?EicJgmOR)Nu{qe3EM zLLx}2uwVaxh;L&|)z#rZzdxUO#)JfYjYNw6k`|O89@gOXaeDZ_G7F@H{10ZZ=Cj#a zUZ2C6z|M?)+ybK`!oG!RnHlagS&Q%=!ms>38+^qdCxyhA{oCYE;y+t?f7O2t^GD&I z4P2r^0--{#@zVc7>yNTO;Nk3y2_clgFmJ1n@IX>DoQu95^qAoPQumj(K3{DO5B{g= zA5>pVP4Ms%{$WW!_sg0TY8bOECivf*&uq)pi>j}ne%u^+%qJRwkd%c#>kv2c6`)=w z5F9BYsx+1a_3m6iVfejcx?O9x05(U9UV|Oc27?)2=?{#^zgVnP}m+`&*n3$ZJn(FN6nwy=$Uva^vsI{Vgd)br764eSm${G9vf zCVP3F%NB{)mp8|}xTZzJxjLp)Wm8hPh#TKqwM_KY*LhamcYS;9`pNX>x|x~5MzI6>(#@{ZJ^Xi# zZD(@aI4dn}jqgel?a+$GemS8} zu$jJFN_{1-C0)MD+k(try@WI@1o2rLRD`j7o$@{bQB4cJ>2Y8BtFRiEoN;CHrs%w3KeJ<)U)5%D}}{_ z4<}?TzDHJ1*#+q(j=4$c<`kIhLv2)|sT5FJ_t#J~R;{SdpNS3s_FiIRtn&trDOpeO z%S9<~Rc@W5Qp_zumzlw-UJ&TD!in8bI#Gz&u3#gIY}Dpw1mKL)>KYa{)YJevgB`_H zTKY8>xs0DDiMA@lvWx|D_kdy>s!LU29d$47!ko%BYhr>(Sa9B6O1F^O`Hl@3*jKNp zCHl|TzdVvF3jJ4J;C%3EtML8E6&F#zc}oz(K*V5n&hU1eDVHx$lzxxXqolOrSNAi< zduGoK`AG-)Ne|(({^hqUjC+qWr;tm6c?o2{K|h(9lPV4Lv6n;g=F3Bir4qG%iiN(7 zpX!&Vg|QMZ8+9~$W=RFf@$A)dVmsxKM)th7d~Ie{jb!V*AKRWMlDU|Zx|i{7F2c~G2uyKL&^|$FvTD%03(q@ z|K_F9P9-xT#pDO(a=T{e%@z;pItEAPb%>@> zPn&S^Wu|5RO-{&a1+130=9t*m;iUOm$$k($Y0agi-edVHogZ&PuE-VNQ&M+-qXfp3 z^Iy6_i5Fb~T(b zRznF?2K<{*;2ES+>L)lCqILO&!Q%*w^zNr8Bjwpg${@hTZK9;pZHFI-C-kjxdRyBb zQ2ij0(sHi=%4oNFuDWDXE5oY+cCX=6gx*2*QWR+&hQmJ{Y0gXsD`QIe2HH@|;xB>a zB~82ejNqVvp7ax-uA=m%+SD{hekyJ!ZK|BzTJB1{P^v}Fx6*W-++&}zZ88#MEH8oR zbiw!@jKq>37>0DZ*8Otgaa_tYH~mT#uO(Y+bF5L_ubK1cE5GtnIKozK{SQ+pnZC1; z3!3-(q@j8`cWM^H`v>klSVdaXD@X#>cUFWB(1*^6h|`rFyb7>B6=MV|wkvMW?l z3k&m_On}aEHIfJQf?1vsD>dTuuHL*{sV9Sn%)Avh+yzyiCOFe{VDc#m)Lo$^FrDzUkg~j0ewll&#oH&DH@Q`()mIgZ)LbFJ^X8Rhmp_ z<`TrMQ(cKvd-YL}+Z`HQsjxLA!~Nwr|v#a9ul z*e$W!uPY1(Q)`D`d1d+reIKEnI2N=Wq-XbY+uO5hS9V_G`;n$>$=kX=WmQkh{Dov)^;YFPFi9l z61+kGM&w3k@~W@={>JyWQDQ4PWKSdDmODop(t3gW)Xbdttpm=`#!uEEKSeU6-JzkW z4!`D1#?Vb>?qO)l&E5liMv!=s$9=$}+Mb939EzZZT=D?Vsrk;Mb@V@!pn}_COOg0^ zsIP}zsP~+KH>-~dP-4%qDZ= zNU+oi=AlL2zEW`kSyU!ycF2P*2;l9a5BwXXAn1%=M#J6hjOO}l(UBSnt$Z7t7$Q!Vzyxt3?zSm_6z`Ax15muE*KL`z|?SiPW@MO=>EJ3~a<;#Un-W(Qk zDJk70m6fw8&mJGV!OJR|_Gce=z*S~Ca%#UjkR zomK8h zeL9^8E$G=&Kur_ukwnWKC2GS)uAqMpGLI7cWExwA2KT{a(on&TmP(P@RSFO#&j8gV zDti;T#)V&@1cLCKLS=8}pZesKahGnBAqg}2fRU~b1q0JMX`;GFT4);mEEH-J5qzQn zx=Es~c^7X7Wk{Amz#0rGLS6bQ$Wp`QLZ$dFm)=UHd(bi)Hd>3R;c_6+(Oh~rmEMas zM1ksXuv1jF44GO!!97u9;i?CmoP+bCqeQnZBJ+Nr;TzgPS-xjCR4?RxKqV=$4qP<1gGknlZKp@BlxkRne>IZW*C42a>&# z8F0M}q^VV{Z80oaQLXCJF7$Ovq7LlO6^uPfOwg{{1{%Xla}iZ12WDfd z4@NE1#?t5s@ZvrP!Y|RSXq}Ai`|{vx7%_pWQ-oIWMG9d*aNG~P1z5bnkPZXZafEzs zU4mMbksQ=%B)GM~Tw!&=&=KAmUafW<(vB>C=LdWRL~7&Nc&16R|aQii6} zQ{d@0pxGrl)Y>>F6Gr6;I71S3c?b9%mb3?0>zP*6!a?BaNOy^N{9D5%lC95f&AT?R zr5Cs>os!$!o@sXUfT*RhpyG$ae!-Pcg->86qcdje3#H6NqYc}Kc*-kpNc+OZ4;+Wz zOyAmbrjSD<+tkGPSaVUTdR-7t02Y;#OJpfcP_q+4HCC4xiOL`m#Ym3d7dq8(c1-u@ z8NAIs7ZNWlLI2JPIJ7J1`b;+Px%qjmr!(@5{D!FJDHY-TvAZ&`a&Mo$4_yex9Zy6){@@; z+KYYU7Vwiy39z4>zsF7~-PA`8YKxy_%7KaeO1K3qsP(?Z1o*2E@<9NrpjAJQiYtKj zcn*Eh-ID~>U>#;ML3<4f=WNgU_P-;?plpkQZ=h2Kx~;{H(k67)@PFZR3~hemyDNd> zIh3dGc^Ad82C{$hm~Ni-F;Q^@I-2b{BZnH|&S*ePPPQx$Rl8_GF~aF9i7>a5d`0Lg z3iG-D`9nyJ_fsQ&!yDHI4G4Vbz~P`=HsUc-7_7MLSs^_ZP3w;*oIQzC-s(IfV1;M{|5>5sqY087n~T2eZ};b z^WtVZmGbMdvRF@ky(p9t(>+lr*rRM0q*@Zw3~s0)#7-ZhiscI0>;{iW=;l*9_o6ov zHGBQC2euAj(Pm}0$@Kr7N1k4(0m-Q&9- zCDxQ4fR)}Buv?#y6Sr~Wrg*6z$F?pV?RU{U=+=OM8HE3Z5B79@{>iYKfqbrBDY;+TDE0S0 hMSoY|a|IlRM2P8WaRp1+X9=*x&f3|k>gcKO{tHxnheiMZ literal 0 HcmV?d00001 diff --git a/packages/core/upload/server/services/__tests__/upload/uploadImage.test.js b/packages/core/upload/server/services/__tests__/upload/uploadImage.test.js new file mode 100644 index 0000000000..b0317919f8 --- /dev/null +++ b/packages/core/upload/server/services/__tests__/upload/uploadImage.test.js @@ -0,0 +1,88 @@ +'use strict'; + +const path = require('path'); +const fs = require('fs'); +const fse = require('fs-extra'); +const _ = require('lodash'); +const uploadService = require('../../upload')({}); + +const testFilePath = path.join(__dirname, './image.png'); +const tmpWorkingDirectory = path.join(__dirname, './tmp'); + +function mockUploadProvider(uploadFunc, props) { + const { responsiveDimensions = false } = props || {}; + + const default_config = { + plugin: { + upload: { + breakpoints: { + large: 1000, + medium: 750, + }, + }, + }, + }; + + global.strapi = { + config: { + get: (path, defaultValue) => _.get(default_config, path, defaultValue), + }, + plugins: { + upload: { + services: { + provider: { + upload: uploadFunc, + }, + upload: { + getSettings: () => ({ responsiveDimensions }), + }, + 'image-manipulation': require('../../image-manipulation')(), + }, + }, + }, + }; +} + +const getFileData = () => ({ + alternativeText: 'image.png', + caption: 'image.png', + ext: '.png', + folder: null, + folderPath: '/', + getStream: () => fs.createReadStream(testFilePath), + hash: 'image_d9b4f84424', + height: 1000, + size: 4, + width: 1500, + tmpWorkingDirectory, +}); + +describe('Upload image', () => { + beforeAll(async () => { + // Create tmp directory if it does not exist + await fse.mkdir(tmpWorkingDirectory); + }); + + afterAll(async () => { + // Remove tmp directory + await fse.remove(tmpWorkingDirectory); + }); + test('Upload with thubmnail', async () => { + let fileData = getFileData(); + const upload = jest.fn(); + mockUploadProvider(upload); + + await uploadService.uploadImage(fileData); + expect(upload).toHaveBeenCalledTimes(2); + }); + + test('Upload with responsive formats', async () => { + let fileData = getFileData(); + const upload = jest.fn(); + mockUploadProvider(upload, { responsiveDimensions: true }); + + await uploadService.uploadImage(fileData); + // 1 for the original image, 1 for thubnhail, 2 for the responsive formats + expect(upload).toHaveBeenCalledTimes(4); + }); +}); diff --git a/packages/core/upload/server/services/upload.js b/packages/core/upload/server/services/upload.js index 469cee1ef1..7c4b3b858c 100644 --- a/packages/core/upload/server/services/upload.js +++ b/packages/core/upload/server/services/upload.js @@ -176,6 +176,8 @@ module.exports = ({ strapi }) => ({ // Store width and height of the original image const { width, height } = await getDimensions(fileData); + // Make sure this is assigned before calling upload + // That way it can mutate the width and height _.assign(fileData, { width, height,