@newskit-render/feature-flags 0.0.0-e16014a0 → 0.0.0-e6792392a

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.");
@@ -49,67 +49,63 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
50
  var optimizely_sdk_1 = require("@optimizely/optimizely-sdk");
51
51
  var utils_1 = require("../utils");
52
- var types_1 = require("../types");
53
52
  var originalEnv = process.env;
54
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 ({
55
54
  decide: jest
56
55
  .fn()
57
- .mockImplementation(function (key, options) {
56
+ .mockImplementation(function (key, config) {
58
57
  return flagsMock[key];
59
58
  }),
60
59
  decideForKeys: jest
61
60
  .fn()
62
- .mockImplementation(function (keys, options) {
61
+ .mockImplementation(function (keys, config) {
63
62
  var filtered = {};
64
63
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
65
64
  return filtered;
66
65
  }),
67
66
  decideAll: jest
68
67
  .fn()
69
- .mockImplementation(function (options) {
68
+ .mockImplementation(function (config) {
70
69
  return flagsMock;
71
70
  }),
72
71
  }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
73
72
  var flagsMock = {
74
- qualtrics_flag: {
73
+ test_flag_1: {
75
74
  variationKey: 'on',
76
75
  enabled: true,
77
76
  variables: {},
78
77
  ruleKey: 'default-rollout-216689-29200910123',
79
- flagKey: 'qualtrics_flag',
78
+ flagKey: 'test_flag_1',
80
79
  userContext: {
81
80
  _qualifiedSegments: null,
82
- // optimizely: [e],
83
81
  userId: 'user123',
84
82
  attributes: {},
85
83
  forcedDecisionsMap: {},
86
84
  },
87
85
  reasons: [],
88
86
  },
89
- testing_flag: {
87
+ test_flag_2: {
90
88
  variationKey: 'max_10',
91
89
  enabled: true,
92
90
  variables: { max_family_members: 10 },
93
91
  ruleKey: 'default-rollout-223709-29200910123',
94
- flagKey: 'testing_flag',
92
+ flagKey: 'test_flag_2',
95
93
  userContext: {
96
94
  _qualifiedSegments: null,
97
- // optimizely: [e],
98
95
  userId: 'user123',
99
96
  attributes: {},
100
97
  forcedDecisionsMap: {},
101
98
  },
102
99
  reasons: [],
103
100
  },
104
- another_test_flag_1: {
101
+ test_flag_3: {
105
102
  variationKey: 'off',
106
103
  enabled: false,
107
104
  variables: {},
108
105
  ruleKey: 'default-rollout-225089-29200910123',
109
- flagKey: 'another_test_flag_1',
106
+ flagKey: 'test_flag_3',
110
107
  userContext: {
111
108
  _qualifiedSegments: null,
112
- // optimizely: [e],
113
109
  userId: 'user123',
114
110
  attributes: {},
115
111
  forcedDecisionsMap: {},
@@ -143,25 +139,51 @@ beforeEach(function () {
143
139
  jest.resetModules();
144
140
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
145
141
  });
146
- afterEach(function () {
147
- (0, utils_1._resetInstance)();
148
- });
149
- describe('getFlagsAll', function () {
150
- it('should return all flags 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 () {
151
156
  var flagsAll;
152
157
  return __generator(this, function (_a) {
153
158
  switch (_a.label) {
154
- case 0: return [4 /*yield*/, (0, utils_1.getFlagsAll)()];
159
+ case 0: return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)()];
155
160
  case 1:
156
161
  flagsAll = _a.sent();
157
162
  expect(flagsAll).toEqual({
158
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
159
- testing_flag: {
163
+ test_flag_3: false,
164
+ test_flag_1: true,
165
+ test_flag_2: true,
166
+ testing_flag_with_variations_and_variables: true,
167
+ });
168
+ return [2 /*return*/];
169
+ }
170
+ });
171
+ }); });
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
+ return __generator(this, function (_a) {
175
+ switch (_a.label) {
176
+ case 0: return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(optionsWithIncludeFlagVariables)];
177
+ case 1:
178
+ flagsAll = _a.sent();
179
+ expect(flagsAll).toEqual({
180
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
181
+ test_flag_2: {
160
182
  variationKey: 'max_10',
161
183
  enabled: true,
162
184
  variables: { max_family_members: 10 },
163
185
  },
164
- another_test_flag_1: {
186
+ test_flag_3: {
165
187
  variationKey: 'off',
166
188
  enabled: false,
167
189
  variables: {},
@@ -183,13 +205,55 @@ describe('getFlagsAll', function () {
183
205
  }
184
206
  });
185
207
  }); });
186
- it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
187
- var options, flagsAll;
208
+ it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
209
+ var getAllFeatureFlags, flagsAll;
210
+ return __generator(this, function (_a) {
211
+ switch (_a.label) {
212
+ case 0:
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 ({
214
+ decideAll: jest
215
+ .fn()
216
+ .mockImplementation(function (config) {
217
+ return undefined;
218
+ }),
219
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
220
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
221
+ return [4 /*yield*/, getAllFeatureFlags()];
222
+ case 1:
223
+ flagsAll = _a.sent();
224
+ expect(flagsAll).toEqual({});
225
+ return [2 /*return*/];
226
+ }
227
+ });
228
+ }); });
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;
188
252
  return __generator(this, function (_a) {
189
253
  switch (_a.label) {
190
254
  case 0:
191
255
  process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
192
- options = {
256
+ config = {
193
257
  sdkConfig: {
194
258
  sdkKey: 'custom-optimizely-sdk',
195
259
  },
@@ -197,18 +261,19 @@ describe('getFlagsAll', function () {
197
261
  userId: 'user456',
198
262
  attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
199
263
  },
264
+ includeFlagVariables: true,
200
265
  };
201
- return [4 /*yield*/, (0, utils_1.getFlagsAll)(options)];
266
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
202
267
  case 1:
203
268
  flagsAll = _a.sent();
204
269
  expect(flagsAll).toEqual({
205
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
206
- testing_flag: {
270
+ test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
271
+ test_flag_2: {
207
272
  variationKey: 'max_10',
208
273
  enabled: true,
209
274
  variables: { max_family_members: 10 },
210
275
  },
211
- another_test_flag_1: {
276
+ test_flag_3: {
212
277
  variationKey: 'off',
213
278
  enabled: false,
214
279
  variables: {},
@@ -230,20 +295,13 @@ describe('getFlagsAll', function () {
230
295
  }
231
296
  });
232
297
  }); });
233
- it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
234
- var getFlagsAll, flagsAll;
298
+ it('should return empty object when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
299
+ var flagsAll;
235
300
  return __generator(this, function (_a) {
236
301
  switch (_a.label) {
237
302
  case 0:
238
- 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 ({
239
- decideAll: jest
240
- .fn()
241
- .mockImplementation(function (options) {
242
- return undefined;
243
- }),
244
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
245
- getFlagsAll = require('../utils').getFlagsAll;
246
- return [4 /*yield*/, getFlagsAll()];
303
+ process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
304
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)()];
247
305
  case 1:
248
306
  flagsAll = _a.sent();
249
307
  expect(flagsAll).toEqual({});
@@ -251,119 +309,33 @@ describe('getFlagsAll', function () {
251
309
  }
252
310
  });
253
311
  }); });
254
- it('should throw error when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
255
- return __generator(this, function (_a) {
256
- process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
257
- expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
258
- switch (_a.label) {
259
- case 0: return [4 /*yield*/, (0, utils_1.getFlagsAll)()];
260
- case 1: return [2 /*return*/, _a.sent()];
261
- }
262
- }); }); }).rejects.toThrow(new types_1.MissingConfigurationError());
263
- return [2 /*return*/];
264
- });
265
- }); });
266
- it('should throw error when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
267
- var getFlagsAll;
268
- return __generator(this, function (_a) {
269
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
270
- createInstance: jest.fn().mockReturnValue(null),
271
- }); });
272
- getFlagsAll = require('../utils').getFlagsAll;
273
- expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
274
- switch (_a.label) {
275
- case 0: return [4 /*yield*/, getFlagsAll()];
276
- case 1: return [2 /*return*/, _a.sent()];
277
- }
278
- }); }); }).rejects.toThrow(new types_1.MissingInstanceError());
279
- return [2 /*return*/];
280
- });
281
- }); });
282
- it('should throw error when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
283
- var getFlagsAll;
284
- return __generator(this, function (_a) {
285
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
286
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
287
- }); });
288
- getFlagsAll = require('../utils').getFlagsAll;
289
- expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
290
- switch (_a.label) {
291
- case 0: return [4 /*yield*/, getFlagsAll()];
292
- case 1: return [2 /*return*/, _a.sent()];
293
- }
294
- }); }); }).rejects.toThrow(new types_1.MissingUserContextError());
295
- return [2 /*return*/];
296
- });
297
- }); });
298
- it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
299
- var options;
300
- return __generator(this, function (_a) {
301
- switch (_a.label) {
302
- case 0:
303
- options = {
304
- logLevel: 'critical',
305
- };
306
- return [4 /*yield*/, (0, utils_1.getFlagsAll)(options)];
307
- case 1:
308
- _a.sent();
309
- expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
310
- expect(optimizely_sdk_1.setLogger).toHaveBeenCalled();
311
- return [2 /*return*/];
312
- }
313
- });
314
- }); });
315
- it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
316
- var getFlagsAll, options, flagsAll;
312
+ it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
313
+ var getAllFeatureFlags, flagsAll;
317
314
  return __generator(this, function (_a) {
318
315
  switch (_a.label) {
319
316
  case 0:
320
317
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
321
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
322
- decideAll: jest
323
- .fn()
324
- .mockImplementation(function (options) {
325
- return flagsMock;
326
- }),
327
- }); }, onReady: jest
328
- .fn()
329
- .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
318
+ createInstance: jest.fn().mockReturnValue(null),
330
319
  }); });
