@@ -284,6 +284,50 @@ describe('s3', function() {
284
284
assert . equal ( headParams . Key , expectedKey ) ;
285
285
} ) ;
286
286
} ) ;
287
+
288
+ it ( 'correctly pages s3#listObjects calls when necessary' , function ( ) {
289
+
290
+ var revisions = [
291
+ { Key : 'test.html:111' , LastModified : new Date ( 'September 27, 2015 01:00:00' ) , ETag : '111' } ,
292
+ { Key : 'test.html:222' , LastModified : new Date ( 'September 27, 2015 02:00:00' ) , ETag : '222' } ,
293
+ { Key : 'test.html:333' , LastModified : new Date ( 'September 27, 2015 03:00:00' ) , ETag : '333' } ,
294
+ { Key : 'test.html:444' , LastModified : new Date ( 'September 27, 2015 04:00:00' ) , ETag : '444' } ,
295
+ { Key : 'test.html:555' , LastModified : new Date ( 'September 27, 2015 05:00:00' ) , ETag : '555' } ,
296
+ { Key : 'test.html:666' , LastModified : new Date ( 'September 27, 2015 06:00:00' ) , ETag : '666' } ,
297
+ { Key : 'test.html:777' , LastModified : new Date ( 'September 27, 2015 07:00:00' ) , ETag : '777' } ,
298
+ { Key : 'test.html:888' , LastModified : new Date ( 'September 27, 2015 08:00:00' ) , ETag : '888' } ,
299
+ { Key : 'test.html:999' , LastModified : new Date ( 'September 27, 2015 09:00:00' ) , ETag : '999' } ,
300
+ { Key : 'test.html:000' , LastModified : new Date ( 'September 27, 2015 10:00:00' ) , ETag : '000' } ,
301
+ ] ;
302
+
303
+ var resultsPerPage = 4 ;
304
+ var listObjectCalls = [ ] ;
305
+
306
+ s3Client . listObjects = function ( params , cb ) {
307
+ listObjectCalls . push ( params . Marker ) ;
308
+ var offset = 0 ;
309
+ offset = revisions . map ( function ( revision ) {
310
+ return revision . Key ;
311
+ } ) . indexOf ( params . Marker ) + 1 ;
312
+ var lastResult = offset + resultsPerPage ;
313
+
314
+ cb ( undefined , {
315
+ Contents : revisions . slice ( offset , lastResult ) ,
316
+ IsTruncated : lastResult < revisions . length ,
317
+ } ) ;
318
+ } ;
319
+
320
+ var promise = subject . fetchRevisions ( options ) ;
321
+
322
+ return assert . isFulfilled ( promise )
323
+ . then ( function ( revisionsData ) {
324
+ assert . equal ( revisionsData . length , revisions . length , 'All revisions are available' ) ;
325
+ assert . equal ( listObjectCalls . length , 3 , 'listObjects was called 3 times' ) ;
326
+ assert . equal ( listObjectCalls [ 0 ] , undefined , 'the first call to listObjects had the expected marker' ) ;
327
+ assert . equal ( listObjectCalls [ 1 ] , 'test.html:444' , 'the second call to listObjects had the expected marker' ) ;
328
+ assert . equal ( listObjectCalls [ 2 ] , 'test.html:888' , 'the third call to listObjects had the expected marker' ) ;
329
+ } ) ;
330
+ } ) ;
287
331
} ) ;
288
332
289
333
describe ( '#activate' , function ( ) {
0 commit comments