@newskit-render/feature-flags 1.8.3 → 1.9.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/dist/cjs/__tests__/utils.tests.js +363 -340
- package/dist/cjs/__tests__/utils.tests.js.map +1 -1
- package/dist/cjs/types.d.ts +1 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +1 -4
- package/dist/cjs/utils.js +103 -81
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/__tests__/utils.tests.js +365 -344
- package/dist/esm/__tests__/utils.tests.js.map +1 -1
- package/dist/esm/types.d.ts +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.d.ts +1 -4
- package/dist/esm/utils.js +101 -76
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -49,7 +49,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
50
|
var optimizely_sdk_1 = require("@optimizely/optimizely-sdk");
|
|
51
51
|
var utils_1 = require("../utils");
|
|
52
|
-
var types_1 = require("../types");
|
|
53
52
|
var originalEnv = process.env;
|
|
54
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 ({
|
|
55
54
|
decide: jest
|
|
@@ -139,6 +138,7 @@ var flagsMock = {
|
|
|
139
138
|
reasons: [],
|
|
140
139
|
},
|
|
141
140
|
};
|
|
141
|
+
// TO DO: Improve test coverage
|
|
142
142
|
beforeEach(function () {
|
|
143
143
|
jest.resetModules();
|
|
144
144
|
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
|
|
@@ -146,59 +146,33 @@ beforeEach(function () {
|
|
|
146
146
|
afterEach(function () {
|
|
147
147
|
(0, utils_1._resetInstance)();
|
|
148
148
|
});
|
|
149
|
-
describe('
|
|
150
|
-
it('should return all flags with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
149
|
+
describe('initAndGetFeatureFlag', function () {
|
|
150
|
+
it('should return all flags data in flat mode with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
151
151
|
var flagsAll;
|
|
152
152
|
return __generator(this, function (_a) {
|
|
153
153
|
switch (_a.label) {
|
|
154
|
-
case 0: return [4 /*yield*/, (0, utils_1.
|
|
154
|
+
case 0: return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)()];
|
|
155
155
|
case 1:
|
|
156
156
|
flagsAll = _a.sent();
|
|
157
157
|
expect(flagsAll).toEqual({
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
variables: { max_family_members: 10 },
|
|
163
|
-
},
|
|
164
|
-
another_test_flag_1: {
|
|
165
|
-
variationKey: 'off',
|
|
166
|
-
enabled: false,
|
|
167
|
-
variables: {},
|
|
168
|
-
},
|
|
169
|
-
testing_flag_with_variations_and_variables: {
|
|
170
|
-
variationKey: 'primary_with_new_weclome_message_and_max_accounts',
|
|
171
|
-
enabled: true,
|
|
172
|
-
variables: {
|
|
173
|
-
family_primary_welcome_message: 'This is the new message',
|
|
174
|
-
family_primary_enable_secondary_accounts: true,
|
|
175
|
-
family_primary_max_secondary_accounts: 10,
|
|
176
|
-
family_primary_metadata_json: {
|
|
177
|
-
metadata1: 'a',
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
},
|
|
158
|
+
another_test_flag_1: false,
|
|
159
|
+
qualtrics_flag: true,
|
|
160
|
+
testing_flag: true,
|
|
161
|
+
testing_flag_with_variations_and_variables: true,
|
|
181
162
|
});
|
|
182
163
|
return [2 /*return*/];
|
|
183
164
|
}
|
|
184
165
|
});
|
|
185
166
|
}); });
|
|
186
|
-
it('should return all flags with
|
|
167
|
+
it('should return all flags with included variable data when "includeFlagVariables: true" is added in the options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
187
168
|
var options, flagsAll;
|
|
188
169
|
return __generator(this, function (_a) {
|
|
189
170
|
switch (_a.label) {
|
|
190
171
|
case 0:
|
|
191
|
-
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
192
172
|
options = {
|
|
193
|
-
|
|
194
|
-
sdkKey: 'custom-optimizely-sdk',
|
|
195
|
-
},
|
|
196
|
-
userData: {
|
|
197
|
-
userId: 'user456',
|
|
198
|
-
attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
|
|
199
|
-
},
|
|
173
|
+
includeFlagVariables: true,
|
|
200
174
|
};
|
|
201
|
-
return [4 /*yield*/, (0, utils_1.
|
|
175
|
+
return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)(options)];
|
|
202
176
|
case 1:
|
|
203
177
|
flagsAll = _a.sent();
|
|
204
178
|
expect(flagsAll).toEqual({
|
|
@@ -231,7 +205,7 @@ describe('getFlagsAll', function () {
|
|
|
231
205
|
});
|
|
232
206
|
}); });
|
|
233
207
|
it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
234
|
-
var
|
|
208
|
+
var initAndGetFeatureFlag, flagsAll;
|
|
235
209
|
return __generator(this, function (_a) {
|
|
236
210
|
switch (_a.label) {
|
|
237
211
|
case 0:
|
|
@@ -242,8 +216,8 @@ describe('getFlagsAll', function () {
|
|
|
242
216
|
return undefined;
|
|
243
217
|
}),
|
|
244
218
|
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
245
|
-
|
|
246
|
-
return [4 /*yield*/,
|
|
219
|
+
initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
|
|
220
|
+
return [4 /*yield*/, initAndGetFeatureFlag()];
|
|
247
221
|
case 1:
|
|
248
222
|
flagsAll = _a.sent();
|
|
249
223
|
expect(flagsAll).toEqual({});
|
|
@@ -251,136 +225,37 @@ describe('getFlagsAll', function () {
|
|
|
251
225
|
}
|
|
252
226
|
});
|
|
253
227
|
}); });
|
|
254
|
-
it('should
|
|
255
|
-
|
|
256
|
-
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
257
|
-
expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
258
|
-
switch (_a.label) {
|
|
259
|
-
case 0: return [4 /*yield*/, (0, utils_1.getFlagsAll)()];
|
|
260
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
261
|
-
}
|
|
262
|
-
}); }); }).rejects.toThrow(new types_1.MissingConfigurationError());
|
|
263
|
-
return [2 /*return*/];
|
|
264
|
-
});
|
|
265
|
-
}); });
|
|
266
|
-
it('should throw error when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
267
|
-
var getFlagsAll;
|
|
268
|
-
return __generator(this, function (_a) {
|
|
269
|
-
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
270
|
-
createInstance: jest.fn().mockReturnValue(null),
|
|
271
|
-
}); });
|
|
272
|
-
getFlagsAll = require('../utils').getFlagsAll;
|
|
273
|
-
expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
274
|
-
switch (_a.label) {
|
|
275
|
-
case 0: return [4 /*yield*/, getFlagsAll()];
|
|
276
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
277
|
-
}
|
|
278
|
-
}); }); }).rejects.toThrow(new types_1.MissingInstanceError());
|
|
279
|
-
return [2 /*return*/];
|
|
280
|
-
});
|
|
281
|
-
}); });
|
|
282
|
-
it('should throw error when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
283
|
-
var getFlagsAll;
|
|
284
|
-
return __generator(this, function (_a) {
|
|
285
|
-
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
286
|
-
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
|
|
287
|
-
}); });
|
|
288
|
-
getFlagsAll = require('../utils').getFlagsAll;
|
|
289
|
-
expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
290
|
-
switch (_a.label) {
|
|
291
|
-
case 0: return [4 /*yield*/, getFlagsAll()];
|
|
292
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
293
|
-
}
|
|
294
|
-
}); }); }).rejects.toThrow(new types_1.MissingUserContextError());
|
|
295
|
-
return [2 /*return*/];
|
|
296
|
-
});
|
|
297
|
-
}); });
|
|
298
|
-
it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
299
|
-
var options;
|
|
300
|
-
return __generator(this, function (_a) {
|
|
301
|
-
switch (_a.label) {
|
|
302
|
-
case 0:
|
|
303
|
-
options = {
|
|
304
|
-
logLevel: 'critical',
|
|
305
|
-
};
|
|
306
|
-
return [4 /*yield*/, (0, utils_1.getFlagsAll)(options)];
|
|
307
|
-
case 1:
|
|
308
|
-
_a.sent();
|
|
309
|
-
expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
|
|
310
|
-
expect(optimizely_sdk_1.setLogger).toHaveBeenCalled();
|
|
311
|
-
return [2 /*return*/];
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
}); });
|
|
315
|
-
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 () {
|
|
316
|
-
var getFlagsAll, options, flagsAll;
|
|
228
|
+
it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
229
|
+
var options, flagsAll;
|
|
317
230
|
return __generator(this, function (_a) {
|
|
318
231
|
switch (_a.label) {
|
|
319
232
|
case 0:
|
|
320
|
-
|
|
321
|
-
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
322
|
-
decideAll: jest
|
|
323
|
-
.fn()
|
|
324
|
-
.mockImplementation(function (options) {
|
|
325
|
-
return flagsMock;
|
|
326
|
-
}),
|
|
327
|
-
}); }, onReady: jest
|
|
328
|
-
.fn()
|
|
329
|
-
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
330
|
-
}); });
|
|
331
|
-
getFlagsAll = require('../utils').getFlagsAll;
|
|
233
|
+
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
332
234
|
options = {
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
variationKey: 'off',
|
|
336
|
-
enabled: true,
|
|
337
|
-
variables: {},
|
|
338
|
-
},
|
|
235
|
+
sdkConfig: {
|
|
236
|
+
sdkKey: 'custom-optimizely-sdk',
|
|
339
237
|
},
|
|
238
|
+
userData: {
|
|
239
|
+
userId: 'user456',
|
|
240
|
+
attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
|
|
241
|
+
},
|
|
242
|
+
includeFlagVariables: true,
|
|
340
243
|
};
|
|
341
|
-
return [4 /*yield*/,
|
|
244
|
+
return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)(options)];
|
|
342
245
|
case 1:
|
|
343
246
|
flagsAll = _a.sent();
|
|
344
|
-
expect(flagsAll).toEqual(
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
decideAll: jest
|
|
357
|
-
.fn()
|
|
358
|
-
.mockImplementation(function (options) {
|
|
359
|
-
return flagsMock;
|
|
360
|
-
}),
|
|
361
|
-
}); }, onReady: jest
|
|
362
|
-
.fn()
|
|
363
|
-
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
364
|
-
}); });
|
|
365
|
-
getFlagsAll = require('../utils').getFlagsAll;
|
|
366
|
-
return [4 /*yield*/, getFlagsAll()];
|
|
367
|
-
case 1:
|
|
368
|
-
flagsAll = _a.sent();
|
|
369
|
-
expect(flagsAll).toEqual({});
|
|
370
|
-
return [2 /*return*/];
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
}); });
|
|
374
|
-
});
|
|
375
|
-
describe('getFlag', function () {
|
|
376
|
-
it('should return a flag with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
377
|
-
var flag;
|
|
378
|
-
return __generator(this, function (_a) {
|
|
379
|
-
switch (_a.label) {
|
|
380
|
-
case 0: return [4 /*yield*/, (0, utils_1.getFlag)('testing_flag_with_variations_and_variables')];
|
|
381
|
-
case 1:
|
|
382
|
-
flag = _a.sent();
|
|
383
|
-
expect(flag).toEqual({
|
|
247
|
+
expect(flagsAll).toEqual({
|
|
248
|
+
qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
|
|
249
|
+
testing_flag: {
|
|
250
|
+
variationKey: 'max_10',
|
|
251
|
+
enabled: true,
|
|
252
|
+
variables: { max_family_members: 10 },
|
|
253
|
+
},
|
|
254
|
+
another_test_flag_1: {
|
|
255
|
+
variationKey: 'off',
|
|
256
|
+
enabled: false,
|
|
257
|
+
variables: {},
|
|
258
|
+
},
|
|
384
259
|
testing_flag_with_variations_and_variables: {
|
|
385
260
|
variationKey: 'primary_with_new_weclome_message_and_max_accounts',
|
|
386
261
|
enabled: true,
|
|
@@ -398,20 +273,13 @@ describe('getFlag', function () {
|
|
|
398
273
|
}
|
|
399
274
|
});
|
|
400
275
|
}); });
|
|
401
|
-
it('should return empty object
|
|
402
|
-
var
|
|
276
|
+
it('should return empty object when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
277
|
+
var flagsAll;
|
|
403
278
|
return __generator(this, function (_a) {
|
|
404
279
|
switch (_a.label) {
|
|
405
280
|
case 0:
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
.fn()
|
|
409
|
-
.mockImplementation(function (options) {
|
|
410
|
-
return undefined;
|
|
411
|
-
}),
|
|
412
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
413
|
-
getFlag = require('../utils').getFlag;
|
|
414
|
-
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
281
|
+
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
282
|
+
return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)()];
|
|
415
283
|
case 1:
|
|
416
284
|
flagsAll = _a.sent();
|
|
417
285
|
expect(flagsAll).toEqual({});
|
|
@@ -419,132 +287,74 @@ describe('getFlag', function () {
|
|
|
419
287
|
}
|
|
420
288
|
});
|
|
421
289
|
}); });
|
|
422
|
-
it('should return
|
|
423
|
-
var
|
|
290
|
+
it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
291
|
+
var initAndGetFeatureFlag, flagsAll;
|
|
424
292
|
return __generator(this, function (_a) {
|
|
425
293
|
switch (_a.label) {
|
|
426
294
|
case 0:
|
|
427
295
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
428
|
-
createInstance:
|
|
429
|
-
decide: jest
|
|
430
|
-
.fn()
|
|
431
|
-
.mockImplementation(function (key, options) {
|
|
432
|
-
return flagsMock[key];
|
|
433
|
-
}),
|
|
434
|
-
}); }, onReady: jest
|
|
435
|
-
.fn()
|
|
436
|
-
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
296
|
+
createInstance: jest.fn().mockReturnValue(null),
|
|
437
297
|
}); });
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
defaultFeatureFlags: {
|
|
441
|
-
default_flag: {
|
|
442
|
-
variationKey: 'off',
|
|
443
|
-
enabled: true,
|
|
444
|
-
variables: {},
|
|
445
|
-
},
|
|
446
|
-
},
|
|
447
|
-
};
|
|
448
|
-
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables', options)];
|
|
298
|
+
initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
|
|
299
|
+
return [4 /*yield*/, initAndGetFeatureFlag()];
|
|
449
300
|
case 1:
|
|
450
|
-
|
|
451
|
-
expect(
|
|
301
|
+
flagsAll = _a.sent();
|
|
302
|
+
expect(flagsAll).toEqual({});
|
|
452
303
|
return [2 /*return*/];
|
|
453
304
|
}
|
|
454
305
|
});
|
|
455
306
|
}); });
|
|
456
|
-
it('should return empty object when
|
|
457
|
-
var
|
|
307
|
+
it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
308
|
+
var initAndGetFeatureFlag, flagsAll;
|
|
458
309
|
return __generator(this, function (_a) {
|
|
459
310
|
switch (_a.label) {
|
|
460
311
|
case 0:
|
|
461
312
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
462
|
-
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext:
|
|
463
|
-
decide: jest
|
|
464
|
-
.fn()
|
|
465
|
-
.mockImplementation(function (key, options) {
|
|
466
|
-
return flagsMock[key];
|
|
467
|
-
}),
|
|
468
|
-
}); }, onReady: jest
|
|
469
|
-
.fn()
|
|
470
|
-
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
313
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
|
|
471
314
|
}); });
|
|
472
|
-
|
|
473
|
-
return [4 /*yield*/,
|
|
315
|
+
initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
|
|
316
|
+
return [4 /*yield*/, initAndGetFeatureFlag()];
|
|
474
317
|
case 1:
|
|
475
|
-
|
|
476
|
-
expect(
|
|
477
|
-
return [2 /*return*/];
|
|
478
|
-
}
|
|
479
|
-
});
|
|
480
|
-
}); });
|
|
481
|
-
});
|
|
482
|
-
describe('getFlagsByKeys', function () {
|
|
483
|
-
it('should return flags by keys with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
484
|
-
var flagsByKeys;
|
|
485
|
-
return __generator(this, function (_a) {
|
|
486
|
-
switch (_a.label) {
|
|
487
|
-
case 0: return [4 /*yield*/, (0, utils_1.getFlagsByKeys)([
|
|
488
|
-
'another_test_flag_1',
|
|
489
|
-
'qualtrics_flag',
|
|
490
|
-
])];
|
|
491
|
-
case 1:
|
|
492
|
-
flagsByKeys = _a.sent();
|
|
493
|
-
expect(flagsByKeys).toEqual({
|
|
494
|
-
qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
|
|
495
|
-
another_test_flag_1: {
|
|
496
|
-
variationKey: 'off',
|
|
497
|
-
enabled: false,
|
|
498
|
-
variables: {},
|
|
499
|
-
},
|
|
500
|
-
});
|
|
318
|
+
flagsAll = _a.sent();
|
|
319
|
+
expect(flagsAll).toEqual({});
|
|
501
320
|
return [2 /*return*/];
|
|
502
321
|
}
|
|
503
322
|
});
|
|
504
323
|
}); });
|
|
505
|
-
it('should
|
|
506
|
-
var
|
|
324
|
+
it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
325
|
+
var options;
|
|
507
326
|
return __generator(this, function (_a) {
|
|
508
327
|
switch (_a.label) {
|
|
509
328
|
case 0:
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
return undefined;
|
|
515
|
-
}),
|
|
516
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
517
|
-
getFlagsByKeys = require('../utils').getFlagsByKeys;
|
|
518
|
-
return [4 /*yield*/, getFlagsByKeys([
|
|
519
|
-
'another_test_flag_1',
|
|
520
|
-
'qualtrics_flag',
|
|
521
|
-
])];
|
|
329
|
+
options = {
|
|
330
|
+
logLevel: 'critical',
|
|
331
|
+
};
|
|
332
|
+
return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)(options)];
|
|
522
333
|
case 1:
|
|
523
|
-
|
|
524
|
-
expect(
|
|
334
|
+
_a.sent();
|
|
335
|
+
expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
|
|
336
|
+
expect(optimizely_sdk_1.setLogger).toHaveBeenCalled();
|
|
525
337
|
return [2 /*return*/];
|
|
526
338
|
}
|
|
527
339
|
});
|
|
528
340
|
}); });
|
|
529
341
|
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 () {
|
|
530
|
-
var
|
|
342
|
+
var initAndGetFeatureFlag, options, flagsAll;
|
|
531
343
|
return __generator(this, function (_a) {
|
|
532
344
|
switch (_a.label) {
|
|
533
345
|
case 0:
|
|
534
346
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
535
347
|
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
536
|
-
|
|
348
|
+
decideAll: jest
|
|
537
349
|
.fn()
|
|
538
|
-
.mockImplementation(function (
|
|
539
|
-
|
|
540
|
-
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
541
|
-
return filtered;
|
|
350
|
+
.mockImplementation(function (options) {
|
|
351
|
+
return flagsMock;
|
|
542
352
|
}),
|
|
543
353
|
}); }, onReady: jest
|
|
544
354
|
.fn()
|
|
545
355
|
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
546
356
|
}); });
|
|
547
|
-
|
|
357
|
+
initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
|
|
548
358
|
options = {
|
|
549
359
|
defaultFeatureFlags: {
|
|
550
360
|
default_flag: {
|
|
@@ -554,91 +364,304 @@ describe('getFlagsByKeys', function () {
|
|
|
554
364
|
},
|
|
555
365
|
},
|
|
556
366
|
};
|
|
557
|
-
return [4 /*yield*/,
|
|
367
|
+
return [4 /*yield*/, initAndGetFeatureFlag(options)];
|
|
558
368
|
case 1:
|
|
559
|
-
|
|
560
|
-
expect(
|
|
561
|
-
return [2 /*return*/];
|
|
562
|
-
}
|
|
563
|
-
});
|
|
564
|
-
}); });
|
|
565
|
-
it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
566
|
-
var getFlagsByKeys, flagsByKeys;
|
|
567
|
-
return __generator(this, function (_a) {
|
|
568
|
-
switch (_a.label) {
|
|
569
|
-
case 0:
|
|
570
|
-
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
571
|
-
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
572
|
-
decideForKeys: jest
|
|
573
|
-
.fn()
|
|
574
|
-
.mockImplementation(function (keys, options) {
|
|
575
|
-
var filtered = {};
|
|
576
|
-
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
577
|
-
return filtered;
|
|
578
|
-
}),
|
|
579
|
-
}); }, onReady: jest
|
|
580
|
-
.fn()
|
|
581
|
-
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
582
|
-
}); });
|
|
583
|
-
getFlagsByKeys = require('../utils').getFlagsByKeys;
|
|
584
|
-
return [4 /*yield*/, getFlagsByKeys([
|
|
585
|
-
'another_test_flag_1',
|
|
586
|
-
'qualtrics_flag',
|
|
587
|
-
])];
|
|
588
|
-
case 1:
|
|
589
|
-
flagsByKeys = _a.sent();
|
|
590
|
-
expect(flagsByKeys).toEqual({});
|
|
591
|
-
return [2 /*return*/];
|
|
592
|
-
}
|
|
593
|
-
});
|
|
594
|
-
}); });
|
|
595
|
-
});
|
|
596
|
-
describe('closeFlagsInstance', function () {
|
|
597
|
-
it('should close sdk instance sucessfully', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
598
|
-
var spy;
|
|
599
|
-
return __generator(this, function (_a) {
|
|
600
|
-
switch (_a.label) {
|
|
601
|
-
case 0:
|
|
602
|
-
spy = jest.spyOn(console, 'log');
|
|
603
|
-
return [4 /*yield*/, (0, utils_1.getFlag)('testing_flag_with_variations_and_variables')];
|
|
604
|
-
case 1:
|
|
605
|
-
_a.sent();
|
|
606
|
-
return [4 /*yield*/, (0, utils_1.closeFlagsInstance)()];
|
|
607
|
-
case 2:
|
|
608
|
-
_a.sent();
|
|
609
|
-
expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully');
|
|
610
|
-
return [2 /*return*/];
|
|
611
|
-
}
|
|
612
|
-
});
|
|
613
|
-
}); });
|
|
614
|
-
it('should not close sdk instance sucessfully', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
615
|
-
var spy, _a, getFlag, closeFlagsInstance;
|
|
616
|
-
return __generator(this, function (_b) {
|
|
617
|
-
switch (_b.label) {
|
|
618
|
-
case 0:
|
|
619
|
-
spy = jest.spyOn(console, 'log');
|
|
620
|
-
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
621
|
-
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
622
|
-
decide: jest
|
|
623
|
-
.fn()
|
|
624
|
-
.mockImplementation(function (key, options) {
|
|
625
|
-
return flagsMock[key];
|
|
626
|
-
}),
|
|
627
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest
|
|
628
|
-
.fn()
|
|
629
|
-
.mockResolvedValue({ success: false, reason: 'Closing rejected' }) })); },
|
|
630
|
-
}); });
|
|
631
|
-
_a = require('../utils'), getFlag = _a.getFlag, closeFlagsInstance = _a.closeFlagsInstance;
|
|
632
|
-
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
633
|
-
case 1:
|
|
634
|
-
_b.sent();
|
|
635
|
-
return [4 /*yield*/, closeFlagsInstance()];
|
|
636
|
-
case 2:
|
|
637
|
-
_b.sent();
|
|
638
|
-
expect(spy).toHaveBeenCalledWith('closing Optimizely instance failed, reason: Closing rejected');
|
|
369
|
+
flagsAll = _a.sent();
|
|
370
|
+
expect(flagsAll).toEqual(options.defaultFeatureFlags);
|
|
639
371
|
return [2 /*return*/];
|
|
640
372
|
}
|
|
641
373
|
});
|
|
642
374
|
}); });
|
|
643
375
|
});
|
|
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
|
+
// })
|
|
644
667
|
//# sourceMappingURL=utils.tests.js.map
|