@newskit-render/feature-flags 0.0.0-767f0ff7 → 0.0.0-7ac5711ff

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 { _resetInstance, closeFlagsInstance, getFlag, getFlagsAll, getFlagsByKeys, } 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,30 +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('getFlagsAll', function () {
148
- it('should return all flags 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*/, getFlagsAll()];
157
+ case 0: return [4 /*yield*/, getAllFeatureFlags()];
153
158
  case 1:
154
159
  flagsAll = _a.sent();
155
160
  expect(flagsAll).toEqual({
156
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
157
- testing_flag: {
161
+ test_flag_3: false,
162
+ test_flag_1: true,
163
+ test_flag_2: true,
164
+ testing_flag_with_variations_and_variables: true,
165
+ });
166
+ return [2 /*return*/];
167
+ }
168
+ });
169
+ }); });
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
+ return __generator(this, function (_a) {
173
+ switch (_a.label) {
174
+ case 0: return [4 /*yield*/, getAllFeatureFlags(optionsWithIncludeFlagVariables)];
175
+ case 1:
176
+ flagsAll = _a.sent();
177
+ expect(flagsAll).toEqual({
178
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
179
+ test_flag_2: {
158
180
  variationKey: 'max_10',
159
181
  enabled: true,
160
182
  variables: { max_family_members: 10 },
161
183
  },
162
- another_test_flag_1: {
184
+ test_flag_3: {
163
185
  variationKey: 'off',
164
186
  enabled: false,
165
187
  variables: {},
@@ -181,13 +203,55 @@ describe('getFlagsAll', function () {
181
203
  }
182
204
  });
183
205
  }); });
184
- it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
185
- var options, flagsAll;
206
+ it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
207
+ var getAllFeatureFlags, flagsAll;
208
+ return __generator(this, function (_a) {
209
+ switch (_a.label) {
210
+ case 0:
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 ({
212
+ decideAll: jest
213
+ .fn()
214
+ .mockImplementation(function (config) {
215
+ return undefined;
216
+ }),
217
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
218
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
219
+ return [4 /*yield*/, getAllFeatureFlags()];
220
+ case 1:
221
+ flagsAll = _a.sent();
222
+ expect(flagsAll).toEqual({});
223
+ return [2 /*return*/];
224
+ }
225
+ });
226
+ }); });
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;
186
250
  return __generator(this, function (_a) {
187
251
  switch (_a.label) {
188
252
  case 0:
189
253
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
190
- options = {
254
+ config = {
191
255
  sdkConfig: {
192
256
  sdkKey: 'custom-optimizely-sdk',
193
257
  },
@@ -195,18 +259,19 @@ describe('getFlagsAll', function () {
195
259
  userId: 'user456',
196
260
  attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
197
261
  },
262
+ includeFlagVariables: true,
198
263
  };
199
- return [4 /*yield*/, getFlagsAll(options)];
264
+ return [4 /*yield*/, getAllFeatureFlags(config)];
200
265
  case 1:
201
266
  flagsAll = _a.sent();
202
267
  expect(flagsAll).toEqual({
203
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
204
- testing_flag: {
268
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
269
+ test_flag_2: {
205
270
  variationKey: 'max_10',
206
271
  enabled: true,
207
272
  variables: { max_family_members: 10 },
208
273
  },
209
- another_test_flag_1: {
274
+ test_flag_3: {
210
275
  variationKey: 'off',
211
276
  enabled: false,
212
277
  variables: {},
@@ -228,34 +293,13 @@ describe('getFlagsAll', function () {
228
293
  }
229
294
  });
230
295
  }); });
231
- it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
232
- var getFlagsAll, flagsAll;
233
- return __generator(this, function (_a) {
234
- switch (_a.label) {
235
- case 0:
236
- 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 ({
237
- decideAll: jest
238
- .fn()
239
- .mockImplementation(function (options) {
240
- return undefined;
241
- }),
242
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
243
- getFlagsAll = require('../utils').getFlagsAll;
244
- return [4 /*yield*/, getFlagsAll()];
245
- case 1:
246
- flagsAll = _a.sent();
247
- expect(flagsAll).toEqual({});
248
- return [2 /*return*/];
249
- }
250
- });
251
- }); });
252
296
  it('should return empty object when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
253
297
  var flagsAll;
254
298
  return __generator(this, function (_a) {
255
299
  switch (_a.label) {
256
300
  case 0:
257
301
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
258
- return [4 /*yield*/, getFlagsAll()];
302
+ return [4 /*yield*/, getAllFeatureFlags()];
259
303
  case 1:
260
304
  flagsAll = _a.sent();
261
305
  expect(flagsAll).toEqual({});
@@ -264,15 +308,15 @@ describe('getFlagsAll', function () {
264
308
  });
265
309
  }); });
266
310
  it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
267
- var getFlagsAll, flagsAll;
311
+ var getAllFeatureFlags, flagsAll;
268
312
  return __generator(this, function (_a) {
269
313
  switch (_a.label) {
270
314
  case 0:
271
315
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
272
316
  createInstance: jest.fn().mockReturnValue(null),
273
317
  }); });
274
- getFlagsAll = require('../utils').getFlagsAll;
275
- return [4 /*yield*/, getFlagsAll()];
318
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
319
+ return [4 /*yield*/, getAllFeatureFlags()];
276
320
  case 1:
277
321
  flagsAll = _a.sent();
278
322
  expect(flagsAll).toEqual({});
@@ -281,15 +325,15 @@ describe('getFlagsAll', function () {
281
325
  });
282
326
  }); });
