@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.
@@ -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
- // createInstance
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('getFlagsAll', function () {
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*/, getFlagsAll()];
152
+ case 0: return [4 /*yield*/, initAndGetFeatureFlag()];
155
153
  case 1:
156
154
  flagsAll = _a.sent();
157
155
  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
- },
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 custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
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
- sdkConfig: {
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*/, getFlagsAll(options)];
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 getFlagsAll, flagsAll;
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
- getFlagsAll = require('../utils').getFlagsAll;
246
- return [4 /*yield*/, getFlagsAll()];
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 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*/, 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
- 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;
231
+ process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
332
232
  options = {
333
- defaultFeatureFlags: {
334
- default_flag: {
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*/, getFlagsAll(options)];
242
+ return [4 /*yield*/, initAndGetFeatureFlag(options)];
342
243
  case 1:
343
244
  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*/, 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 if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
402
- var getFlag, flagsAll;
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
- 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')];
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 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;
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: 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' }) })); },
294
+ createInstance: jest.fn().mockReturnValue(null),
437
295
  }); });
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)];
296
+ initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
297
+ return [4 /*yield*/, initAndGetFeatureFlag()];
449
298
  case 1:
450
- flag = _a.sent();
451
- expect(flag).toEqual(options.defaultFeatureFlags);
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 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;
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: 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' }) })); },
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
- getFlag = require('../utils').getFlag;
473
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
313
+ initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
314
+ return [4 /*yield*/, initAndGetFeatureFlag()];
474
315
  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*/, 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 return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
506
- var getFlagsByKeys, flagsAll;
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
- 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
- ])];
327
+ options = {
328
+ logLevel: 'critical',
329
+ };
330
+ return [4 /*yield*/, initAndGetFeatureFlag(options)];
522
331
  case 1:
523
- flagsAll = _a.sent();
524
- expect(flagsAll).toEqual({});
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 getFlagsByKeys, options, flagsByKeys;
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
- decideForKeys: jest
346
+ decideAll: jest
537
347
  .fn()
538
- .mockImplementation(function (keys, options) {
539
- var filtered = {};
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
- getFlagsByKeys = require('../utils').getFlagsByKeys;
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*/, getFlagsByKeys(['another_test_flag_1', 'qualtrics_flag'], options)];
365
+ return [4 /*yield*/, initAndGetFeatureFlag(options)];
558
366
  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*/, 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