@newskit-render/feature-flags 0.0.0-1cbb2a4f → 0.0.0-1f8fc3b48

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.
@@ -20,8 +20,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
20
  });
21
21
  };
22
22
  var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
25
  function verb(n) { return function (v) { return step([n, v]); }; }
26
26
  function step(op) {
27
27
  if (f) throw new TypeError("Generator is already executing.");
@@ -53,62 +53,59 @@ var originalEnv = process.env;
53
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 ({
54
54
  decide: jest
55
55
  .fn()
56
- .mockImplementation(function (key, options) {
56
+ .mockImplementation(function (key, config) {
57
57
  return flagsMock[key];
58
58
  }),
59
59
  decideForKeys: jest
60
60
  .fn()
61
- .mockImplementation(function (keys, options) {
61
+ .mockImplementation(function (keys, config) {
62
62
  var filtered = {};
63
63
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
64
64
  return filtered;
65
65
  }),
66
66
  decideAll: jest
67
67
  .fn()
68
- .mockImplementation(function (options) {
68
+ .mockImplementation(function (config) {
69
69
  return flagsMock;
70
70
  }),
71
71
  }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
72
72
  var flagsMock = {
73
- qualtrics_flag: {
73
+ test_flag_1: {
74
74
  variationKey: 'on',
75
75
  enabled: true,
76
76
  variables: {},
77
77
  ruleKey: 'default-rollout-216689-29200910123',
78
- flagKey: 'qualtrics_flag',
78
+ flagKey: 'test_flag_1',
79
79
  userContext: {
80
80
  _qualifiedSegments: null,
81
- // optimizely: [e],
82
81
  userId: 'user123',
83
82
  attributes: {},
84
83
  forcedDecisionsMap: {},
85
84
  },
86
85
  reasons: [],
87
86
  },
88
- testing_flag: {
87
+ test_flag_2: {
89
88
  variationKey: 'max_10',
90
89
  enabled: true,
91
90
  variables: { max_family_members: 10 },
92
91
  ruleKey: 'default-rollout-223709-29200910123',
93
- flagKey: 'testing_flag',
92
+ flagKey: 'test_flag_2',
94
93
  userContext: {
95
94
  _qualifiedSegments: null,
96
- // optimizely: [e],
97
95
  userId: 'user123',
98
96
  attributes: {},
99
97
  forcedDecisionsMap: {},
100
98
  },
101
99
  reasons: [],
102
100
  },
103
- another_test_flag_1: {
101
+ test_flag_3: {
104
102
  variationKey: 'off',
105
103
  enabled: false,
106
104
  variables: {},
107
105
  ruleKey: 'default-rollout-225089-29200910123',
108
- flagKey: 'another_test_flag_1',
106
+ flagKey: 'test_flag_3',
109
107
  userContext: {
110
108
  _qualifiedSegments: null,
111
- // optimizely: [e],
112
109
  userId: 'user123',
113
110
  attributes: {},
114
111
  forcedDecisionsMap: {},
@@ -138,21 +135,24 @@ var flagsMock = {
138
135
  reasons: [],
139
136
  },
140
137
  };
141
- // TO DO: Improve test coverage
142
138
  beforeEach(function () {
143
139
  jest.resetModules();
144
140
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
145
141
  });
146
- // afterEach(() => {
147
- // _resetInstance()
148
- // })
149
- describe('Test', function () {
150
- it('Test description', function () {
151
- expect(true);
152
- });
153
- });
154
- describe.skip('getAllFeatureFlags', function () {
155
- it('should return all flags data in flat mode with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
142
+ var optionsWithIncludeFlagVariables = {
143
+ includeFlagVariables: true,
144
+ };
145
+ var optionsWithDefaultFlags = {
146
+ defaultFeatureFlags: {
147
+ default_flag: {
148
+ variationKey: 'off',
149
+ enabled: true,
150
+ variables: {},
151
+ },
152
+ },
153
+ };
154
+ describe('getAllFeatureFlags', function () {
155
+ it('should return all flags data in flat mode with default config', function () { return __awaiter(void 0, void 0, void 0, function () {
156
156
  var flagsAll;
157
157
  return __generator(this, function (_a) {
158
158
  switch (_a.label) {
@@ -160,34 +160,30 @@ describe.skip('getAllFeatureFlags', function () {
160
160
  case 1:
161
161
  flagsAll = _a.sent();
162
162
  expect(flagsAll).toEqual({
163
- another_test_flag_1: false,
164
- qualtrics_flag: true,
165
- testing_flag: true,
163
+ test_flag_3: false,
164
+ test_flag_1: true,
165
+ test_flag_2: true,
166
166
  testing_flag_with_variations_and_variables: true,
167
167
  });
168
168
  return [2 /*return*/];
169
169
  }
170
170
  });
171
171
  }); });
172
- 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 () {
173
- var options, flagsAll;
172
+ 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 () {
173
+ var flagsAll;
174
174
  return __generator(this, function (_a) {
175
175
  switch (_a.label) {
176
- case 0:
177
- options = {
178
- includeFlagVariables: true,
179
- };
180
- return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(options)];
176
+ case 0: return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(optionsWithIncludeFlagVariables)];
181
177
  case 1:
182
178
  flagsAll = _a.sent();
183
179
  expect(flagsAll).toEqual({
184
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
185
- testing_flag: {
180
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
181
+ test_flag_2: {
186
182
  variationKey: 'max_10',
187
183
  enabled: true,
188
184
  variables: { max_family_members: 10 },
189
185
  },
190
- another_test_flag_1: {
186
+ test_flag_3: {
191
187
  variationKey: 'off',
192
188
  enabled: false,
193
189
  variables: {},
@@ -217,10 +213,10 @@ describe.skip('getAllFeatureFlags', function () {
217
213
  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 ({
218
214
  decideAll: jest
219
215
  .fn()
220
- .mockImplementation(function (options) {
216
+ .mockImplementation(function (config) {
221
217
  return undefined;
222
218
  }),
223
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
219
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
224
220
  getAllFeatureFlags = require('../utils').getAllFeatureFlags;
225
221
  return [4 /*yield*/, getAllFeatureFlags()];
226
222
  case 1:
@@ -230,13 +226,34 @@ describe.skip('getAllFeatureFlags', function () {
230
226
  }
231
227
  });
232
228
  }); });
233
- it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
234
- var options, flagsAll;
229
+ it('should return the defaultFeatureFlags if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
230
+ var getAllFeatureFlags, flagsAll;
231
+ return __generator(this, function (_a) {
232
+ switch (_a.label) {
233
+ case 0:
234
+ 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 ({
235
+ decideAll: jest
236
+ .fn()
237
+ .mockImplementation(function (config) {
238
+ return undefined;
239
+ }),
240
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
241
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
242
+ return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
243
+ case 1:
244
+ flagsAll = _a.sent();
245
+ expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
246
+ return [2 /*return*/];
247
+ }
248
+ });
249
+ }); });
250
+ it('should return all flags with custom config', function () { return __awaiter(void 0, void 0, void 0, function () {
251
+ var config, flagsAll;
235
252
  return __generator(this, function (_a) {
236
253
  switch (_a.label) {
237
254
  case 0:
238
255
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
239
- options = {
256
+ config = {
240
257
  sdkConfig: {
241
258
  sdkKey: 'custom-optimizely-sdk',
242
259
  },
@@ -246,17 +263,17 @@ describe.skip('getAllFeatureFlags', function () {
246
263
  },
247
264
  includeFlagVariables: true,
248
265
  };
249
- return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(options)];
266
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
250
267
  case 1:
251
268
  flagsAll = _a.sent();
252
269
  expect(flagsAll).toEqual({
253
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
254
- testing_flag: {
270
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
271
+ test_flag_2: {
255
272
  variationKey: 'max_10',
256
273
  enabled: true,
257
274
  variables: { max_family_members: 10 },
258
275
  },
259
- another_test_flag_1: {
276
+ test_flag_3: {
260
277
  variationKey: 'off',
261
278
  enabled: false,
262
279
  variables: {},
@@ -327,14 +344,14 @@ describe.skip('getAllFeatureFlags', function () {
327
344
  });
328
345
  }); });
329
346
  it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
330
- var options;
347
+ var config;
331
348
  return __generator(this, function (_a) {
332
349
  switch (_a.label) {
333
350
  case 0:
334
- options = {
351
+ config = {
335
352
  logLevel: 'critical',
336
353
  };
337
- return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(options)];
354
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
338
355
  case 1:
339
356
  _a.sent();
340
357
  expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
@@ -344,7 +361,7 @@ describe.skip('getAllFeatureFlags', function () {
344
361
  });
345
362
  }); });
346
363
  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 () {
347
- var getAllFeatureFlags, options, flagsAll;
364
+ var getAllFeatureFlags, flagsAll;
348
365
  return __generator(this, function (_a) {
349
366
  switch (_a.label) {
350
367
  case 0:
@@ -352,7 +369,7 @@ describe.skip('getAllFeatureFlags', function () {
352
369
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
353
370
  decideAll: jest
354
371
  .fn()
355
- .mockImplementation(function (options) {
372
+ .mockImplementation(function (config) {
356
373
  return flagsMock;
357
374
  }),
358
375
  }); }, onReady: jest
@@ -360,7 +377,94 @@ describe.skip('getAllFeatureFlags', function () {
360
377
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
361
378
  }); });
362
379
  getAllFeatureFlags = require('../utils').getAllFeatureFlags;
363
- options = {
380
+ return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
381
+ case 1:
382
+ flagsAll = _a.sent();
383
+ expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
384
+ return [2 /*return*/];
385
+ }
386
+ });
387
+ }); });
388
+ });
389
+ describe('getFeatureFlagsByKeys', function () {
390
+ 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 () {
391
+ var flagsByKeys;
392
+ return __generator(this, function (_a) {
393
+ switch (_a.label) {
394
+ case 0: return [4 /*yield*/, (0, utils_1.getFeatureFlagsByKeys)(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
395
+ case 1:
396
+ flagsByKeys = _a.sent();
397
+ expect(flagsByKeys).toEqual({
398
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
399
+ test_flag_3: {
400
+ variationKey: 'off',
401
+ enabled: false,
402
+ variables: {},
403
+ },
404
+ });
405
+ return [2 /*return*/];
406
+ }
407
+ });
408
+ }); });
409
+ it('should return only the requested feature flags in flat mode with default config', function () { return __awaiter(void 0, void 0, void 0, function () {
410
+ var flagsByKeys;
411
+ return __generator(this, function (_a) {
412
+ switch (_a.label) {
413
+ case 0: return [4 /*yield*/, (0, utils_1.getFeatureFlagsByKeys)([
414
+ 'test_flag_3',
415
+ 'test_flag_1',
416
+ ])];
417
+ case 1:
418
+ flagsByKeys = _a.sent();
419
+ expect(flagsByKeys).toEqual({
420
+ test_flag_1: true,
421
+ test_flag_3: false,
422
+ });
423
+ return [2 /*return*/];
424
+ }
425
+ });
426
+ }); });
427
+ it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
428
+ var getFeatureFlagsByKeys, flagsAll;
429
+ return __generator(this, function (_a) {
430
+ switch (_a.label) {
431
+ case 0:
432
+ 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 ({
433
+ decideForKeys: jest
434
+ .fn()
435
+ .mockImplementation(function (config) {
436
+ return undefined;
437
+ }),
438
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
439
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
440
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'])];
441
+ case 1:
442
+ flagsAll = _a.sent();
443
+ expect(flagsAll).toEqual({});
444
+ return [2 /*return*/];
445
+ }
446
+ });
447
+ }); });
448
+ it('should return defaultFeatureFlags when they have been passed and optimizely client creation fails', function () { return __awaiter(void 0, void 0, void 0, function () {
449
+ var getFeatureFlagsByKeys, config, flagsByKeys;
450
+ return __generator(this, function (_a) {
451
+ switch (_a.label) {
452
+ case 0:
453
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
454
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
455
+ decideForKeys: jest
456
+ .fn()
457
+ .mockImplementation(function (keys, config) {
458
+ var filtered = {};
459
+ keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
460
+ return filtered;
461
+ }),
462
+ }); }, onReady: jest
463
+ .fn()
464
+ .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
465
+ }); });
466
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
467
+ config = {
364
468
  defaultFeatureFlags: {
365
469
  default_flag: {
366
470
  variationKey: 'off',
@@ -369,304 +473,121 @@ describe.skip('getAllFeatureFlags', function () {
369
473
  },
370
474
  },
371
475
  };
372
- return [4 /*yield*/, getAllFeatureFlags(options)];
476
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], config)];
373
477
  case 1:
374
- flagsAll = _a.sent();
375
- expect(flagsAll).toEqual(options.defaultFeatureFlags);
478
+ flagsByKeys = _a.sent();
479
+ expect(flagsByKeys).toEqual(config.defaultFeatureFlags);
480
+ return [2 /*return*/];
481
+ }
482
+ });
483
+ }); });
484
+ 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 () {
485
+ var getFeatureFlagsByKeys, flagsByKeys;
486
+ return __generator(this, function (_a) {
487
+ switch (_a.label) {
488
+ case 0:
489
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
490
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
491
+ decideForKeys: jest
492
+ .fn()
493
+ .mockImplementation(function (keys, config) {
494
+ var filtered = {};
495
+ keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
496
+ return filtered;
497
+ }),
498
+ }); }, onReady: jest
499
+ .fn()
500
+ .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
501
+ }); });
502
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
503
+ return [4 /*yield*/, getFeatureFlagsByKeys([
504
+ 'test_flag_3',
505
+ 'test_flag_1',
506
+ ])];
507
+ case 1:
508
+ flagsByKeys = _a.sent();
509
+ expect(flagsByKeys).toEqual({});
510
+ return [2 /*return*/];
511
+ }
512
+ });
513
+ }); });
514
+ });
515
+ describe('trackEvent', function () {
516
+ it('should track event successfully when user context is available', function () { return __awaiter(void 0, void 0, void 0, function () {
517
+ var mockTrackEvent, trackEvent, eventName, tags, config;
518
+ return __generator(this, function (_a) {
519
+ switch (_a.label) {
520
+ case 0:
521
+ mockTrackEvent = jest.fn();
522
+ jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return ({
523
+ createUserContext: function () { return ({
524
+ trackEvent: mockTrackEvent,
525
+ }); },
526
+ onReady: jest.fn().mockResolvedValue({ success: true }),
527
+ }); } })); });
528
+ trackEvent = require('../utils').trackEvent;
529
+ eventName = 'test_event';
530
+ tags = { userId: '123', action: 'click' };
531
+ config = {
532
+ sdkKey: 'test_key',
533
+ userData: { userId: 'asrt', attributes: { has_consent: true } },
534
+ };
535
+ return [4 /*yield*/, trackEvent(eventName, tags, config)];
536
+ case 1:
537
+ _a.sent();
538
+ expect(mockTrackEvent).toHaveBeenCalledWith(eventName, tags);
539
+ return [2 /*return*/];
540
+ }
541
+ });
542
+ }); });
543
+ it('should not track event if user has no consent', function () { return __awaiter(void 0, void 0, void 0, function () {
544
+ var mockTrackEvent, trackEvent, eventName, tags, config;
545
+ return __generator(this, function (_a) {
546
+ switch (_a.label) {
547
+ case 0:
548
+ mockTrackEvent = jest.fn();
549
+ jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return ({
550
+ createUserContext: function () { return ({
551
+ trackEvent: mockTrackEvent,
552
+ }); },
553
+ onReady: jest.fn().mockResolvedValue({ success: true }),
554
+ }); } })); });
555
+ trackEvent = require('../utils').trackEvent;
556
+ eventName = 'test_event';
557
+ tags = { userId: '123', action: 'click' };
558
+ config = {
559
+ sdkConfig: { sdkKey: 'test_key' },
560
+ userData: { userId: 'asrt', attributes: { has_consent: false } },
561
+ };
562
+ return [4 /*yield*/, expect(trackEvent(eventName, tags, config)).rejects.toThrow("Failed to track event 'test_event': User has no consent.")];
563
+ case 1:
564
+ _a.sent();
565
+ expect(mockTrackEvent).not.toHaveBeenCalled();
566
+ return [2 /*return*/];
567
+ }
568
+ });
569
+ }); });
570
+ it('should throw error when user context is not available', function () { return __awaiter(void 0, void 0, void 0, function () {
571
+ var trackEvent, eventName, tags, config;
572
+ return __generator(this, function (_a) {
573
+ switch (_a.label) {
574
+ case 0:
575
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
576
+ createInstance: function () { return ({
577
+ createUserContext: jest.fn().mockReturnValue(null),
578
+ onReady: jest.fn().mockResolvedValue({ success: true }),
579
+ }); },
580
+ }); });
581
+ trackEvent = require('../utils').trackEvent;
582
+ eventName = 'test_event';
583
+ tags = { userId: '123', action: 'click' };
584
+ config = { sdkKey: 'test_key' };
585
+ return [4 /*yield*/, expect(trackEvent(eventName, tags, config)).rejects.toThrow("Error: Failed to track event 'test_event': User has no consent.")];
586
+ case 1:
587
+ _a.sent();
376
588
  return [2 /*return*/];
377
589
  }
378
590
  });
