Skip to content

Commit 0905cd9

Browse files
committed
update test
1 parent 5adb089 commit 0905cd9

File tree

2 files changed

+54
-50
lines changed

2 files changed

+54
-50
lines changed

test/failover.test.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import * as chaiAsPromised from "chai-as-promised";
66
chai.use(chaiAsPromised);
77
const expect = chai.expect;
88
import { load } from "./exportedApi";
9-
import { createMockedConnectionString, createMockedFeatureFlag, createMockedKeyValue, mockAppConfigurationClientListConfigurationSettings, mockAppConfigurationClientListConfigurationSettingsWithFailure, mockConfigurationManagerGetClients, restoreMocks } from "./utils/testHelper";
9+
import { createMockedConnectionString, createMockedFeatureFlag, createMockedKeyValue, mockAppConfigurationClientListConfigurationSettingsWithFailure, mockConfigurationManagerGetClients, restoreMocks } from "./utils/testHelper";
1010
import { getValidDomain, isValidEndpoint } from "../src/ConfigurationClientManager";
1111

1212
const mockedKVs = [{
@@ -37,9 +37,7 @@ describe("failover", function () {
3737
const replicaDiscoveryEnabled = true;
3838
const isFailoverable = true;
3939
mockConfigurationManagerGetClients(isFailoverable);
40-
mockAppConfigurationClientListConfigurationSettingsWithFailure();
41-
restoreMocks();
42-
mockAppConfigurationClientListConfigurationSettings(mockedKVs);
40+
mockAppConfigurationClientListConfigurationSettingsWithFailure(mockedKVs);
4341

4442
const connectionString = createMockedConnectionString();
4543
const settings = await load(connectionString, {
@@ -54,9 +52,7 @@ describe("failover", function () {
5452
const replicaDiscoveryEnabled = true;
5553
const isFailoverable = true;
5654
mockConfigurationManagerGetClients(isFailoverable);
57-
mockAppConfigurationClientListConfigurationSettingsWithFailure();
58-
restoreMocks();
59-
mockAppConfigurationClientListConfigurationSettings(mockedFeatureFlags);
55+
mockAppConfigurationClientListConfigurationSettingsWithFailure(mockedFeatureFlags);
6056

6157
const connectionString = createMockedConnectionString();
6258
const settings = await load(connectionString, {

test/utils/testHelper.ts

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {
5195
function 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

Comments
 (0)