283
327
  it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
284
- var getFlagsAll, flagsAll;
328
+ var getAllFeatureFlags, flagsAll;
285
329
  return __generator(this, function (_a) {
286
330
  switch (_a.label) {
287
331
  case 0:
288
332
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
289
333
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
290
334
  }); });
291
- getFlagsAll = require('../utils').getFlagsAll;
292
- return [4 /*yield*/, getFlagsAll()];
335
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
336
+ return [4 /*yield*/, getAllFeatureFlags()];
293
337
  case 1:
294
338
  flagsAll = _a.sent();
295
339
  expect(flagsAll).toEqual({});
@@ -298,14 +342,14 @@ describe('getFlagsAll', function () {
298
342
  });
299
343
  }); });
300
344
  it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
301
- var options;
345
+ var config;
302
346
  return __generator(this, function (_a) {
303
347
  switch (_a.label) {
304
348
  case 0:
305
- options = {
349
+ config = {
306
350
  logLevel: 'critical',
307
351
  };
308
- return [4 /*yield*/, getFlagsAll(options)];
352
+ return [4 /*yield*/, getAllFeatureFlags(config)];
309
353
  case 1:
310
354
  _a.sent();
311
355
  expect(setLogLevel).toBeCalledWith('critical');
@@ -315,7 +359,7 @@ describe('getFlagsAll', function () {
315
359
  });
316
360
  }); });