379
591
  }); });
380
592
  });
381
- // describe('getFlagsAll', () => {
382
- // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
383
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
384
- // createInstance: () => ({
385
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
386
- // createUserContext: () => ({
387
- // decideAll: jest
388
- // .fn()
389
- // .mockImplementation((options?: OptimizelyDecideOption[]) => {
390
- // return flagsMock as {
391
- // [key: string]: Omit<OptimizelyDecision, 'userContext'>
392
- // }
393
- // }),
394
- // }),
395
- // onReady: jest
396
- // .fn()
397
- // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
398
- // }),
399
- // }))
400
- // const { getFlagsAll } = require('../utils')
401
- // const options: SDKConfig = {
402
- // defaultFeatureFlags: {
403
- // default_flag: {
404
- // variationKey: 'off',
405
- // enabled: true,
406
- // variables: {},
407
- // },
408
- // },
409
- // }
410
- // const flagsAll = await getFlagsAll(options)
411
- // expect(flagsAll).toEqual(options.defaultFeatureFlags)
412
- // })
413
- // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
414
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
415
- // createInstance: () => ({
416
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
417
- // createUserContext: () => ({
418
- // decideAll: jest
419
- // .fn()
420
- // .mockImplementation((options?: OptimizelyDecideOption[]) => {
421
- // return flagsMock as {
422
- // [key: string]: Omit<OptimizelyDecision, 'userContext'>
423
- // }
424
- // }),
425
- // }),
426
- // onReady: jest
427
- // .fn()
428
- // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
429
- // }),
430
- // }))
431
- // const { getFlagsAll } = require('../utils')
432
- // const flagsAll = await getFlagsAll()
433
- // expect(flagsAll).toEqual({})
434
- // })
435
- // })
436
- // describe('closeFlagsInstance', () => {
437
- // it('should close sdk instance successfully', async () => {
438
- // const spy = jest.spyOn(console, 'log')
439
- // await getFlagsAll()
440
- // await closeFlagsInstance()
441
- // expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully')
442
- // })
443
- // it('should not close sdk instance sucessfully', async () => {
444
- // const spy = jest.spyOn(console, 'log')
445
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
446
- // createInstance: () => ({
447
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
448
- // createUserContext: () => ({
449
- // decide: jest
450
- // .fn()
451
- // .mockImplementation(
452
- // (key: string, options?: OptimizelyDecideOption[]) => {
453
- // return getFlagsAll as Omit<OptimizelyDecision, 'userContext'>
454
- // }
455
- // ),
456
- // }),
457
- // onReady: jest.fn().mockResolvedValue({ success: true }),
458
- // close: jest
459
- // .fn()
460
- // .mockResolvedValue({ success: false, reason: 'Closing rejected' }),
461
- // }),
462
- // }))
463
- // const { getFlagsAll, closeFlagsInstance } = require('../utils')
464
- // await getFlagsAll()
465
- // await closeFlagsInstance()
466
- // expect(spy).toHaveBeenCalledWith(
467
- // 'closing Optimizely instance failed, reason: Closing rejected'
468
- // )
469
- // })
470
- // })
471
- // describe('getFlag', () => {
472
- // it('should return a flag with default options', async () => {
473
- // const flag = await getFlag('testing_flag_with_variations_and_variables')
474
- // expect(flag).toEqual({
475
- // testing_flag_with_variations_and_variables: {
476
- // variationKey: 'primary_with_new_weclome_message_and_max_accounts',
477
- // enabled: true,
478
- // variables: {
479
- // family_primary_welcome_message: 'This is the new message',
480
- // family_primary_enable_secondary_accounts: true,
481
- // family_primary_max_secondary_accounts: 10,
482
- // family_primary_metadata_json: {
483
- // metadata1: 'a',
484
- // },
485
- // },
486
- // },
487
- // })
488
- // })
489
- // it('should return empty object if no flags are fetched', async () => {
490
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
491
- // ...jest.requireActual('@optimizely/optimizely-sdk'),
492
- // createInstance: () => ({
493
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
494
- // createUserContext: () => ({
495
- // decide: jest
496
- // .fn()
497
- // .mockImplementation((options?: OptimizelyDecideOption[]) => {
498
- // return undefined
499
- // }),
500
- // }),
501
- // onReady: jest.fn().mockResolvedValue({ success: true }),
502
- // close: jest.fn().mockResolvedValue({ success: true }),
503
- // }),
504
- // }))
505
- // const { getFlag } = require('../utils')
506
- // const flagsAll = await getFlag('testing_flag_with_variations_and_variables')
507
- // expect(flagsAll).toEqual({})
508
- // })
509
- // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
510
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
511
- // createInstance: () => ({
512
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
513
- // createUserContext: () => ({
514
- // decide: jest
515
- // .fn()
516
- // .mockImplementation(
517
- // (key: string, options?: OptimizelyDecideOption[]) => {
518
- // return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
519
- // }
520
- // ),
521
- // }),
522
- // onReady: jest
523
- // .fn()
524
- // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
525
- // }),
526
- // }))
527
- // const { getFlag } = require('../utils')
528
- // const options: SDKConfig = {
529
- // defaultFeatureFlags: {
530
- // default_flag: {
531
- // variationKey: 'off',
532
- // enabled: true,
533
- // variables: {},
534
- // },
535
- // },
536
- // }
537
- // const flag = await getFlag(
538
- // 'testing_flag_with_variations_and_variables',
539
- // options
540
- // )
541
- // expect(flag).toEqual(options.defaultFeatureFlags)
542
- // })
543
- // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
544
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
545
- // createInstance: () => ({
546
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
547
- // createUserContext: () => ({
548
- // decide: jest
549
- // .fn()
550
- // .mockImplementation(
551
- // (key: string, options?: OptimizelyDecideOption[]) => {
552
- // return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
553
- // }
554
- // ),
555
- // }),
556
- // onReady: jest
557
- // .fn()
558
- // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
559
- // }),
560
- // }))
561
- // const { getFlag } = require('../utils')
562
- // const flag = await getFlag('testing_flag_with_variations_and_variables')
563
- // expect(flag).toEqual({})
564
- // })
565
- // })
566
- // describe('getFlagsByKeys', () => {
567
- // it('should return flags by keys with default options', async () => {
568
- // const flagsByKeys = await getFlagsByKeys([
569
- // 'another_test_flag_1',
570
- // 'qualtrics_flag',
571
- // ])
572
- // expect(flagsByKeys).toEqual({
573
- // qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
574
- // another_test_flag_1: {
575
- // variationKey: 'off',
576
- // enabled: false,
577
- // variables: {},
578
- // },
579
- // })
580
- // })
581
- // it('should return empty object if no flags are fetched', async () => {
582
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
583
- // ...jest.requireActual('@optimizely/optimizely-sdk'),
584
- // createInstance: () => ({
585
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
586
- // createUserContext: () => ({
587
- // decideForKeys: jest
588
- // .fn()
589
- // .mockImplementation((options?: OptimizelyDecideOption[]) => {
590
- // return undefined
591
- // }),
592
- // }),
593
- // onReady: jest.fn().mockResolvedValue({ success: true }),
594
- // close: jest.fn().mockResolvedValue({ success: true }),
595
- // }),
596
- // }))
597
- // const { getFlagsByKeys } = require('../utils')
598
- // const flagsAll = await getFlagsByKeys([
599
- // 'another_test_flag_1',
600
- // 'qualtrics_flag',
601
- // ])
602
- // expect(flagsAll).toEqual({})
603
- // })
604
- // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
605
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
606
- // createInstance: () => ({
607
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
608
- // createUserContext: () => ({
609
- // decideForKeys: jest
610
- // .fn()
611
- // .mockImplementation(
612
- // (keys: string[], options?: OptimizelyDecideOption[]) => {
613
- // const filtered: {
614
- // [key: string]: Omit<OptimizelyDecision, 'userContext'>
615
- // } = {}
616
- // keys.forEach((k) => (filtered[k] = flagsMock[k]))
617
- // return filtered
618
- // }
619
- // ),
620
- // }),
621
- // onReady: jest
622
- // .fn()
623
- // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
624
- // }),
625
- // }))
626
- // const { getFlagsByKeys } = require('../utils')
627
- // const options: SDKConfig = {
628
- // defaultFeatureFlags: {
629
- // default_flag: {
630
- // variationKey: 'off',
631
- // enabled: true,
632
- // variables: {},
633
- // },
634
- // },
635
- // }
636
- // const flagsByKeys = await getFlagsByKeys(
637
- // ['another_test_flag_1', 'qualtrics_flag'],
638
- // options
639
- // )
640
- // expect(flagsByKeys).toEqual(options.defaultFeatureFlags)
641
- // })
642
- // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
643
- // jest.doMock('@optimizely/optimizely-sdk', () => ({
644
- // createInstance: () => ({
645
- // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
646
- // createUserContext: () => ({
647
- // decideForKeys: jest
648
- // .fn()
649
- // .mockImplementation(
650
- // (keys: string[], options?: OptimizelyDecideOption[]) => {
651
- // const filtered: {
652
- // [key: string]: Omit<OptimizelyDecision, 'userContext'>
653
- // } = {}
654
- // keys.forEach((k) => (filtered[k] = flagsMock[k]))
655
- // return filtered
656
- // }
657
- // ),
658
- // }),
659
- // onReady: jest
660
- // .fn()
661
- // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
662
- // }),
663
- // }))
664
- // const { getFlagsByKeys } = require('../utils')
665
- // const flagsByKeys = await getFlagsByKeys([
666
- // 'another_test_flag_1',
667
- // 'qualtrics_flag',
668
- // ])
669
- // expect(flagsByKeys).toEqual({})
670
- // })
671
- // })
672
593
  //# sourceMappingURL=utils.tests.js.map