11import { PaginationConfiguration } from "@smithy/types" ;
2- import { describe , expect , test as it } from "vitest" ;
2+ import { afterEach , describe , expect , test as it , vi } from "vitest" ;
33
44import { createPaginator } from "./createPaginator" ;
55
@@ -20,6 +20,10 @@ describe(createPaginator.name, () => {
2020 }
2121 }
2222 class CommandObjectToken {
23+ public middlewareStack = {
24+ add : vi . fn ( ) ,
25+ addRelativeTo : vi . fn ( ) ,
26+ } ;
2327 public constructor ( public input : any ) {
2428 expect ( input ) . toEqual ( {
2529 sizeToken : 100 ,
@@ -33,6 +37,10 @@ describe(createPaginator.name, () => {
3337 }
3438
3539 class CommandStringToken {
40+ public middlewareStack = {
41+ add : vi . fn ( ) ,
42+ addRelativeTo : vi . fn ( ) ,
43+ } ;
3644 public constructor ( public input : any ) {
3745 expect ( input ) . toEqual ( {
3846 sizeToken : 100 ,
@@ -41,6 +49,10 @@ describe(createPaginator.name, () => {
4149 }
4250 }
4351
52+ afterEach ( ( ) => {
53+ vi . resetAllMocks ( ) ;
54+ } ) ;
55+
4456 it ( "should create a paginator" , async ( ) => {
4557 const paginate = createPaginator < PaginationConfiguration , { inToken ?: string } , { outToken : string } > (
4658 Client ,
@@ -112,4 +124,56 @@ describe(createPaginator.name, () => {
112124
113125 expect ( pages ) . toEqual ( 5 ) ;
114126 } ) ;
127+
128+ it ( "should allow modification of the instantiated command" , async ( ) => {
129+ const paginate = createPaginator < PaginationConfiguration , { inToken ?: string } , { outToken : string } > (
130+ Client ,
131+ CommandObjectToken ,
132+ "inToken" ,
133+ "outToken" ,
134+ "sizeToken"
135+ ) ;
136+
137+ let pages = 0 ;
138+ const client : any = new Client ( ) ;
139+ vi . spyOn ( client , "send" ) ;
140+ const config = {
141+ client,
142+ pageSize : 100 ,
143+ startingToken : {
144+ outToken2 : {
145+ outToken3 : "TOKEN_VALUE" ,
146+ } ,
147+ } ,
148+ withCommand ( command ) {
149+ command . middlewareStack . add ( ( next ) => ( args ) => next ( args ) ) ;
150+ command . middlewareStack . addRelativeTo ( ( next : any ) => ( args : any ) => next ( args ) , {
151+ toMiddleware : "" ,
152+ relation : "before" ,
153+ } ) ;
154+ expect ( command . middlewareStack . add ) . toHaveBeenCalledTimes ( 1 ) ;
155+ expect ( command . middlewareStack . addRelativeTo ) . toHaveBeenCalledTimes ( 1 ) ;
156+ return command ;
157+ } ,
158+ } as Parameters < typeof paginate > [ 0 ] ;
159+ vi . spyOn ( config , "withCommand" ) ;
160+
161+ for await ( const page of paginate ( config , { } ) ) {
162+ pages += 1 ;
163+ if ( pages === 5 ) {
164+ expect ( page . outToken ) . toBeUndefined ( ) ;
165+ } else {
166+ expect ( page . outToken ) . toEqual ( {
167+ outToken2 : {
168+ outToken3 : "TOKEN_VALUE" ,
169+ } ,
170+ } ) ;
171+ }
172+ }
173+
174+ expect ( pages ) . toEqual ( 5 ) ;
175+ expect ( client . send ) . toHaveBeenCalledTimes ( 5 ) ;
176+ expect ( config . withCommand ) . toHaveBeenCalledTimes ( 5 ) ;
177+ expect ( config . withCommand ) . toHaveBeenCalledWith ( expect . any ( CommandObjectToken ) ) ;
178+ } ) ;
115179} ) ;
0 commit comments