@@ -40,6 +40,50 @@ function _filterKVs(unfilteredKvs: ConfigurationSetting[], listOptions: any) {
40
40
} ) ;
41
41
}
42
42
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
+
43
87
/**
44
88
* Mocks the listConfigurationSettings method of AppConfigurationClient to return the provided pages of ConfigurationSetting.
45
89
* E.g.
@@ -51,48 +95,8 @@ function _filterKVs(unfilteredKvs: ConfigurationSetting[], listOptions: any) {
51
95
function mockAppConfigurationClientListConfigurationSettings ( ...pages : ConfigurationSetting [ ] [ ] ) {
52
96
53
97
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 ) ;
96
100
} ) ;
97
101
}
98
102
@@ -131,11 +135,15 @@ function mockAppConfigurationClientGetConfigurationSetting(kvList) {
131
135
} ) ;
132
136
}
133
137
134
- function mockAppConfigurationClientListConfigurationSettingsWithFailure ( ) {
138
+ function mockAppConfigurationClientListConfigurationSettingsWithFailure ( ... pages : ConfigurationSetting [ ] [ ] ) {
135
139
const stub = sinon . stub ( AppConfigurationClient . prototype , "listConfigurationSettings" ) ;
136
140
137
141
// Configure the stub to throw an error on the first call and return mockedKVs on the second call
138
142
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
+ } ) ;
139
147
}
140
148
141
149
// uriValueList: [["<secretUri>", "value"], ...]
0 commit comments