@@ -3,6 +3,7 @@ const fs = require('fs');
33const  assert  =  require ( 'assert' ) ; 
44const  mkdirp  =  require ( 'mkdirp' ) ; 
55const  getDirName  =  require ( 'path' ) . dirname ; 
6+ const  AWS  =  require ( 'aws-sdk' ) ; 
67
78/** 
89 * Resemble.js helper class for CodeceptJS, this allows screen comparison 
@@ -91,6 +92,106 @@ class ResembleHelper extends Helper {
9192    else  throw  new  Error ( "Method only works with Puppeteer" ) ; 
9293  } 
9394
95+   /** 
96+    * This method uploads the diff and screenshot images into the bucket with diff image under bucketName/diff/diffImage and the screenshot image as 
97+    * bucketName/output/ssImage 
98+    * @param  accessKeyId 
99+    * @param  secretAccessKey 
100+    * @param  region 
101+    * @param  bucketName 
102+    * @param  baseImage 
103+    * @param  ifBaseImage - tells if the prepareBaseImage is true or false. If false, then it won't upload the baseImage. 
104+    * @returns  {Promise<void> } 
105+    */ 
106+ 
107+   async  _upload ( accessKeyId ,  secretAccessKey ,  region ,  bucketName ,  baseImage ,  ifBaseImage )  { 
108+       console . log ( "Starting Upload... " ) ; 
109+       const  s3  =  new  AWS . S3 ( { 
110+           accessKeyId : accessKeyId , 
111+           secretAccessKey : secretAccessKey , 
112+           region : region 
113+       } ) ; 
114+       fs . readFile ( this . config . screenshotFolder  +  baseImage ,  ( err ,  data )  =>  { 
115+           if ( err )  throw  err ; 
116+           let  base64data  =  new  Buffer ( data ,  'binary' ) ; 
117+           const  params  =  { 
118+               Bucket : bucketName , 
119+               Key : `output/${ baseImage }  ` , 
120+               Body : base64data 
121+           } ; 
122+           s3 . upload ( params ,  ( uerr ,  data )  =>  { 
123+               if ( uerr )  throw  uerr ; 
124+               console . log ( `Screenshot Image uploaded successfully at ${ data . Location }  ` ) ; 
125+           } ) ; 
126+       } ) ; 
127+       fs . readFile ( this . config . diffFolder  +  "Diff_"  +  baseImage ,  ( err ,  data )  =>  { 
128+           if ( err )  console . log ( "Diff image not generated" ) ; 
129+           else  { 
130+               let  base64data  =  new  Buffer ( data ,  'binary' ) ; 
131+               const  params  =  { 
132+                   Bucket : bucketName , 
133+                   Key : `diff/Diff_${ baseImage }  ` , 
134+                   Body : base64data 
135+               } ; 
136+               s3 . upload ( params ,  ( uerr ,  data )  =>  { 
137+                   if ( uerr )  throw  uerr ; 
138+                   console . log ( `Diff Image uploaded successfully at ${ data . Location }  ` ) 
139+               } ) ; 
140+           } 
141+       } ) ; 
142+       if ( ifBaseImage )  { 
143+           fs . readFile ( this . config . baseFolder  +  baseImage ,  ( err ,  data )  =>  { 
144+               if ( err )  throw  err ; 
145+               else  { 
146+                   let  base64data  =  new  Buffer ( data ,  'binary' ) ; 
147+                   const  params  =  { 
148+                       Bucket : bucketName , 
149+                       Key : `base/${ baseImage }  ` , 
150+                       Body : base64data 
151+                   } ; 
152+                   s3 . upload ( params ,  ( uerr ,  data )  =>  { 
153+                       if ( uerr )  throw  uerr ; 
154+                       console . log ( `Base Image uploaded at ${ data . Location }  ` ) 
155+                   } ) ; 
156+               } 
157+           } ) ; 
158+       } 
159+       else  { 
160+           console . log ( "Not Uploading base Image" ) ; 
161+       } 
162+   } 
163+ 
164+   /** 
165+    * This method downloads base images from specified bucket into the base folder as mentioned in config file. 
166+    * @param  accessKeyId 
167+    * @param  secretAccessKey 
168+    * @param  region 
169+    * @param  bucketName 
170+    * @param  baseImage 
171+    * @returns  {Promise<void> } 
172+    */ 
173+ 
174+   _download ( accessKeyId ,  secretAccessKey ,  region ,  bucketName ,  baseImage )  { 
175+       console . log ( "Starting Download..." ) ; 
176+       const  s3  =  new  AWS . S3 ( { 
177+           accessKeyId : accessKeyId , 
178+           secretAccessKey : secretAccessKey , 
179+           region : region 
180+       } ) ; 
181+       const  params  =  { 
182+           Bucket : bucketName , 
183+           Key : `base/${ baseImage }  ` 
184+       } ; 
185+       return  new  Promise ( ( resolve ,  reject )  =>  { 
186+           s3 . getObject ( params ,  ( err ,  data )  =>  { 
187+               if ( err )  console . error ( err ) ; 
188+               console . log ( this . config . baseFolder  +  baseImage ) ; 
189+               fs . writeFileSync ( this . config . baseFolder  +  baseImage ,  data . Body ) ; 
190+               resolve ( "File Downloaded Successfully" ) ; 
191+           } ) ; 
192+       } ) ; 
193+   } 
194+ 
94195  /** 
95196   * Check Visual Difference for Base and Screenshot Image 
96197   * @param  baseImage         Name of the Base Image (Base Image path is taken from Configuration) 
@@ -103,11 +204,23 @@ class ResembleHelper extends Helper {
103204      options . tolerance  =  0 ; 
104205    } 
105206
207+     const  awsC  =  this . config . aws ; 
208+ 
209+     if  ( awsC  !==  undefined  &&  options . prepareBaseImage  ===  false )  { 
210+         await  this . _download ( awsC . accessKeyId ,  awsC . secretAccessKey ,  awsC . region ,  awsC . bucketName ,  baseImage ) ; 
211+     } 
212+ 
106213    if  ( options . prepareBaseImage  !==  undefined  &&  options . prepareBaseImage )  { 
107214      await  this . _prepareBaseImage ( baseImage ) ; 
108215    } 
109216
110217    const  misMatch  =  await  this . _fetchMisMatchPercentage ( baseImage ,  options ) ; 
218+ 
219+     if ( awsC  !==  undefined )  { 
220+         let  ifUpload  =  options . prepareBaseImage  ===  false  ? false  : true ; 
221+         await  this . _upload ( awsC . accessKeyId ,  awsC . secretAccessKey ,  awsC . region ,  awsC . bucketName ,  baseImage ,  ifUpload ) 
222+     } 
223+ 
111224    this . debug ( "MisMatch Percentage Calculated is "  +  misMatch ) ; 
112225    assert ( misMatch  <=  options . tolerance ,  "MissMatch Percentage "  +  misMatch ) ; 
113226  } 
@@ -127,12 +240,24 @@ class ResembleHelper extends Helper {
127240      options . tolerance  =  0 ; 
128241    } 
129242
243+     const  awsC  =  this . config . aws ; 
244+ 
245+     if  ( awsC  !==  undefined  &&  options . prepareBaseImage  ===  false )  { 
246+         await  this . _download ( awsC . accessKeyId ,  awsC . secretAccessKey ,  awsC . region ,  awsC . bucketName ,  baseImage ) ; 
247+     } 
248+ 
130249    if  ( options . prepareBaseImage  !==  undefined  &&  options . prepareBaseImage )  { 
131250      await  this . _prepareBaseImage ( baseImage ) ; 
132251    } 
133252
134253    options . boundingBox  =  await  this . _getBoundingBox ( selector ) ; 
135254    const  misMatch  =  await  this . _fetchMisMatchPercentage ( baseImage ,  options ) ; 
255+ 
256+     if ( awsC  !==  undefined )  { 
257+         let  ifUpload  =  options . prepareBaseImage  ===  false  ? false  : true ; 
258+         await  this . _upload ( awsC . accessKeyId ,  awsC . secretAccessKey ,  awsC . region ,  awsC . bucketName ,  baseImage ,  ifUpload ) 
259+     } 
260+ 
136261    this . debug ( "MisMatch Percentage Calculated is "  +  misMatch ) ; 
137262    assert ( misMatch  <=  options . tolerance ,  "MissMatch Percentage "  +  misMatch ) ; 
138263  } 
0 commit comments