@@ -40,6 +40,50 @@ function _filterKVs(unfilteredKvs: ConfigurationSetting[], listOptions: any) {
4040 } ) ;
4141}
4242
43+ function getMockedIterator ( pages : ConfigurationSetting [ ] [ ] , kvs : ConfigurationSetting [ ] , listOptions : any ) {
44+ const mockIterator : AsyncIterableIterator < any > & { byPage ( ) : AsyncIterableIterator < any > } = {
45+ [ Symbol . asyncIterator ] ( ) : AsyncIterableIterator < any > {
46+ kvs = _filterKVs ( pages . flat ( ) , listOptions ) ;
47+ return this ;
48+ } ,
49+ next ( ) {
50+ const value = kvs . shift ( ) ;
51+ return Promise . resolve ( { done : ! value , value } ) ;
52+ } ,
53+ byPage ( ) : AsyncIterableIterator < any > {
54+ let remainingPages ;
55+ const pageEtags = listOptions ?. pageEtags ? [ ...listOptions . pageEtags ] : undefined ; // a copy of the original list
56+ return {
57+ [ Symbol . asyncIterator ] ( ) : AsyncIterableIterator < any > {
58+ remainingPages = [ ...pages ] ;
59+ return this ;
60+ } ,
61+ next ( ) {
62+ const pageItems = remainingPages . shift ( ) ;
63+ const pageEtag = pageEtags ?. shift ( ) ;
64+ if ( pageItems === undefined ) {
65+ return Promise . resolve ( { done : true , value : undefined } ) ;
66+ } else {
67+ const items = _filterKVs ( pageItems ?? [ ] , listOptions ) ;
68+ const etag = _sha256 ( JSON . stringify ( items ) ) ;
69+ const statusCode = pageEtag === etag ? 304 : 200 ;
70+ return Promise . resolve ( {
71+ done : false ,
72+ value : {
73+ items,
74+ etag,
75+ _response : { status : statusCode }
76+ }
77+ } ) ;
78+ }
79+ }
80+ } ;
81+ }
82+ } ;
83+
84+ return mockIterator as any ;
85+ }
86+
4387/**
4488 * Mocks the listConfigurationSettings method of AppConfigurationClient to return the provided pages of ConfigurationSetting.
4589 * E.g.
@@ -51,48 +95,8 @@ function _filterKVs(unfilteredKvs: ConfigurationSetting[], listOptions: any) {
5195function mockAppConfigurationClientListConfigurationSettings ( ...pages : ConfigurationSetting [ ] [ ] ) {
5296
5397 sinon . stub ( AppConfigurationClient . prototype , "listConfigurationSettings" ) . callsFake ( ( listOptions ) => {
54- let kvs = _filterKVs ( pages . flat ( ) , listOptions ) ;
55- const mockIterator : AsyncIterableIterator < any > & { byPage ( ) : AsyncIterableIterator < any > } = {
56- [ Symbol . asyncIterator ] ( ) : AsyncIterableIterator < any > {
57- kvs = _filterKVs ( pages . flat ( ) , listOptions ) ;
58- return this ;
59- } ,
60- next ( ) {
61- const value = kvs . shift ( ) ;
62- return Promise . resolve ( { done : ! value , value } ) ;
63- } ,
64- byPage ( ) : AsyncIterableIterator < any > {
65- let remainingPages ;
66- const pageEtags = listOptions ?. pageEtags ? [ ...listOptions . pageEtags ] : undefined ; // a copy of the original list
67- return {
68- [ Symbol . asyncIterator ] ( ) : AsyncIterableIterator < any > {
69- remainingPages = [ ...pages ] ;
70- return this ;
71- } ,
72- next ( ) {
73- const pageItems = remainingPages . shift ( ) ;
74- const pageEtag = pageEtags ?. shift ( ) ;
75- if ( pageItems === undefined ) {
76- return Promise . resolve ( { done : true , value : undefined } ) ;
77- } else {
78- const items = _filterKVs ( pageItems ?? [ ] , listOptions ) ;
79- const etag = _sha256 ( JSON . stringify ( items ) ) ;
80- const statusCode = pageEtag === etag ? 304 : 200 ;
81- return Promise . resolve ( {
82- done : false ,
83- value : {
84- items,
85- etag,
86- _response : { status : statusCode }
87- }
88- } ) ;
89- }
90- }
91- } ;
92- }
93- } ;
94-
95- return mockIterator as any ;
98+ const kvs = _filterKVs ( pages . flat ( ) , listOptions ) ;
99+ return getMockedIterator ( pages , kvs , listOptions ) ;
96100 } ) ;
97101}
98102
@@ -131,11 +135,15 @@ function mockAppConfigurationClientGetConfigurationSetting(kvList) {
131135 } ) ;
132136}
133137
134- function mockAppConfigurationClientListConfigurationSettingsWithFailure ( ) {
138+ function mockAppConfigurationClientListConfigurationSettingsWithFailure ( ... pages : ConfigurationSetting [ ] [ ] ) {
135139 const stub = sinon . stub ( AppConfigurationClient . prototype , "listConfigurationSettings" ) ;
136140
137141 // Configure the stub to throw an error on the first call and return mockedKVs on the second call
138142 stub . onFirstCall ( ) . throws ( new RestError ( "Internal Server Error" , { statusCode : 500 } ) ) ;
143+ stub . callsFake ( ( listOptions ) => {
144+ const kvs = _filterKVs ( pages . flat ( ) , listOptions ) ;
145+ return getMockedIterator ( pages , kvs , listOptions ) ;
146+ } ) ;
139147}
140148
141149// uriValueList: [["<secretUri>", "value"], ...]
0 commit comments