331
- getFlagsAll = require('../utils').getFlagsAll;
332
- options = {
333
- defaultFeatureFlags: {
334
- default_flag: {
335
- variationKey: 'off',
336
- enabled: true,
337
- variables: {},
338
- },
339
- },
340
- };
341
- return [4 /*yield*/, getFlagsAll(options)];
320
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
321
+ return [4 /*yield*/, getAllFeatureFlags()];
342
322
  case 1:
343
323
  flagsAll = _a.sent();
344
- expect(flagsAll).toEqual(options.defaultFeatureFlags);
324
+ expect(flagsAll).toEqual({});
345
325
  return [2 /*return*/];
346
326
  }
347
327
  });
348
328
  }); });
349
- it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
350
- var getFlagsAll, flagsAll;
329
+ it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
330
+ var getAllFeatureFlags, flagsAll;
351
331
  return __generator(this, function (_a) {
352
332
  switch (_a.label) {
353
333
  case 0:
354
334
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
355
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
356
- decideAll: jest
357
- .fn()
358
- .mockImplementation(function (options) {
359
- return flagsMock;
360
- }),
361
- }); }, onReady: jest
362
- .fn()
363
- .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
335
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
364
336
  }); });
365
- getFlagsAll = require('../utils').getFlagsAll;
366
- return [4 /*yield*/, getFlagsAll()];
337
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
338
+ return [4 /*yield*/, getAllFeatureFlags()];
367
339
  case 1:
368
340
  flagsAll = _a.sent();
369
341
  expect(flagsAll).toEqual({});
@@ -371,154 +343,101 @@ describe('getFlagsAll', function () {
371
343
  }
372
344
  });
373
345
  }); });
374
- });
375
- describe('getFlag', function () {
376
- it('should return a flag with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
377
- var flag;
378
- return __generator(this, function (_a) {
379
- switch (_a.label) {
380
- case 0: return [4 /*yield*/, (0, utils_1.getFlag)('testing_flag_with_variations_and_variables')];
381
- case 1:
382
- flag = _a.sent();
383
- expect(flag).toEqual({
384
- testing_flag_with_variations_and_variables: {
385
- variationKey: 'primary_with_new_weclome_message_and_max_accounts',
386
- enabled: true,
387
- variables: {
388
- family_primary_welcome_message: 'This is the new message',
389
- family_primary_enable_secondary_accounts: true,
390
- family_primary_max_secondary_accounts: 10,
391
- family_primary_metadata_json: {
392
- metadata1: 'a',
393
- },
394
- },
395
- },
396
- });
397
- return [2 /*return*/];
398
- }
399
- });
400
- }); });
401
- it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
402
- var getFlag, flagsAll;
346
+ it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
347
+ var config;
403
348
  return __generator(this, function (_a) {
404
349
  switch (_a.label) {
405
350
  case 0:
406
- jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
407
- decide: jest
408
- .fn()
409
- .mockImplementation(function (options) {
410
- return undefined;
411
- }),
412
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
413
- getFlag = require('../utils').getFlag;
414
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
351
+ config = {
352
+ logLevel: 'critical',
353
+ };
354
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
415
355
  case 1:
416
- flagsAll = _a.sent();
417
- expect(flagsAll).toEqual({});
356
+ _a.sent();
357
+ expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
358
+ expect(optimizely_sdk_1.setLogger).toHaveBeenCalled();
418
359
  return [2 /*return*/];
419
360
  }
420
361
  });
