@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.
@@ -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('getFlagsAll', function () {
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.getFlagsAll)()];
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
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
159
- testing_flag: {
160
- variationKey: 'max_10',
161
- enabled: true,
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 custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
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
- sdkConfig: {
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.getFlagsAll)(options)];
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 getFlagsAll, flagsAll;
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
- getFlagsAll = require('../utils').getFlagsAll;
246
- return [4 /*yield*/, getFlagsAll()];
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 throw error when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
255
- return __generator(this, function (_a) {
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
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
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
- defaultFeatureFlags: {
334
- default_flag: {
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*/, getFlagsAll(options)];
244
+ return [4 /*yield*/, (0, utils_1.initAndGetFeatureFlag)(options)];
342
245
  case 1:
343
246
  flagsAll = _a.sent();
344
- expect(flagsAll).toEqual(options.defaultFeatureFlags);
345
- return [2 /*return*/];
346
- }
347
- });
348
- }); });
349
- 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 () {
350
- var getFlagsAll, flagsAll;
351
- return __generator(this, function (_a) {
352
- switch (_a.label) {
353
- case 0:
354
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
355
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
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 if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
402
- var getFlag, flagsAll;
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
- 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 ({
407
- decide: jest
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 defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
423
- var getFlag, options, flag;
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: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
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
- getFlag = require('../utils').getFlag;
439
- options = {
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
- flag = _a.sent();
451
- expect(flag).toEqual(options.defaultFeatureFlags);
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 no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
457
- var getFlag, flag;
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: function () { return ({
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
- getFlag = require('../utils').getFlag;
473
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
315
+ initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
316
+ return [4 /*yield*/, initAndGetFeatureFlag()];
474
317
  case 1:
475
- flag = _a.sent();
476
- expect(flag).toEqual({});
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 return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
506
- var getFlagsByKeys, flagsAll;
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
- 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 ({
511
- decideForKeys: jest
512
- .fn()
513
- .mockImplementation(function (options) {
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
- flagsAll = _a.sent();
524
- expect(flagsAll).toEqual({});
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 getFlagsByKeys, options, flagsByKeys;
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
- decideForKeys: jest
348
+ decideAll: jest
537
349
  .fn()
538
- .mockImplementation(function (keys, options) {
539
- var filtered = {};
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
- getFlagsByKeys = require('../utils').getFlagsByKeys;
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*/, getFlagsByKeys(['another_test_flag_1', 'qualtrics_flag'], options)];
367
+ return [4 /*yield*/, initAndGetFeatureFlag(options)];
558
368
  case 1:
559
- flagsByKeys = _a.sent();
560
- expect(flagsByKeys).toEqual(options.defaultFeatureFlags);
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