Skip to content

Commit a039ff5

Browse files
committed
WVT-197: tries to refresh version with every request until successful - tests
1 parent 16a2206 commit a039ff5

File tree

2 files changed

+144
-1
lines changed

2 files changed

+144
-1
lines changed

utils/dbVersion.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,11 @@ export class DbVersionProvider {
5454
refresh(force = false) {
5555
if (force || !this.versionPromise) {
5656
this.versionPromise = undefined;
57-
this.versionGetter().then(assignPromise.bind(this));
57+
return this.versionGetter()
58+
.then(assignPromise.bind(this))
59+
.then(() => Promise.resolve(true));
5860
}
61+
return Promise.resolve(false);
5962
}
6063
}
6164

utils/journey.test.js

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import { DbVersionProvider, DbVersionSupport } from "./dbVersion";
2+
3+
const EMPTY_VERSION = "";
4+
const VERSION_1 = "1.2.3";
5+
const VERSION_2 = "2.3.4";
6+
7+
describe("db version provider", () => {
8+
it("should return empty version", () => {
9+
const versionGetter = () => Promise.resolve(EMPTY_VERSION);
10+
const dbVersionProvider = new DbVersionProvider(versionGetter);
11+
12+
return dbVersionProvider.getVersionPromise()
13+
.then(version => expect(version).toBe(EMPTY_VERSION))
14+
.catch(() => fail("version should always resolve successfully"));
15+
});
16+
17+
it("should return proper version", () => {
18+
const versionGetter = () => Promise.resolve(VERSION_1);
19+
const dbVersionProvider = new DbVersionProvider(versionGetter);
20+
21+
return dbVersionProvider.getVersionPromise()
22+
.then(version => expect(version).toBe(VERSION_1))
23+
.catch(() => fail("version should always resolve successfully"));
24+
});
25+
26+
it("should return new version after refresh", async () => {
27+
let callsCounter = 0;
28+
const versionGetter = () => {
29+
switch(++callsCounter) {
30+
case 1:
31+
return Promise.resolve(VERSION_1);
32+
case 2:
33+
return Promise.resolve(VERSION_2);
34+
default:
35+
fail("should not be called more then 2 times");
36+
}
37+
};
38+
const dbVersionProvider = new DbVersionProvider(versionGetter);
39+
40+
await dbVersionProvider.getVersionPromise()
41+
.then(version => expect(version).toBe(VERSION_1))
42+
.catch(() => fail("version should always resolve successfully"));
43+
await dbVersionProvider.refresh(true);
44+
await dbVersionProvider.getVersionPromise()
45+
.then(version => expect(version).toBe(VERSION_2))
46+
.catch(() => fail("version should always resolve successfully"));
47+
});
48+
49+
it("should fetch version once", async () => {
50+
let callsCounter = 0;
51+
const versionGetter = () => {
52+
switch(++callsCounter) {
53+
case 1:
54+
return Promise.resolve(VERSION_1);
55+
default:
56+
fail("should not be called more then 1 time");
57+
}
58+
};
59+
const dbVersionProvider = new DbVersionProvider(versionGetter);
60+
61+
await dbVersionProvider.getVersionPromise()
62+
.then(version => expect(version).toBe(VERSION_1))
63+
.catch(() => fail("version should always resolve successfully"));
64+
await dbVersionProvider.getVersionPromise()
65+
.then(version => expect(version).toBe(VERSION_1))
66+
.catch(() => fail("version should always resolve successfully"));
67+
await dbVersionProvider.getVersionPromise()
68+
.then(version => expect(version).toBe(VERSION_1))
69+
.catch(() => fail("version should always resolve successfully"));
70+
71+
expect(callsCounter).toBe(1);
72+
});
73+
74+
it("should fetch version until success", async () => {
75+
let callsCounter = 0;
76+
const versionGetter = () => {
77+
switch(++callsCounter) {
78+
case 1:
79+
case 2:
80+
return Promise.resolve(EMPTY_VERSION);
81+
case 3:
82+
return Promise.resolve(VERSION_1);
83+
default:
84+
fail("should not be called more then 3 times");
85+
}
86+
};
87+
const dbVersionProvider = new DbVersionProvider(versionGetter);
88+
89+
await dbVersionProvider.getVersionPromise()
90+
.then(version => expect(version).toBe(EMPTY_VERSION))
91+
.catch(() => fail("version should always resolve successfully"));
92+
await dbVersionProvider.getVersionPromise()
93+
.then(version => expect(version).toBe(EMPTY_VERSION))
94+
.catch(() => fail("version should always resolve successfully"));
95+
await dbVersionProvider.getVersionPromise()
96+
.then(version => expect(version).toBe(VERSION_1))
97+
.catch(() => fail("version should always resolve successfully"));
98+
await dbVersionProvider.getVersionPromise()
99+
.then(version => expect(version).toBe(VERSION_1))
100+
.catch(() => fail("version should always resolve successfully"));
101+
await dbVersionProvider.getVersionPromise()
102+
.then(version => expect(version).toBe(VERSION_1))
103+
.catch(() => fail("version should always resolve successfully"));
104+
105+
expect(callsCounter).toBe(3);
106+
});
107+
});
108+
109+
110+
describe("db version support", () => {
111+
it("should not support", () => {
112+
const notSupportedVersions = ["0.11", "1.13.9", "1.13", "1.0"];
113+
notSupportedVersions.forEach(async version => {
114+
const dbVersionProvider = { getVersionPromise: () => Promise.resolve(version) };
115+
const dbVersionSupport = new DbVersionSupport(dbVersionProvider);
116+
117+
await dbVersionSupport.supportsClassNameNamespacedEndpointsPromise()
118+
.then(support => {
119+
expect(support.supports).toBe(false);
120+
expect(support.version).toBe(version);
121+
})
122+
.catch(() => fail("version should always resolve successfully"));
123+
});
124+
});
125+
126+
it ("should support", () => {
127+
const supportedVersions = ["1.14.0", "1.14.9", "1.100", "2.0", "10.11.12"];
128+
supportedVersions.forEach(async version => {
129+
const dbVersionProvider = { getVersionPromise: () => Promise.resolve(version) };
130+
const dbVersionSupport = new DbVersionSupport(dbVersionProvider);
131+
132+
await dbVersionSupport.supportsClassNameNamespacedEndpointsPromise()
133+
.then(support => {
134+
expect(support.supports).toBe(true);
135+
expect(support.version).toBe(version);
136+
})
137+
.catch(() => fail("version should always resolve successfully"));
138+
});
139+
});
140+
});

0 commit comments

Comments
 (0)