@newskit-render/feature-flags 1.9.1 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -46,67 +46,64 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  }
47
47
  };
48
48
  import { setLogLevel, setLogger, } from '@optimizely/optimizely-sdk';
49
- import { _resetInstance, initAndGetFeatureFlag } from '../utils';
49
+ import { getAllFeatureFlags, getFeatureFlagsByKeys } from '../utils';
50
50
  var originalEnv = process.env;
51
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 ({
52
52
  decide: jest
53
53
  .fn()
54
- .mockImplementation(function (key, options) {
54
+ .mockImplementation(function (key, config) {
55
55
  return flagsMock[key];
56
56
  }),
57
57
  decideForKeys: jest
58
58
  .fn()
59
- .mockImplementation(function (keys, options) {
59
+ .mockImplementation(function (keys, config) {
60
60
  var filtered = {};
61
61
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
62
62
  return filtered;
63
63
  }),
64
64
  decideAll: jest
65
65
  .fn()
66
- .mockImplementation(function (options) {
66
+ .mockImplementation(function (config) {
67
67
  return flagsMock;
68
68
  }),
69
69
  }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
70
70
  var flagsMock = {
71
- qualtrics_flag: {
71
+ test_flag_1: {
72
72
  variationKey: 'on',
73
73
  enabled: true,
74
74
  variables: {},
75
75
  ruleKey: 'default-rollout-216689-29200910123',
76
- flagKey: 'qualtrics_flag',
76
+ flagKey: 'test_flag_1',
77
77
  userContext: {
78
78
  _qualifiedSegments: null,
79
- // optimizely: [e],
80
79
  userId: 'user123',
81
80
  attributes: {},
82
81
  forcedDecisionsMap: {},
83
82
  },
84
83
  reasons: [],
85
84
  },
86
- testing_flag: {
85
+ test_flag_2: {
87
86
  variationKey: 'max_10',
88
87
  enabled: true,
89
88
  variables: { max_family_members: 10 },
90
89
  ruleKey: 'default-rollout-223709-29200910123',
91
- flagKey: 'testing_flag',
90
+ flagKey: 'test_flag_2',
92
91
  userContext: {
93
92
  _qualifiedSegments: null,
94
- // optimizely: [e],
95
93
  userId: 'user123',
96
94
  attributes: {},
97
95
  forcedDecisionsMap: {},
98
96
  },
99
97
  reasons: [],
100
98
  },
101
- another_test_flag_1: {
99
+ test_flag_3: {
102
100
  variationKey: 'off',
103
101
  enabled: false,
104
102
  variables: {},
105
103
  ruleKey: 'default-rollout-225089-29200910123',
106
- flagKey: 'another_test_flag_1',
104
+ flagKey: 'test_flag_3',
107
105
  userContext: {
108
106
  _qualifiedSegments: null,
109
- // optimizely: [e],
110
107
  userId: 'user123',
111
108
  attributes: {},
112
109
  forcedDecisionsMap: {},
@@ -136,51 +133,55 @@ var flagsMock = {
136
133
  reasons: [],
137
134
  },
138
135
  };
139
- // TO DO: Improve test coverage
140
136
  beforeEach(function () {
141
137
  jest.resetModules();
142
138
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
143
139
  });
144
- afterEach(function () {
145
- _resetInstance();
146
- });
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 () {
140
+ var optionsWithIncludeFlagVariables = {
141
+ includeFlagVariables: true,
142
+ };
143
+ var optionsWithDefaultFlags = {
144
+ defaultFeatureFlags: {
145
+ default_flag: {
146
+ variationKey: 'off',
147
+ enabled: true,
148
+ variables: {},
149
+ },
150
+ },
151
+ };
152
+ describe('getAllFeatureFlags', function () {
153
+ it('should return all flags data in flat mode with default config', function () { return __awaiter(void 0, void 0, void 0, function () {
149
154
  var flagsAll;
150
155
  return __generator(this, function (_a) {
151
156
  switch (_a.label) {
152
- case 0: return [4 /*yield*/, initAndGetFeatureFlag()];
157
+ case 0: return [4 /*yield*/, getAllFeatureFlags()];
153
158
  case 1:
154
159
  flagsAll = _a.sent();
155
160
  expect(flagsAll).toEqual({
156
- another_test_flag_1: false,
157
- qualtrics_flag: true,
158
- testing_flag: true,
161
+ test_flag_3: false,
162
+ test_flag_1: true,
163
+ test_flag_2: true,
159
164
  testing_flag_with_variations_and_variables: true,
160
165
  });
161
166
  return [2 /*return*/];
162
167
  }
163
168
  });
164
169
  }); });
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 () {
166
- var options, flagsAll;
170
+ it('should return all flags with included variable data when "includeFlagVariables: true" is added in the config', function () { return __awaiter(void 0, void 0, void 0, function () {
171
+ var flagsAll;
167
172
  return __generator(this, function (_a) {
168
173
  switch (_a.label) {
169
- case 0:
170
- options = {
171
- includeFlagVariables: true,
172
- };
173
- return [4 /*yield*/, initAndGetFeatureFlag(options)];
174
+ case 0: return [4 /*yield*/, getAllFeatureFlags(optionsWithIncludeFlagVariables)];
174
175
  case 1:
175
176
  flagsAll = _a.sent();
176
177
  expect(flagsAll).toEqual({
177
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
178
- testing_flag: {
178
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
179
+ test_flag_2: {
179
180
  variationKey: 'max_10',
180
181
  enabled: true,
181
182
  variables: { max_family_members: 10 },
182
183
  },
183
- another_test_flag_1: {
184
+ test_flag_3: {
184
185
  variationKey: 'off',
185
186
  enabled: false,
186
187
  variables: {},
@@ -203,19 +204,19 @@ describe('initAndGetFeatureFlag', function () {
203
204
  });
204
205
  }); });
205
206
  it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
206
- var initAndGetFeatureFlag, flagsAll;
207
+ var getAllFeatureFlags, flagsAll;
207
208
  return __generator(this, function (_a) {
208
209
  switch (_a.label) {
209
210
  case 0:
210
211
  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 ({
211
212
  decideAll: jest
212
213
  .fn()
213
- .mockImplementation(function (options) {
214
+ .mockImplementation(function (config) {
214
215
  return undefined;
215
216
  }),
216
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
217
- initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
218
- return [4 /*yield*/, initAndGetFeatureFlag()];
217
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
218
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
219
+ return [4 /*yield*/, getAllFeatureFlags()];
219
220
  case 1:
220
221
  flagsAll = _a.sent();
221
222
  expect(flagsAll).toEqual({});
@@ -223,13 +224,34 @@ describe('initAndGetFeatureFlag', function () {
223
224
  }
224
225
  });
225
226
  }); });
226
- it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
227
- var options, flagsAll;
227
+ it('should return the defaultFeatureFlags if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
228
+ var getAllFeatureFlags, flagsAll;
229
+ return __generator(this, function (_a) {
230
+ switch (_a.label) {
231
+ case 0:
232
+ 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 ({
233
+ decideAll: jest
234
+ .fn()
235
+ .mockImplementation(function (config) {
236
+ return undefined;
237
+ }),
238
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
239
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
240
+ return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
241
+ case 1:
242
+ flagsAll = _a.sent();
243
+ expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
244
+ return [2 /*return*/];
245
+ }
246
+ });
247
+ }); });
248
+ it('should return all flags with custom config', function () { return __awaiter(void 0, void 0, void 0, function () {
249
+ var config, flagsAll;
228
250
  return __generator(this, function (_a) {
229
251
  switch (_a.label) {
230
252
  case 0:
231
253
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
232
- options = {
254
+ config = {
233
255
  sdkConfig: {
234
256
  sdkKey: 'custom-optimizely-sdk',
235
257
  },
@@ -239,17 +261,17 @@ describe('initAndGetFeatureFlag', function () {
239
261
  },
240
262
  includeFlagVariables: true,
241
263
  };
242
- return [4 /*yield*/, initAndGetFeatureFlag(options)];
264
+ return [4 /*yield*/, getAllFeatureFlags(config)];
243
265
  case 1:
244
266
  flagsAll = _a.sent();
245
267
  expect(flagsAll).toEqual({
246
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
247
- testing_flag: {
268
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
269
+ test_flag_2: {
248
270
  variationKey: 'max_10',
249
271
  enabled: true,
250
272
  variables: { max_family_members: 10 },
251
273
  },
252
- another_test_flag_1: {
274
+ test_flag_3: {
253
275
  variationKey: 'off',
254
276
  enabled: false,
255
277
  variables: {},
@@ -277,7 +299,7 @@ describe('initAndGetFeatureFlag', function () {
277
299
  switch (_a.label) {
278
300
  case 0:
279
301
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
280
- return [4 /*yield*/, initAndGetFeatureFlag()];
302
+ return [4 /*yield*/, getAllFeatureFlags()];
281
303
  case 1:
282
304
  flagsAll = _a.sent();
283
305
  expect(flagsAll).toEqual({});
@@ -286,15 +308,15 @@ describe('initAndGetFeatureFlag', function () {
286
308
  });
287
309
  }); });
288
310
  it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
289
- var initAndGetFeatureFlag, flagsAll;
311
+ var getAllFeatureFlags, flagsAll;
290
312
  return __generator(this, function (_a) {
291
313
  switch (_a.label) {
292
314
  case 0:
293
315
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
294
316
  createInstance: jest.fn().mockReturnValue(null),
295
317
  }); });
296
- initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
297
- return [4 /*yield*/, initAndGetFeatureFlag()];
318
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
319
+ return [4 /*yield*/, getAllFeatureFlags()];
298
320
  case 1:
299
321
  flagsAll = _a.sent();
300
322
  expect(flagsAll).toEqual({});
@@ -303,15 +325,15 @@ describe('initAndGetFeatureFlag', function () {
303
325
  });
304
326
  }); });
305
327
  it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
306
- var initAndGetFeatureFlag, flagsAll;
328
+ var getAllFeatureFlags, flagsAll;
307
329
  return __generator(this, function (_a) {
308
330
  switch (_a.label) {
309
331
  case 0:
310
332
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
311
333
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
312
334
  }); });
313
- initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
314
- return [4 /*yield*/, initAndGetFeatureFlag()];
335
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
336
+ return [4 /*yield*/, getAllFeatureFlags()];
315
337
  case 1:
316
338
  flagsAll = _a.sent();
317
339
  expect(flagsAll).toEqual({});
@@ -320,14 +342,14 @@ describe('initAndGetFeatureFlag', function () {
320
342
  });
321
343
  }); });
322
344
  it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
323
- var options;
345
+ var config;
324
346
  return __generator(this, function (_a) {
325
347
  switch (_a.label) {
326
348
  case 0:
327
- options = {
349
+ config = {
328
350
  logLevel: 'critical',
329
351
  };
330
- return [4 /*yield*/, initAndGetFeatureFlag(options)];
352
+ return [4 /*yield*/, getAllFeatureFlags(config)];
331
353
  case 1:
332
354
  _a.sent();
333
355
  expect(setLogLevel).toBeCalledWith('critical');
@@ -337,7 +359,7 @@ describe('initAndGetFeatureFlag', function () {
337
359
  });
338
360
  }); });
339
361
  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 () {
340
- var initAndGetFeatureFlag, options, flagsAll;
362
+ var getAllFeatureFlags, flagsAll;
341
363
  return __generator(this, function (_a) {
342
364
  switch (_a.label) {
343
365
  case 0:
@@ -345,15 +367,102 @@ describe('initAndGetFeatureFlag', function () {
345
367
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
346
368
  decideAll: jest
347
369
  .fn()
348
- .mockImplementation(function (options) {
370
+ .mockImplementation(function (config) {
349
371
  return flagsMock;
350
372
  }),
351
373
  }); }, onReady: jest
352
374
  .fn()
353
375
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
354
376
  }); });
355
- initAndGetFeatureFlag = require('../utils').initAndGetFeatureFlag;
356
- options = {
377
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
378
+ return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
379
+ case 1:
380
+ flagsAll = _a.sent();
381
+ expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
382
+ return [2 /*return*/];
383
+ }
384
+ });
385
+ }); });
386
+ });
387
+ describe('getFeatureFlagsByKeys', function () {
388
+ it('should return only the requested feature flags included variable data when "includeFlagVariables: true" is added in the config', function () { return __awaiter(void 0, void 0, void 0, function () {
389
+ var flagsByKeys;
390
+ return __generator(this, function (_a) {
391
+ switch (_a.label) {
392
+ case 0: return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
393
+ case 1:
394
+ flagsByKeys = _a.sent();
395
+ expect(flagsByKeys).toEqual({
396
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
397
+ test_flag_3: {
398
+ variationKey: 'off',
399
+ enabled: false,
400
+ variables: {},
401
+ },
402
+ });
403
+ return [2 /*return*/];
404
+ }
405
+ });
406
+ }); });
407
+ it('should return only the requested feature flags in flat mode with default config', function () { return __awaiter(void 0, void 0, void 0, function () {
408
+ var flagsByKeys;
409
+ return __generator(this, function (_a) {
410
+ switch (_a.label) {
411
+ case 0: return [4 /*yield*/, getFeatureFlagsByKeys([
412
+ 'test_flag_3',
413
+ 'test_flag_1',
414
+ ])];
415
+ case 1:
416
+ flagsByKeys = _a.sent();
417
+ expect(flagsByKeys).toEqual({
418
+ test_flag_1: true,
419
+ test_flag_3: false,
420
+ });
421
+ return [2 /*return*/];
422
+ }
423
+ });
424
+ }); });
425
+ it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
426
+ var getFeatureFlagsByKeys, flagsAll;
427
+ return __generator(this, function (_a) {
428
+ switch (_a.label) {
429
+ case 0:
430
+ 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 ({
431
+ decideForKeys: jest
432
+ .fn()
433
+ .mockImplementation(function (config) {
434
+ return undefined;
435
+ }),
436
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
437
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
438
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'])];
439
+ case 1:
440
+ flagsAll = _a.sent();
441
+ expect(flagsAll).toEqual({});
442
+ return [2 /*return*/];
443
+ }
444
+ });
445
+ }); });
446
+ it('should return defaultFeatureFlags when they have been passed and optimizely client creation fails', function () { return __awaiter(void 0, void 0, void 0, function () {
447
+ var getFeatureFlagsByKeys, config, flagsByKeys;
448
+ return __generator(this, function (_a) {
449
+ switch (_a.label) {
450
+ case 0:
451
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
452
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
453
+ decideForKeys: jest
454
+ .fn()
455
+ .mockImplementation(function (keys, config) {
456
+ var filtered = {};
457
+ keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
458
+ return filtered;
459
+ }),
460
+ }); }, onReady: jest
461
+ .fn()
462
+ .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
463
+ }); });
464
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
465
+ config = {
357
466
  defaultFeatureFlags: {
358
467
  default_flag: {
359
468
  variationKey: 'off',
@@ -362,304 +471,43 @@ describe('initAndGetFeatureFlag', function () {
362
471
  },
363
472
  },
364
473
  };
365
- return [4 /*yield*/, initAndGetFeatureFlag(options)];
474
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], config)];
366
475
  case 1:
367
- flagsAll = _a.sent();
368
- expect(flagsAll).toEqual(options.defaultFeatureFlags);
476
+ flagsByKeys = _a.sent();
477
+ expect(flagsByKeys).toEqual(config.defaultFeatureFlags);
478
+ return [2 /*return*/];
479
+ }
480
+ });
481
+ }); });
482
+ it('should return empty object when no default flag have been passed and optimizely client creation fails', function () { return __awaiter(void 0, void 0, void 0, function () {
483
+ var getFeatureFlagsByKeys, flagsByKeys;
484
+ return __generator(this, function (_a) {
485
+ switch (_a.label) {
486
+ case 0:
487
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
488
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
489
+ decideForKeys: jest
490
+ .fn()
491
+ .mockImplementation(function (keys, config) {
492
+ var filtered = {};
493
+ keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
494
+ return filtered;
495
+ }),
496
+ }); }, onReady: jest
497
+ .fn()
498
+ .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
499
+ }); });
500
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
501
+ return [4 /*yield*/, getFeatureFlagsByKeys([
502
+ 'test_flag_3',
503
+ 'test_flag_1',
504
+ ])];
505
+ case 1:
506
+ flagsByKeys = _a.sent();
507
+ expect(flagsByKeys).toEqual({});
369
508
  return [2 /*return*/];
370
509
  }
371
510
  });
372
511
  }); });
373
512
  });
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
- // })
665
513
  //# sourceMappingURL=utils.tests.js.map