421
362
  }); });
422
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 () {
423
- var getFlag, options, flag;
364
+ var getAllFeatureFlags, flagsAll;
424
365
  return __generator(this, function (_a) {
425
366
  switch (_a.label) {
426
367
  case 0:
427
368
  jest.doMock('@optimizely/optimizely-sdk', function () { return ({
428
369
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
429
- decide: jest
370
+ decideAll: jest
430
371
  .fn()
431
- .mockImplementation(function (key, options) {
432
- return flagsMock[key];
372
+ .mockImplementation(function (config) {
373
+ return flagsMock;
433
374
  }),
434
375
  }); }, onReady: jest
435
376
  .fn()
436
377
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
437
378
  }); });
438
- getFlag = require('../utils').getFlag;
439
- options = {
440
- defaultFeatureFlags: {
441
- default_flag: {
442
- variationKey: 'off',
443
- enabled: true,
444
- variables: {},
445
- },
446
- },
447
- };
448
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables', options)];
379
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
380
+ return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
449
381
  case 1:
450
- flag = _a.sent();
451
- expect(flag).toEqual(options.defaultFeatureFlags);
382
+ flagsAll = _a.sent();
383
+ expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
452
384
  return [2 /*return*/];
453
385
  }
454
386
  });
455
387
  }); });
456
- it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
457
- var getFlag, flag;
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;
458
392
  return __generator(this, function (_a) {
459
393
  switch (_a.label) {
460
- case 0:
461
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
462
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
463
- decide: jest
464
- .fn()
465
- .mockImplementation(function (key, options) {
466
- return flagsMock[key];
467
- }),
468
- }); }, onReady: jest
469
- .fn()
470
- .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
471
- }); });
472
- getFlag = require('../utils').getFlag;
473
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
394
+ case 0: return [4 /*yield*/, (0, utils_1.getFeatureFlagsByKeys)(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
474
395
  case 1:
475
- flag = _a.sent();
476
- expect(flag).toEqual({});
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
+ });
477
405
  return [2 /*return*/];
478
406
  }
479
407
  });
480
408
  }); });