317
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 () {
318
- var getFlagsAll, options, flagsAll;
362
+ var getAllFeatureFlags, flagsAll;
319
363
  return __generator(this, function (_a) {
320
364
  switch (_a.label) {
321
365
  case 0:
@@ -323,204 +367,75 @@ describe('getFlagsAll', function () {
323
367
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
324
368
  decideAll: jest
325
369
  .fn()
326
- .mockImplementation(function (options) {
370
+ .mockImplementation(function (config) {
327
371
  return flagsMock;
328
372
  }),
329
373
  }); }, onReady: jest
330
374
  .fn()
331
375
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
332
376
  }); });
333
- getFlagsAll = require('../utils').getFlagsAll;
334
- options = {
335
- defaultFeatureFlags: {
336
- default_flag: {
337
- variationKey: 'off',
338
- enabled: true,
339
- variables: {},
340
- },
341
- },
342
- };
343
- return [4 /*yield*/, getFlagsAll(options)];
377
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
378
+ return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
344
379
  case 1:
345
380
  flagsAll = _a.sent();
346
- expect(flagsAll).toEqual(options.defaultFeatureFlags);
347
- return [2 /*return*/];
348
- }
349
- });
350
- }); });
351
- it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
352
- var getFlagsAll, flagsAll;
353
- return __generator(this, function (_a) {
354
- switch (_a.label) {
355
- case 0:
356
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
357
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
358
- decideAll: jest
359
- .fn()
360
- .mockImplementation(function (options) {
361
- return flagsMock;
362
- }),
363
- }); }, onReady: jest
364
- .fn()
365
- .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
366
- }); });
367
- getFlagsAll = require('../utils').getFlagsAll;
368
- return [4 /*yield*/, getFlagsAll()];
369
- case 1:
370
- flagsAll = _a.sent();
371
- expect(flagsAll).toEqual({});
381
+ expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
372
382
  return [2 /*return*/];
373
383
  }
374
384
  });
375
385
  }); });
376
386
  });
377
- describe('getFlag', function () {
378
- it('should return a flag with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
379
- var flag;
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;
380
390
  return __generator(this, function (_a) {
381
391
  switch (_a.label) {
382
- case 0: return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
392
+ case 0: return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
383
393
  case 1:
384
- flag = _a.sent();
385
- expect(flag).toEqual({
386
- testing_flag_with_variations_and_variables: {
387
- variationKey: 'primary_with_new_weclome_message_and_max_accounts',
388
- enabled: true,
389
- variables: {
390
- family_primary_welcome_message: 'This is the new message',
391
- family_primary_enable_secondary_accounts: true,
392
- family_primary_max_secondary_accounts: 10,
393
- family_primary_metadata_json: {
394
- metadata1: 'a',
395
- },
396
- },
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: {},
397
401
  },
398
402
  });
399
403
  return [2 /*return*/];
400
404
  }
401
405
  });
402
406
  }); });
