Skip to content

Commit fc2c02d

Browse files
add testcase
1 parent 3ea9388 commit fc2c02d

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

test/refresh.test.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,19 @@ function addSetting(key: string, value: any) {
2525
}
2626

2727
let listKvRequestCount = 0;
28+
let failNextListKv = false;
2829
const listKvCallback = () => {
30+
if (failNextListKv) {
31+
throw new Error("Intended error for test");
32+
}
2933
listKvRequestCount++;
3034
};
3135
let getKvRequestCount = 0;
36+
let failNextGetKv = false;
3237
const getKvCallback = () => {
38+
if (failNextGetKv) {
39+
throw new Error("Intended error for test");
40+
}
3341
getKvRequestCount++;
3442
};
3543

@@ -40,6 +48,7 @@ describe("dynamic refresh", function () {
4048
{ value: "red", key: "app.settings.fontColor" },
4149
{ value: "40", key: "app.settings.fontSize" },
4250
{ value: "30", key: "app.settings.fontSize", label: "prod" },
51+
{ value: "someValue", key: "sentinel" },
4352
{ value: "someValue", key: "TestTagKey", tags: { "env": "dev" } }
4453
].map(createMockedKeyValue);
4554
mockAppConfigurationClientListConfigurationSettings([mockedKVs], listKvCallback);
@@ -48,6 +57,8 @@ describe("dynamic refresh", function () {
4857

4958
afterEach(() => {
5059
restoreMocks();
60+
failNextListKv = false;
61+
failNextGetKv = false;
5162
listKvRequestCount = 0;
5263
getKvRequestCount = 0;
5364
});
@@ -239,6 +250,44 @@ describe("dynamic refresh", function () {
239250
expect(settings.get("app.settings.bgColor")).eq("white");
240251
});
241252

253+
it("should continue to refresh when previous refresh-all attempt failed", async () => {
254+
const connectionString = createMockedConnectionString();
255+
const settings = await load(connectionString, {
256+
selectors: [
257+
{ keyFilter: "app.settings.*" }
258+
],
259+
refreshOptions: {
260+
enabled: true,
261+
refreshIntervalInMs: 2000,
262+
watchedSettings: [
263+
{ key: "sentinel" }
264+
]
265+
}
266+
});
267+
expect(settings.get("app.settings.fontSize")).eq("40");
268+
expect(settings.get("app.settings.fontColor")).eq("red");
269+
expect(settings.get("sentinel")).to.be.undefined;
270+
expect(listKvRequestCount).eq(1);
271+
expect(getKvRequestCount).eq(1); // one getKv request for sentinel key
272+
273+
// change setting
274+
addSetting("app.settings.bgColor", "white");
275+
updateSetting("sentinel", "updatedValue");
276+
failNextListKv = true; // force next listConfigurationSettings request to fail
277+
await sleepInMs(2 * 1000 + 1);
278+
await settings.refresh(); // even if the provider detects the sentinel key change, this refresh will fail, so we won't get the updated value of sentinel
279+
expect(listKvRequestCount).eq(1);
280+
expect(getKvRequestCount).eq(2);
281+
expect(settings.get("app.settings.bgColor")).to.be.undefined;
282+
283+
failNextListKv = false;
284+
await sleepInMs(2 * 1000 + 1);
285+
await settings.refresh(); // should continue to refresh even if sentinel key doesn't change now
286+
expect(listKvRequestCount).eq(2);
287+
expect(getKvRequestCount).eq(4);
288+
expect(settings.get("app.settings.bgColor")).eq("white");
289+
});
290+
242291
it("should execute callbacks on successful refresh", async () => {
243292
const connectionString = createMockedConnectionString();
244293
const settings = await load(connectionString, {

0 commit comments

Comments
 (0)