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