403
- it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
404
- var getFlag, flagsAll;
405
- return __generator(this, function (_a) {
406
- switch (_a.label) {
407
- case 0:
408
- 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 ({
409
- decide: jest
410
- .fn()
411
- .mockImplementation(function (options) {
412
- return undefined;
413
- }),
414
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
415
- getFlag = require('../utils').getFlag;
416
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
417
- case 1:
418
- flagsAll = _a.sent();
419
- expect(flagsAll).toEqual({});
420
- return [2 /*return*/];
421
- }
422
- });
423
- }); });
424
- 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 () {
425
- var getFlag, options, flag;
426
- return __generator(this, function (_a) {
427
- switch (_a.label) {
428
- case 0:
429
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
430
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
431
- decide: jest
432
- .fn()
433
- .mockImplementation(function (key, options) {
434
- return flagsMock[key];
435
- }),
436
- }); }, onReady: jest
437
- .fn()
438
- .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
439
- }); });
440
- getFlag = require('../utils').getFlag;
441
- options = {
442
- defaultFeatureFlags: {
443
- default_flag: {
444
- variationKey: 'off',
445
- enabled: true,
446
- variables: {},
447
- },
448
- },
449
- };
450
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables', options)];
451
- case 1:
452
- flag = _a.sent();
453
- expect(flag).toEqual(options.defaultFeatureFlags);
454
- return [2 /*return*/];
455
- }
456
- });
457
- }); });
458
- it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
459
- var getFlag, flag;
460
- return __generator(this, function (_a) {
461
- switch (_a.label) {
462
- case 0:
463
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
464
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
465
- decide: jest
466
- .fn()
467
- .mockImplementation(function (key, options) {
468
- return flagsMock[key];
469
- }),
470
- }); }, onReady: jest
471
- .fn()
472
- .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
473
- }); });
474
- getFlag = require('../utils').getFlag;
475
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
476
- case 1:
477
- flag = _a.sent();
478
- expect(flag).toEqual({});
479
- return [2 /*return*/];
480
- }
481
- });
482
- }); });
483
- });
484
- describe('getFlagsByKeys', function () {
485
- it('should return flags by keys with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
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 () {
486
408
  var flagsByKeys;
487
409
  return __generator(this, function (_a) {
488
410
  switch (_a.label) {
489
- case 0: return [4 /*yield*/, getFlagsByKeys([
490
- 'another_test_flag_1',
491
- 'qualtrics_flag',
411
+ case 0: return [4 /*yield*/, getFeatureFlagsByKeys([
412
+ 'test_flag_3',
413
+ 'test_flag_1',
492
414
  ])];
493
415
  case 1:
494
416
  flagsByKeys = _a.sent();
495
417
  expect(flagsByKeys).toEqual({
496
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
497
- another_test_flag_1: {
498
- variationKey: 'off',
499
- enabled: false,
500
- variables: {},
501
- },
418
+ test_flag_1: true,
419
+ test_flag_3: false,
502
420
  });
503
421
  return [2 /*return*/];
504
422
  }
505
423
  });
506
424
  }); });
507
425
  it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
508
- var getFlagsByKeys, flagsAll;
426
+ var getFeatureFlagsByKeys, flagsAll;
509
427
  return __generator(this, function (_a) {
510
428
  switch (_a.label) {
511
429
  case 0:
512
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 ({
513
431
  decideForKeys: jest
514
432
  .fn()
515
- .mockImplementation(function (options) {
433
+ .mockImplementation(function (config) {
516
434
  return undefined;
517
435
  }),
518
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
519
- getFlagsByKeys = require('../utils').getFlagsByKeys;
520
- return [4 /*yield*/, getFlagsByKeys([
521
- 'another_test_flag_1',
522
- 'qualtrics_flag',
523
- ])];
436
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
437
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
438
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'])];
524
439
  case 1:
525
440
  flagsAll = _a.sent();
526
441
  expect(flagsAll).toEqual({});
@@ -528,8 +443,8 @@ describe('getFlagsByKeys', function () {
528
443
  }
529
444
  });
530
445
  }); });
531
- 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 () {
532
- var getFlagsByKeys, options, flagsByKeys;
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;
533
448
  return __generator(this, function (_a) {
534
449
  switch (_a.label) {
535
450
  case 0:
@@ -537,7 +452,7 @@ describe('getFlagsByKeys', function () {
537
452
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
538
453
  decideForKeys: jest
539
454
  .fn()
540
- .mockImplementation(function (keys, options) {
455
+ .mockImplementation(function (keys, config) {
541
456
  var filtered = {};
542
457
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
543
458
  return filtered;
@@ -546,8 +461,8 @@ describe('getFlagsByKeys', function () {
546
461
  .fn()
547
462
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
548
463
  }); });
549
- getFlagsByKeys = require('../utils').getFlagsByKeys;
550
- options = {
464
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
465
+ config = {
551
466
  defaultFeatureFlags: {
552
467
  default_flag: {
553
468
  variationKey: 'off',
@@ -556,16 +471,16 @@ describe('getFlagsByKeys', function () {
556
471
  },
557
472
  },
558
473
  };
559
- return [4 /*yield*/, getFlagsByKeys(['another_test_flag_1', 'qualtrics_flag'], options)];
474
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], config)];
560
475
  case 1:
561
476
  flagsByKeys = _a.sent();
562
- expect(flagsByKeys).toEqual(options.defaultFeatureFlags);
477
+ expect(flagsByKeys).toEqual(config.defaultFeatureFlags);
563
478
  return [2 /*return*/];
564
479
  }
565
480
  });
566
481
  }); });
567
- it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
568
- var getFlagsByKeys, flagsByKeys;
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;
569
484
  return __generator(this, function (_a) {
570
485
  switch (_a.label) {
571
486
  case 0:
@@ -573,7 +488,7 @@ describe('getFlagsByKeys', function () {
573
488
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
574
489
  decideForKeys: jest
575
490
  .fn()
576
- .mockImplementation(function (keys, options) {
491
+ .mockImplementation(function (keys, config) {
577
492
  var filtered = {};
578
493
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
579
494
  return filtered;
@@ -582,10 +497,10 @@ describe('getFlagsByKeys', function () {
582
497
  .fn()
583
498
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
584
499
  }); });
585
- getFlagsByKeys = require('../utils').getFlagsByKeys;
586
- return [4 /*yield*/, getFlagsByKeys([
587
- 'another_test_flag_1',
588
- 'qualtrics_flag',
500
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
501
+ return [4 /*yield*/, getFeatureFlagsByKeys([
502
+ 'test_flag_3',
503
+ 'test_flag_1',
589
504
  ])];
590
505
  case 1:
591
506
  flagsByKeys = _a.sent();
@@ -595,49 +510,49 @@ describe('getFlagsByKeys', function () {
595
510
  });
596
511
  }); });
597
512
  });
598
- describe('closeFlagsInstance', function () {
599
- it('should close sdk instance sucessfully', function () { return __awaiter(void 0, void 0, void 0, function () {
600
- var spy;
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;
601
516
  return __generator(this, function (_a) {
602
517
  switch (_a.label) {
603
518
  case 0:
604
- spy = jest.spyOn(console, 'log');
605
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
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 = { sdkKey: 'test_key' };
530
+ return [4 /*yield*/, trackEvent(eventName, tags, config)];
606
531
  case 1:
607
532
  _a.sent();
608
- return [4 /*yield*/, closeFlagsInstance()];
609
- case 2:
610
- _a.sent();
611
- expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully');
533
+ expect(mockTrackEvent).toHaveBeenCalledWith(eventName, tags);
612
534
  return [2 /*return*/];
613
535
  }
614
536
  });
615
537
  }); });
616
- it('should not close sdk instance sucessfully', function () { return __awaiter(void 0, void 0, void 0, function () {
617
- var spy, _a, getFlag, closeFlagsInstance;
618
- return __generator(this, function (_b) {
619
- switch (_b.label) {
538
+ it('should throw error when user context is not available', function () { return __awaiter(void 0, void 0, void 0, function () {
539
+ var trackEvent, eventName, tags, config;
540
+ return __generator(this, function (_a) {
541
+ switch (_a.label) {
620
542
  case 0:
621
- spy = jest.spyOn(console, 'log');
622
543
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
623
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
624
- decide: jest
625
- .fn()
626
- .mockImplementation(function (key, options) {
627
- return flagsMock[key];
628
- }),
629
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest
630
- .fn()
631
- .mockResolvedValue({ success: false, reason: 'Closing rejected' }) })); },
544
+ createInstance: function () { return ({
545
+ createUserContext: jest.fn().mockReturnValue(null),
546
+ onReady: jest.fn().mockResolvedValue({ success: true }),
547
+ }); },
632
548
  }); });
633
- _a = require('../utils'), getFlag = _a.getFlag, closeFlagsInstance = _a.closeFlagsInstance;
634
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
549
+ trackEvent = require('../utils').trackEvent;
550
+ eventName = 'test_event';
551
+ tags = { userId: '123', action: 'click' };
552
+ config = { sdkKey: 'test_key' };
553
+ return [4 /*yield*/, expect(trackEvent(eventName, tags, config)).rejects.toThrow("Failed to track event 'test_event': User context is not available.")];
635
554
  case 1:
636
- _b.sent();
637
- return [4 /*yield*/, closeFlagsInstance()];
638
- case 2:
639
- _b.sent();
640
- expect(spy).toHaveBeenCalledWith('closing Optimizely instance failed, reason: Closing rejected');
555
+ _a.sent();
641
556
  return [2 /*return*/];
642
557
  }
643
558
  });