@newskit-render/feature-flags 1.9.1 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -48
- package/dist/cjs/__tests__/utils.tests.js +200 -352
- package/dist/cjs/__tests__/utils.tests.js.map +1 -1
- package/dist/cjs/optimizelyClient.d.ts +4 -0
- package/dist/cjs/optimizelyClient.js +41 -0
- package/dist/cjs/optimizelyClient.js.map +1 -0
- package/dist/cjs/types.d.ts +3 -10
- package/dist/cjs/types.js +1 -25
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +3 -3
- package/dist/cjs/utils.js +55 -162
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/__tests__/utils.tests.js +201 -353
- package/dist/esm/__tests__/utils.tests.js.map +1 -1
- package/dist/esm/optimizelyClient.d.ts +4 -0
- package/dist/esm/optimizelyClient.js +36 -0
- package/dist/esm/optimizelyClient.js.map +1 -0
- package/dist/esm/types.d.ts +3 -10
- package/dist/esm/types.js +0 -24
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.d.ts +3 -3
- package/dist/esm/utils.js +52 -159
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -53,62 +53,59 @@ var originalEnv = process.env;
|
|
|
53
53
|
jest.mock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
54
54
|
decide: jest
|
|
55
55
|
.fn()
|
|
56
|
-
.mockImplementation(function (key,
|
|
56
|
+
.mockImplementation(function (key, config) {
|
|
57
57
|
return flagsMock[key];
|
|
58
58
|
}),
|
|
59
59
|
decideForKeys: jest
|
|
60
60
|
.fn()
|
|
61
|
-
.mockImplementation(function (keys,
|
|
61
|
+
.mockImplementation(function (keys, config) {
|
|
62
62
|
var filtered = {};
|
|
63
63
|
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
64
64
|
return filtered;
|
|
65
65
|
}),
|
|
66
66
|
decideAll: jest
|
|
67
67
|
.fn()
|
|
68
|
-
.mockImplementation(function (
|
|
68
|
+
.mockImplementation(function (config) {
|
|
69
69
|
return flagsMock;
|
|
70
70
|
}),
|
|
71
71
|
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
|
|
72
72
|
var flagsMock = {
|
|
73
|
-
|
|
73
|
+
test_flag_1: {
|
|
74
74
|
variationKey: 'on',
|
|
75
75
|
enabled: true,
|
|
76
76
|
variables: {},
|
|
77
77
|
ruleKey: 'default-rollout-216689-29200910123',
|
|
78
|
-
flagKey: '
|
|
78
|
+
flagKey: 'test_flag_1',
|
|
79
79
|
userContext: {
|
|
80
80
|
_qualifiedSegments: null,
|
|
81
|
-
// optimizely: [e],
|
|
82
81
|
userId: 'user123',
|
|
83
82
|
attributes: {},
|
|
84
83
|
forcedDecisionsMap: {},
|
|
85
84
|
},
|
|
86
85
|
reasons: [],
|
|
87
86
|
},
|
|
88
|
-
|
|
87
|
+
test_flag_2: {
|
|
89
88
|
variationKey: 'max_10',
|
|
90
89
|
enabled: true,
|
|
91
90
|
variables: { max_family_members: 10 },
|
|
92
91
|
ruleKey: 'default-rollout-223709-29200910123',
|
|
93
|
-
flagKey: '
|
|
92
|
+
flagKey: 'test_flag_2',
|
|
94
93
|
userContext: {
|
|
95
94
|
_qualifiedSegments: null,
|
|
96
|
-
// optimizely: [e],
|
|
97
95
|
userId: 'user123',
|
|
98
96
|
attributes: {},
|
|
99
97
|
forcedDecisionsMap: {},
|
|
100
98
|
},
|
|
101
99
|
reasons: [],
|
|
102
100
|
},
|
|
103
|
-
|
|
101
|
+
test_flag_3: {
|
|
104
102
|
variationKey: 'off',
|
|
105
103
|
enabled: false,
|
|
106
104
|
variables: {},
|
|
107
105
|
ruleKey: 'default-rollout-225089-29200910123',
|
|
108
|
-
flagKey: '
|
|
106
|
+
flagKey: 'test_flag_3',
|
|
109
107
|
userContext: {
|
|
110
108
|
_qualifiedSegments: null,
|
|
111
|
-
// optimizely: [e],
|
|
112
109
|
userId: 'user123',
|
|
113
110
|
attributes: {},
|
|
114
111
|
forcedDecisionsMap: {},
|
|
@@ -138,51 +135,55 @@ var flagsMock = {
|
|
|
138
135
|
reasons: [],
|
|
139
136
|
},
|
|
140
137
|
};
|
|
141
|
-
// TO DO: Improve test coverage
|
|
142
138
|
beforeEach(function () {
|
|
143
139
|
jest.resetModules();
|
|
144
140
|
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
|
|
145
141
|
});
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
142
|
+
var optionsWithIncludeFlagVariables = {
|
|
143
|
+
includeFlagVariables: true,
|
|
144
|
+
};
|
|
145
|
+
var optionsWithDefaultFlags = {
|
|
146
|
+
defaultFeatureFlags: {
|
|
147
|
+
default_flag: {
|
|
148
|
+
variationKey: 'off',
|
|
149
|
+
enabled: true,
|
|
150
|
+
variables: {},
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
describe('getAllFeatureFlags', function () {
|
|
155
|
+
it('should return all flags data in flat mode with default config', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
151
156
|
var flagsAll;
|
|
152
157
|
return __generator(this, function (_a) {
|
|
153
158
|
switch (_a.label) {
|
|
154
|
-
case 0: return [4 /*yield*/, (0, utils_1.
|
|
159
|
+
case 0: return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)()];
|
|
155
160
|
case 1:
|
|
156
161
|
flagsAll = _a.sent();
|
|
157
162
|
expect(flagsAll).toEqual({
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
163
|
+
test_flag_3: false,
|
|
164
|
+
test_flag_1: true,
|
|
165
|
+
test_flag_2: true,
|
|
161
166
|
testing_flag_with_variations_and_variables: true,
|
|
162
167
|
});
|
|
163
168
|
return [2 /*return*/];
|
|
164
169
|
}
|
|
165
170
|
});
|
|
166
171
|
}); });
|
|
167
|
-
it('should return all flags with included variable data when "includeFlagVariables: true" is added in the
|
|
168
|
-
var
|
|
172
|
+
it('should return all flags with included variable data when "includeFlagVariables: true" is added in the config', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
173
|
+
var flagsAll;
|
|
169
174
|
return __generator(this, function (_a) {
|
|
170
175
|
switch (_a.label) {
|
|
171
|
-
case 0:
|
|
172
|
-
options = {
|
|
173
|
-
includeFlagVariables: true,
|
|
174
|
-
};
|
|
175
|
-
return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)(options)];
|
|
176
|
+
case 0: return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(optionsWithIncludeFlagVariables)];
|
|
176
177
|
case 1:
|
|
177
178
|
flagsAll = _a.sent();
|
|
178
179
|
expect(flagsAll).toEqual({
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
|
|
181
|
+
test_flag_2: {
|
|
181
182
|
variationKey: 'max_10',
|
|
182
183
|
enabled: true,
|
|
183
184
|
variables: { max_family_members: 10 },
|
|
184
185
|
},
|
|
185
|
-
|
|
186
|
+
test_flag_3: {
|
|
186
187
|
variationKey: 'off',
|
|
187
188
|
enabled: false,
|
|
188
189
|
variables: {},
|
|
@@ -205,19 +206,19 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
205
206
|
});
|
|
206
207
|
}); });
|
|
207
208
|
it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
208
|
-
var
|
|
209
|
+
var getAllFeatureFlags, flagsAll;
|
|
209
210
|
return __generator(this, function (_a) {
|
|
210
211
|
switch (_a.label) {
|
|
211
212
|
case 0:
|
|
212
213
|
jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
213
214
|
decideAll: jest
|
|
214
215
|
.fn()
|
|
215
|
-
.mockImplementation(function (
|
|
216
|
+
.mockImplementation(function (config) {
|
|
216
217
|
return undefined;
|
|
217
218
|
}),
|
|
218
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true })
|
|
219
|
-
|
|
220
|
-
return [4 /*yield*/,
|
|
219
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
220
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
221
|
+
return [4 /*yield*/, getAllFeatureFlags()];
|
|
221
222
|
case 1:
|
|
222
223
|
flagsAll = _a.sent();
|
|
223
224
|
expect(flagsAll).toEqual({});
|
|
@@ -225,13 +226,34 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
225
226
|
}
|
|
226
227
|
});
|
|
227
228
|
}); });
|
|
228
|
-
it('should return
|
|
229
|
-
var
|
|
229
|
+
it('should return the defaultFeatureFlags if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
230
|
+
var getAllFeatureFlags, flagsAll;
|
|
231
|
+
return __generator(this, function (_a) {
|
|
232
|
+
switch (_a.label) {
|
|
233
|
+
case 0:
|
|
234
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
235
|
+
decideAll: jest
|
|
236
|
+
.fn()
|
|
237
|
+
.mockImplementation(function (config) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}),
|
|
240
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
241
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
242
|
+
return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
|
|
243
|
+
case 1:
|
|
244
|
+
flagsAll = _a.sent();
|
|
245
|
+
expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
|
|
246
|
+
return [2 /*return*/];
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}); });
|
|
250
|
+
it('should return all flags with custom config', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
251
|
+
var config, flagsAll;
|
|
230
252
|
return __generator(this, function (_a) {
|
|
231
253
|
switch (_a.label) {
|
|
232
254
|
case 0:
|
|
233
255
|
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
234
|
-
|
|
256
|
+
config = {
|
|
235
257
|
sdkConfig: {
|
|
236
258
|
sdkKey: 'custom-optimizely-sdk',
|
|
237
259
|
},
|
|
@@ -241,17 +263,17 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
241
263
|
},
|
|
242
264
|
includeFlagVariables: true,
|
|
243
265
|
};
|
|
244
|
-
return [4 /*yield*/, (0, utils_1.
|
|
266
|
+
return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
|
|
245
267
|
case 1:
|
|
246
268
|
flagsAll = _a.sent();
|
|
247
269
|
expect(flagsAll).toEqual({
|
|
248
|
-
|
|
249
|
-
|
|
270
|
+
test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
|
|
271
|
+
test_flag_2: {
|
|
250
272
|
variationKey: 'max_10',
|
|
251
273
|
enabled: true,
|
|
252
274
|
variables: { max_family_members: 10 },
|
|
253
275
|
},
|
|
254
|
-
|
|
276
|
+
test_flag_3: {
|
|
255
277
|
variationKey: 'off',
|
|
256
278
|
enabled: false,
|
|
257
279
|
variables: {},
|
|
@@ -279,7 +301,7 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
279
301
|
switch (_a.label) {
|
|
280
302
|
case 0:
|
|
281
303
|
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
282
|
-
return [4 /*yield*/, (0, utils_1.
|
|
304
|
+
return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)()];
|
|
283
305
|
case 1:
|
|
284
306
|
flagsAll = _a.sent();
|
|
285
307
|
expect(flagsAll).toEqual({});
|
|
@@ -288,15 +310,15 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
288
310
|
});
|
|
289
311
|
}); });
|
|
290
312
|
it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
291
|
-
var
|
|
313
|
+
var getAllFeatureFlags, flagsAll;
|
|
292
314
|
return __generator(this, function (_a) {
|
|
293
315
|
switch (_a.label) {
|
|
294
316
|
case 0:
|
|
295
317
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
296
318
|
createInstance: jest.fn().mockReturnValue(null),
|
|
297
319
|
}); });
|
|
298
|
-
|
|
299
|
-
return [4 /*yield*/,
|
|
320
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
321
|
+
return [4 /*yield*/, getAllFeatureFlags()];
|
|
300
322
|
case 1:
|
|
301
323
|
flagsAll = _a.sent();
|
|
302
324
|
expect(flagsAll).toEqual({});
|
|
@@ -305,15 +327,15 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
305
327
|
});
|
|
306
328
|
}); });
|
|
307
329
|
it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
308
|
-
var
|
|
330
|
+
var getAllFeatureFlags, flagsAll;
|
|
309
331
|
return __generator(this, function (_a) {
|
|
310
332
|
switch (_a.label) {
|
|
311
333
|
case 0:
|
|
312
334
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
313
335
|
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
|
|
314
336
|
}); });
|
|
315
|
-
|
|
316
|
-
return [4 /*yield*/,
|
|
337
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
338
|
+
return [4 /*yield*/, getAllFeatureFlags()];
|
|
317
339
|
case 1:
|
|
318
340
|
flagsAll = _a.sent();
|
|
319
341
|
expect(flagsAll).toEqual({});
|
|
@@ -322,14 +344,14 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
322
344
|
});
|
|
323
345
|
}); });
|
|
324
346
|
it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
325
|
-
var
|
|
347
|
+
var config;
|
|
326
348
|
return __generator(this, function (_a) {
|
|
327
349
|
switch (_a.label) {
|
|
328
350
|
case 0:
|
|
329
|
-
|
|
351
|
+
config = {
|
|
330
352
|
logLevel: 'critical',
|
|
331
353
|
};
|
|
332
|
-
return [4 /*yield*/, (0, utils_1.
|
|
354
|
+
return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
|
|
333
355
|
case 1:
|
|
334
356
|
_a.sent();
|
|
335
357
|
expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
|
|
@@ -339,7 +361,7 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
339
361
|
});
|
|
340
362
|
}); });
|
|
341
363
|
it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
342
|
-
var
|
|
364
|
+
var getAllFeatureFlags, flagsAll;
|
|
343
365
|
return __generator(this, function (_a) {
|
|
344
366
|
switch (_a.label) {
|
|
345
367
|
case 0:
|
|
@@ -347,15 +369,102 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
347
369
|
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
348
370
|
decideAll: jest
|
|
349
371
|
.fn()
|
|
350
|
-
.mockImplementation(function (
|
|
372
|
+
.mockImplementation(function (config) {
|
|
351
373
|
return flagsMock;
|
|
352
374
|
}),
|
|
353
375
|
}); }, onReady: jest
|
|
354
376
|
.fn()
|
|
355
377
|
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
356
378
|
}); });
|
|
357
|
-
|
|
358
|
-
|
|
379
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
380
|
+
return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
|
|
381
|
+
case 1:
|
|
382
|
+
flagsAll = _a.sent();
|
|
383
|
+
expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
|
|
384
|
+
return [2 /*return*/];
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
}); });
|
|
388
|
+
});
|
|
389
|
+
describe('getFeatureFlagsByKeys', function () {
|
|
390
|
+
it('should return only the requested feature flags included variable data when "includeFlagVariables: true" is added in the config', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
391
|
+
var flagsByKeys;
|
|
392
|
+
return __generator(this, function (_a) {
|
|
393
|
+
switch (_a.label) {
|
|
394
|
+
case 0: return [4 /*yield*/, (0, utils_1.getFeatureFlagsByKeys)(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
|
|
395
|
+
case 1:
|
|
396
|
+
flagsByKeys = _a.sent();
|
|
397
|
+
expect(flagsByKeys).toEqual({
|
|
398
|
+
test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
|
|
399
|
+
test_flag_3: {
|
|
400
|
+
variationKey: 'off',
|
|
401
|
+
enabled: false,
|
|
402
|
+
variables: {},
|
|
403
|
+
},
|
|
404
|
+
});
|
|
405
|
+
return [2 /*return*/];
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}); });
|
|
409
|
+
it('should return only the requested feature flags in flat mode with default config', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
410
|
+
var flagsByKeys;
|
|
411
|
+
return __generator(this, function (_a) {
|
|
412
|
+
switch (_a.label) {
|
|
413
|
+
case 0: return [4 /*yield*/, (0, utils_1.getFeatureFlagsByKeys)([
|
|
414
|
+
'test_flag_3',
|
|
415
|
+
'test_flag_1',
|
|
416
|
+
])];
|
|
417
|
+
case 1:
|
|
418
|
+
flagsByKeys = _a.sent();
|
|
419
|
+
expect(flagsByKeys).toEqual({
|
|
420
|
+
test_flag_1: true,
|
|
421
|
+
test_flag_3: false,
|
|
422
|
+
});
|
|
423
|
+
return [2 /*return*/];
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
}); });
|
|
427
|
+
it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
428
|
+
var getFeatureFlagsByKeys, flagsAll;
|
|
429
|
+
return __generator(this, function (_a) {
|
|
430
|
+
switch (_a.label) {
|
|
431
|
+
case 0:
|
|
432
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
433
|
+
decideForKeys: jest
|
|
434
|
+
.fn()
|
|
435
|
+
.mockImplementation(function (config) {
|
|
436
|
+
return undefined;
|
|
437
|
+
}),
|
|
438
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
439
|
+
getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
|
|
440
|
+
return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'])];
|
|
441
|
+
case 1:
|
|
442
|
+
flagsAll = _a.sent();
|
|
443
|
+
expect(flagsAll).toEqual({});
|
|
444
|
+
return [2 /*return*/];
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
}); });
|
|
448
|
+
it('should return defaultFeatureFlags when they have been passed and optimizely client creation fails', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
449
|
+
var getFeatureFlagsByKeys, config, flagsByKeys;
|
|
450
|
+
return __generator(this, function (_a) {
|
|
451
|
+
switch (_a.label) {
|
|
452
|
+
case 0:
|
|
453
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
454
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
455
|
+
decideForKeys: jest
|
|
456
|
+
.fn()
|
|
457
|
+
.mockImplementation(function (keys, config) {
|
|
458
|
+
var filtered = {};
|
|
459
|
+
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
460
|
+
return filtered;
|
|
461
|
+
}),
|
|
462
|
+
}); }, onReady: jest
|
|
463
|
+
.fn()
|
|
464
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
465
|
+
}); });
|
|
466
|
+
getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
|
|
467
|
+
config = {
|
|
359
468
|
defaultFeatureFlags: {
|
|
360
469
|
default_flag: {
|
|
361
470
|
variationKey: 'off',
|
|
@@ -364,304 +473,43 @@ describe('initAndGetFeatureFlag', function () {
|
|
|
364
473
|
},
|
|
365
474
|
},
|
|
366
475
|
};
|
|
367
|
-
return [4 /*yield*/,
|
|
476
|
+
return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], config)];
|
|
368
477
|
case 1:
|
|
369
|
-
|
|
370
|
-
expect(
|
|
478
|
+
flagsByKeys = _a.sent();
|
|
479
|
+
expect(flagsByKeys).toEqual(config.defaultFeatureFlags);
|
|
480
|
+
return [2 /*return*/];
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
}); });
|
|
484
|
+
it('should return empty object when no default flag have been passed and optimizely client creation fails', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
485
|
+
var getFeatureFlagsByKeys, flagsByKeys;
|
|
486
|
+
return __generator(this, function (_a) {
|
|
487
|
+
switch (_a.label) {
|
|
488
|
+
case 0:
|
|
489
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
490
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
491
|
+
decideForKeys: jest
|
|
492
|
+
.fn()
|
|
493
|
+
.mockImplementation(function (keys, config) {
|
|
494
|
+
var filtered = {};
|
|
495
|
+
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
496
|
+
return filtered;
|
|
497
|
+
}),
|
|
498
|
+
}); }, onReady: jest
|
|
499
|
+
.fn()
|
|
500
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
501
|
+
}); });
|
|
502
|
+
getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
|
|
503
|
+
return [4 /*yield*/, getFeatureFlagsByKeys([
|
|
504
|
+
'test_flag_3',
|
|
505
|
+
'test_flag_1',
|
|
506
|
+
])];
|
|
507
|
+
case 1:
|
|
508
|
+
flagsByKeys = _a.sent();
|
|
509
|
+
expect(flagsByKeys).toEqual({});
|
|
371
510
|
return [2 /*return*/];
|
|
372
511
|
}
|
|
373
512
|
});
|
|
374
513
|
}); });
|
|
375
514
|
});
|
|
376
|
-
// describe('getFlagsAll', () => {
|
|
377
|
-
// it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
|
|
378
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
379
|
-
// createInstance: () => ({
|
|
380
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
381
|
-
// createUserContext: () => ({
|
|
382
|
-
// decideAll: jest
|
|
383
|
-
// .fn()
|
|
384
|
-
// .mockImplementation((options?: OptimizelyDecideOption[]) => {
|
|
385
|
-
// return flagsMock as {
|
|
386
|
-
// [key: string]: Omit<OptimizelyDecision, 'userContext'>
|
|
387
|
-
// }
|
|
388
|
-
// }),
|
|
389
|
-
// }),
|
|
390
|
-
// onReady: jest
|
|
391
|
-
// .fn()
|
|
392
|
-
// .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
|
|
393
|
-
// }),
|
|
394
|
-
// }))
|
|
395
|
-
// const { getFlagsAll } = require('../utils')
|
|
396
|
-
// const options: SDKConfig = {
|
|
397
|
-
// defaultFeatureFlags: {
|
|
398
|
-
// default_flag: {
|
|
399
|
-
// variationKey: 'off',
|
|
400
|
-
// enabled: true,
|
|
401
|
-
// variables: {},
|
|
402
|
-
// },
|
|
403
|
-
// },
|
|
404
|
-
// }
|
|
405
|
-
// const flagsAll = await getFlagsAll(options)
|
|
406
|
-
// expect(flagsAll).toEqual(options.defaultFeatureFlags)
|
|
407
|
-
// })
|
|
408
|
-
// it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
|
|
409
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
410
|
-
// createInstance: () => ({
|
|
411
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
412
|
-
// createUserContext: () => ({
|
|
413
|
-
// decideAll: jest
|
|
414
|
-
// .fn()
|
|
415
|
-
// .mockImplementation((options?: OptimizelyDecideOption[]) => {
|
|
416
|
-
// return flagsMock as {
|
|
417
|
-
// [key: string]: Omit<OptimizelyDecision, 'userContext'>
|
|
418
|
-
// }
|
|
419
|
-
// }),
|
|
420
|
-
// }),
|
|
421
|
-
// onReady: jest
|
|
422
|
-
// .fn()
|
|
423
|
-
// .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
|
|
424
|
-
// }),
|
|
425
|
-
// }))
|
|
426
|
-
// const { getFlagsAll } = require('../utils')
|
|
427
|
-
// const flagsAll = await getFlagsAll()
|
|
428
|
-
// expect(flagsAll).toEqual({})
|
|
429
|
-
// })
|
|
430
|
-
// })
|
|
431
|
-
// describe('closeFlagsInstance', () => {
|
|
432
|
-
// it('should close sdk instance successfully', async () => {
|
|
433
|
-
// const spy = jest.spyOn(console, 'log')
|
|
434
|
-
// await getFlagsAll()
|
|
435
|
-
// await closeFlagsInstance()
|
|
436
|
-
// expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully')
|
|
437
|
-
// })
|
|
438
|
-
// it('should not close sdk instance sucessfully', async () => {
|
|
439
|
-
// const spy = jest.spyOn(console, 'log')
|
|
440
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
441
|
-
// createInstance: () => ({
|
|
442
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
443
|
-
// createUserContext: () => ({
|
|
444
|
-
// decide: jest
|
|
445
|
-
// .fn()
|
|
446
|
-
// .mockImplementation(
|
|
447
|
-
// (key: string, options?: OptimizelyDecideOption[]) => {
|
|
448
|
-
// return getFlagsAll as Omit<OptimizelyDecision, 'userContext'>
|
|
449
|
-
// }
|
|
450
|
-
// ),
|
|
451
|
-
// }),
|
|
452
|
-
// onReady: jest.fn().mockResolvedValue({ success: true }),
|
|
453
|
-
// close: jest
|
|
454
|
-
// .fn()
|
|
455
|
-
// .mockResolvedValue({ success: false, reason: 'Closing rejected' }),
|
|
456
|
-
// }),
|
|
457
|
-
// }))
|
|
458
|
-
// const { getFlagsAll, closeFlagsInstance } = require('../utils')
|
|
459
|
-
// await getFlagsAll()
|
|
460
|
-
// await closeFlagsInstance()
|
|
461
|
-
// expect(spy).toHaveBeenCalledWith(
|
|
462
|
-
// 'closing Optimizely instance failed, reason: Closing rejected'
|
|
463
|
-
// )
|
|
464
|
-
// })
|
|
465
|
-
// })
|
|
466
|
-
// describe('getFlag', () => {
|
|
467
|
-
// it('should return a flag with default options', async () => {
|
|
468
|
-
// const flag = await getFlag('testing_flag_with_variations_and_variables')
|
|
469
|
-
// expect(flag).toEqual({
|
|
470
|
-
// testing_flag_with_variations_and_variables: {
|
|
471
|
-
// variationKey: 'primary_with_new_weclome_message_and_max_accounts',
|
|
472
|
-
// enabled: true,
|
|
473
|
-
// variables: {
|
|
474
|
-
// family_primary_welcome_message: 'This is the new message',
|
|
475
|
-
// family_primary_enable_secondary_accounts: true,
|
|
476
|
-
// family_primary_max_secondary_accounts: 10,
|
|
477
|
-
// family_primary_metadata_json: {
|
|
478
|
-
// metadata1: 'a',
|
|
479
|
-
// },
|
|
480
|
-
// },
|
|
481
|
-
// },
|
|
482
|
-
// })
|
|
483
|
-
// })
|
|
484
|
-
// it('should return empty object if no flags are fetched', async () => {
|
|
485
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
486
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk'),
|
|
487
|
-
// createInstance: () => ({
|
|
488
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
489
|
-
// createUserContext: () => ({
|
|
490
|
-
// decide: jest
|
|
491
|
-
// .fn()
|
|
492
|
-
// .mockImplementation((options?: OptimizelyDecideOption[]) => {
|
|
493
|
-
// return undefined
|
|
494
|
-
// }),
|
|
495
|
-
// }),
|
|
496
|
-
// onReady: jest.fn().mockResolvedValue({ success: true }),
|
|
497
|
-
// close: jest.fn().mockResolvedValue({ success: true }),
|
|
498
|
-
// }),
|
|
499
|
-
// }))
|
|
500
|
-
// const { getFlag } = require('../utils')
|
|
501
|
-
// const flagsAll = await getFlag('testing_flag_with_variations_and_variables')
|
|
502
|
-
// expect(flagsAll).toEqual({})
|
|
503
|
-
// })
|
|
504
|
-
// it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
|
|
505
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
506
|
-
// createInstance: () => ({
|
|
507
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
508
|
-
// createUserContext: () => ({
|
|
509
|
-
// decide: jest
|
|
510
|
-
// .fn()
|
|
511
|
-
// .mockImplementation(
|
|
512
|
-
// (key: string, options?: OptimizelyDecideOption[]) => {
|
|
513
|
-
// return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
|
|
514
|
-
// }
|
|
515
|
-
// ),
|
|
516
|
-
// }),
|
|
517
|
-
// onReady: jest
|
|
518
|
-
// .fn()
|
|
519
|
-
// .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
|
|
520
|
-
// }),
|
|
521
|
-
// }))
|
|
522
|
-
// const { getFlag } = require('../utils')
|
|
523
|
-
// const options: SDKConfig = {
|
|
524
|
-
// defaultFeatureFlags: {
|
|
525
|
-
// default_flag: {
|
|
526
|
-
// variationKey: 'off',
|
|
527
|
-
// enabled: true,
|
|
528
|
-
// variables: {},
|
|
529
|
-
// },
|
|
530
|
-
// },
|
|
531
|
-
// }
|
|
532
|
-
// const flag = await getFlag(
|
|
533
|
-
// 'testing_flag_with_variations_and_variables',
|
|
534
|
-
// options
|
|
535
|
-
// )
|
|
536
|
-
// expect(flag).toEqual(options.defaultFeatureFlags)
|
|
537
|
-
// })
|
|
538
|
-
// it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
|
|
539
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
540
|
-
// createInstance: () => ({
|
|
541
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
542
|
-
// createUserContext: () => ({
|
|
543
|
-
// decide: jest
|
|
544
|
-
// .fn()
|
|
545
|
-
// .mockImplementation(
|
|
546
|
-
// (key: string, options?: OptimizelyDecideOption[]) => {
|
|
547
|
-
// return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
|
|
548
|
-
// }
|
|
549
|
-
// ),
|
|
550
|
-
// }),
|
|
551
|
-
// onReady: jest
|
|
552
|
-
// .fn()
|
|
553
|
-
// .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
|
|
554
|
-
// }),
|
|
555
|
-
// }))
|
|
556
|
-
// const { getFlag } = require('../utils')
|
|
557
|
-
// const flag = await getFlag('testing_flag_with_variations_and_variables')
|
|
558
|
-
// expect(flag).toEqual({})
|
|
559
|
-
// })
|
|
560
|
-
// })
|
|
561
|
-
// describe('getFlagsByKeys', () => {
|
|
562
|
-
// it('should return flags by keys with default options', async () => {
|
|
563
|
-
// const flagsByKeys = await getFlagsByKeys([
|
|
564
|
-
// 'another_test_flag_1',
|
|
565
|
-
// 'qualtrics_flag',
|
|
566
|
-
// ])
|
|
567
|
-
// expect(flagsByKeys).toEqual({
|
|
568
|
-
// qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
|
|
569
|
-
// another_test_flag_1: {
|
|
570
|
-
// variationKey: 'off',
|
|
571
|
-
// enabled: false,
|
|
572
|
-
// variables: {},
|
|
573
|
-
// },
|
|
574
|
-
// })
|
|
575
|
-
// })
|
|
576
|
-
// it('should return empty object if no flags are fetched', async () => {
|
|
577
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
578
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk'),
|
|
579
|
-
// createInstance: () => ({
|
|
580
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
581
|
-
// createUserContext: () => ({
|
|
582
|
-
// decideForKeys: jest
|
|
583
|
-
// .fn()
|
|
584
|
-
// .mockImplementation((options?: OptimizelyDecideOption[]) => {
|
|
585
|
-
// return undefined
|
|
586
|
-
// }),
|
|
587
|
-
// }),
|
|
588
|
-
// onReady: jest.fn().mockResolvedValue({ success: true }),
|
|
589
|
-
// close: jest.fn().mockResolvedValue({ success: true }),
|
|
590
|
-
// }),
|
|
591
|
-
// }))
|
|
592
|
-
// const { getFlagsByKeys } = require('../utils')
|
|
593
|
-
// const flagsAll = await getFlagsByKeys([
|
|
594
|
-
// 'another_test_flag_1',
|
|
595
|
-
// 'qualtrics_flag',
|
|
596
|
-
// ])
|
|
597
|
-
// expect(flagsAll).toEqual({})
|
|
598
|
-
// })
|
|
599
|
-
// it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
|
|
600
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
601
|
-
// createInstance: () => ({
|
|
602
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
603
|
-
// createUserContext: () => ({
|
|
604
|
-
// decideForKeys: jest
|
|
605
|
-
// .fn()
|
|
606
|
-
// .mockImplementation(
|
|
607
|
-
// (keys: string[], options?: OptimizelyDecideOption[]) => {
|
|
608
|
-
// const filtered: {
|
|
609
|
-
// [key: string]: Omit<OptimizelyDecision, 'userContext'>
|
|
610
|
-
// } = {}
|
|
611
|
-
// keys.forEach((k) => (filtered[k] = flagsMock[k]))
|
|
612
|
-
// return filtered
|
|
613
|
-
// }
|
|
614
|
-
// ),
|
|
615
|
-
// }),
|
|
616
|
-
// onReady: jest
|
|
617
|
-
// .fn()
|
|
618
|
-
// .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
|
|
619
|
-
// }),
|
|
620
|
-
// }))
|
|
621
|
-
// const { getFlagsByKeys } = require('../utils')
|
|
622
|
-
// const options: SDKConfig = {
|
|
623
|
-
// defaultFeatureFlags: {
|
|
624
|
-
// default_flag: {
|
|
625
|
-
// variationKey: 'off',
|
|
626
|
-
// enabled: true,
|
|
627
|
-
// variables: {},
|
|
628
|
-
// },
|
|
629
|
-
// },
|
|
630
|
-
// }
|
|
631
|
-
// const flagsByKeys = await getFlagsByKeys(
|
|
632
|
-
// ['another_test_flag_1', 'qualtrics_flag'],
|
|
633
|
-
// options
|
|
634
|
-
// )
|
|
635
|
-
// expect(flagsByKeys).toEqual(options.defaultFeatureFlags)
|
|
636
|
-
// })
|
|
637
|
-
// it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
|
|
638
|
-
// jest.doMock('@optimizely/optimizely-sdk', () => ({
|
|
639
|
-
// createInstance: () => ({
|
|
640
|
-
// ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
|
|
641
|
-
// createUserContext: () => ({
|
|
642
|
-
// decideForKeys: jest
|
|
643
|
-
// .fn()
|
|
644
|
-
// .mockImplementation(
|
|
645
|
-
// (keys: string[], options?: OptimizelyDecideOption[]) => {
|
|
646
|
-
// const filtered: {
|
|
647
|
-
// [key: string]: Omit<OptimizelyDecision, 'userContext'>
|
|
648
|
-
// } = {}
|
|
649
|
-
// keys.forEach((k) => (filtered[k] = flagsMock[k]))
|
|
650
|
-
// return filtered
|
|
651
|
-
// }
|
|
652
|
-
// ),
|
|
653
|
-
// }),
|
|
654
|
-
// onReady: jest
|
|
655
|
-
// .fn()
|
|
656
|
-
// .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
|
|
657
|
-
// }),
|
|
658
|
-
// }))
|
|
659
|
-
// const { getFlagsByKeys } = require('../utils')
|
|
660
|
-
// const flagsByKeys = await getFlagsByKeys([
|
|
661
|
-
// 'another_test_flag_1',
|
|
662
|
-
// 'qualtrics_flag',
|
|
663
|
-
// ])
|
|
664
|
-
// expect(flagsByKeys).toEqual({})
|
|
665
|
-
// })
|
|
666
|
-
// })
|
|
667
515
|
//# sourceMappingURL=utils.tests.js.map
|