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