481
- });
482
- describe('getFlagsByKeys', function () {
483
- it('should return flags by keys with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
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 () {
484
410
  var flagsByKeys;
485
411
  return __generator(this, function (_a) {
486
412
  switch (_a.label) {
487
- case 0: return [4 /*yield*/, (0, utils_1.getFlagsByKeys)([
488
- 'another_test_flag_1',
489
- 'qualtrics_flag',
413
+ case 0: return [4 /*yield*/, (0, utils_1.getFeatureFlagsByKeys)([
414
+ 'test_flag_3',
415
+ 'test_flag_1',
490
416
  ])];
491
417
  case 1:
492
418
  flagsByKeys = _a.sent();
493
419
  expect(flagsByKeys).toEqual({
494
- qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
495
- another_test_flag_1: {
496
- variationKey: 'off',
497
- enabled: false,
498
- variables: {},
499
- },
420
+ test_flag_1: true,
421
+ test_flag_3: false,
500
422
  });
501
423
  return [2 /*return*/];
502
424
  }
503
425
  });
504
426
  }); });
505
427
  it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
506
- var getFlagsByKeys, flagsAll;
428
+ var getFeatureFlagsByKeys, flagsAll;
507
429
  return __generator(this, function (_a) {
508
430
  switch (_a.label) {
509
431
  case 0:
510
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 ({
511
433
  decideForKeys: jest
512
434
  .fn()
513
- .mockImplementation(function (options) {
435
+ .mockImplementation(function (config) {
514
436
  return undefined;
515
437
  }),
516
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
517
- getFlagsByKeys = require('../utils').getFlagsByKeys;
518
- return [4 /*yield*/, getFlagsByKeys([
519
- 'another_test_flag_1',
520
- 'qualtrics_flag',
521
- ])];
438
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
439
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
440
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'])];
522
441
  case 1:
523
442
  flagsAll = _a.sent();
524
443
  expect(flagsAll).toEqual({});
@@ -526,8 +445,8 @@ describe('getFlagsByKeys', function () {
526
445
  }
527
446
  });
528
447
  }); });
529
- it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
530
- var getFlagsByKeys, options, flagsByKeys;
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;
531
450
  return __generator(this, function (_a) {
532
451
  switch (_a.label) {
533
452
  case 0:
@@ -535,7 +454,7 @@ describe('getFlagsByKeys', function () {
535
454
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
536
455
  decideForKeys: jest
537
456
  .fn()
538
- .mockImplementation(function (keys, options) {
457
+ .mockImplementation(function (keys, config) {
539
458
  var filtered = {};
540
459
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
541
460
  return filtered;
@@ -544,8 +463,8 @@ describe('getFlagsByKeys', function () {
544
463
  .fn()
545
464
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
546
465
  }); });
547
- getFlagsByKeys = require('../utils').getFlagsByKeys;
548
- options = {
466
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
467
+ config = {
549
468
  defaultFeatureFlags: {
550
469
  default_flag: {
551
470
  variationKey: 'off',
@@ -554,16 +473,16 @@ describe('getFlagsByKeys', function () {
554
473
  },
555
474
  },
556
475
  };
557
- return [4 /*yield*/, getFlagsByKeys(['another_test_flag_1', 'qualtrics_flag'], options)];
476
+ return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], config)];
558
477
  case 1:
559
478
  flagsByKeys = _a.sent();
560
- expect(flagsByKeys).toEqual(options.defaultFeatureFlags);
479
+ expect(flagsByKeys).toEqual(config.defaultFeatureFlags);
561
480
  return [2 /*return*/];
562
481
  }
563
482
  });
564
483
  }); });
565
- it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
566
- var getFlagsByKeys, flagsByKeys;
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;
567
486
  return __generator(this, function (_a) {
568
487
  switch (_a.label) {
569
488
  case 0:
@@ -571,7 +490,7 @@ describe('getFlagsByKeys', function () {
571
490
  createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
572
491
  decideForKeys: jest
573
492
  .fn()
574
- .mockImplementation(function (keys, options) {
493
+ .mockImplementation(function (keys, config) {
575
494
  var filtered = {};
576
495
  keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
577
496
  return filtered;
@@ -580,10 +499,10 @@ describe('getFlagsByKeys', function () {
580
499
  .fn()
581
500
  .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
582
501
  }); });
583
- getFlagsByKeys = require('../utils').getFlagsByKeys;
584
- return [4 /*yield*/, getFlagsByKeys([
585
- 'another_test_flag_1',
586
- 'qualtrics_flag',
502
+ getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
503
+ return [4 /*yield*/, getFeatureFlagsByKeys([
504
+ 'test_flag_3',
505
+ 'test_flag_1',
587
506
  ])];
588
507
  case 1:
589
508
  flagsByKeys = _a.sent();
@@ -593,52 +512,4 @@ describe('getFlagsByKeys', function () {
593
512
  });
594
513
  }); });
595
514
  });
596
- describe('closeFlagsInstance', function () {
597
- it('should close sdk instance sucessfully', function () { return __awaiter(void 0, void 0, void 0, function () {
598
- var spy;
599
- return __generator(this, function (_a) {
600
- switch (_a.label) {
601
- case 0:
602
- spy = jest.spyOn(console, 'log');
603
- return [4 /*yield*/, (0, utils_1.getFlag)('testing_flag_with_variations_and_variables')];
604
- case 1:
605
- _a.sent();
606
- return [4 /*yield*/, (0, utils_1.closeFlagsInstance)()];
607
- case 2:
608
- _a.sent();
609
- expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully');
610
- return [2 /*return*/];
611
- }
612
- });
613
- }); });
614
- it('should not close sdk instance sucessfully', function () { return __awaiter(void 0, void 0, void 0, function () {
615
- var spy, _a, getFlag, closeFlagsInstance;
616
- return __generator(this, function (_b) {
617
- switch (_b.label) {
618
- case 0:
619
- spy = jest.spyOn(console, 'log');
620
- jest.doMock('@optimizely/optimizely-sdk', function () { return ({
621
- createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
622
- decide: jest
623
- .fn()
624
- .mockImplementation(function (key, options) {
625
- return flagsMock[key];
626
- }),
627
- }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest
628
- .fn()
629
- .mockResolvedValue({ success: false, reason: 'Closing rejected' }) })); },
630
- }); });
631
- _a = require('../utils'), getFlag = _a.getFlag, closeFlagsInstance = _a.closeFlagsInstance;
632
- return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
633
- case 1:
634
- _b.sent();
635
- return [4 /*yield*/, closeFlagsInstance()];
636
- case 2:
637
- _b.sent();
638
- expect(spy).toHaveBeenCalledWith('closing Optimizely instance failed, reason: Closing rejected');
639
- return [2 /*return*/];
640
- }
641
- });
642
- }); });
643
- });
644
515
  //# sourceMappingURL=utils.tests.js.map