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

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.
Files changed (38) hide show
  1. package/README.md +155 -0
  2. package/dist/cjs/__tests__/utils.tests.d.ts +1 -0
  3. package/dist/cjs/__tests__/utils.tests.js +672 -0
  4. package/dist/cjs/__tests__/utils.tests.js.map +1 -0
  5. package/dist/cjs/feature-flags-context.d.ts +9 -0
  6. package/dist/cjs/feature-flags-context.js +44 -0
  7. package/dist/cjs/feature-flags-context.js.map +1 -0
  8. package/dist/cjs/index.d.ts +3 -0
  9. package/dist/cjs/index.js +20 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/optimizelyClient.d.ts +2 -0
  12. package/dist/cjs/optimizelyClient.js +44 -0
  13. package/dist/cjs/optimizelyClient.js.map +1 -0
  14. package/dist/cjs/types.d.ts +33 -0
  15. package/dist/cjs/types.js +48 -0
  16. package/dist/cjs/types.js.map +1 -0
  17. package/dist/cjs/utils.d.ts +3 -0
  18. package/dist/cjs/utils.js +162 -0
  19. package/dist/cjs/utils.js.map +1 -0
  20. package/dist/esm/__tests__/utils.tests.d.ts +1 -0
  21. package/dist/esm/__tests__/utils.tests.js +670 -0
  22. package/dist/esm/__tests__/utils.tests.js.map +1 -0
  23. package/dist/esm/feature-flags-context.d.ts +9 -0
  24. package/dist/esm/feature-flags-context.js +16 -0
  25. package/dist/esm/feature-flags-context.js.map +1 -0
  26. package/dist/esm/index.d.ts +3 -0
  27. package/dist/esm/index.js +4 -0
  28. package/dist/esm/index.js.map +1 -0
  29. package/dist/esm/optimizelyClient.d.ts +2 -0
  30. package/dist/esm/optimizelyClient.js +40 -0
  31. package/dist/esm/optimizelyClient.js.map +1 -0
  32. package/dist/esm/types.d.ts +33 -0
  33. package/dist/esm/types.js +45 -0
  34. package/dist/esm/types.js.map +1 -0
  35. package/dist/esm/utils.d.ts +3 -0
  36. package/dist/esm/utils.js +157 -0
  37. package/dist/esm/utils.js.map +1 -0
  38. package/package.json +64 -0
@@ -0,0 +1,672 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
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;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ var optimizely_sdk_1 = require("@optimizely/optimizely-sdk");
51
+ var utils_1 = require("../utils");
52
+ var originalEnv = process.env;
53
+ jest.mock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
54
+ decide: jest
55
+ .fn()
56
+ .mockImplementation(function (key, options) {
57
+ return flagsMock[key];
58
+ }),
59
+ decideForKeys: jest
60
+ .fn()
61
+ .mockImplementation(function (keys, options) {
62
+ var filtered = {};
63
+ keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
64
+ return filtered;
65
+ }),
66
+ decideAll: jest
67
+ .fn()
68
+ .mockImplementation(function (options) {
69
+ return flagsMock;
70
+ }),
71
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
72
+ var flagsMock = {
73
+ qualtrics_flag: {
74
+ variationKey: 'on',
75
+ enabled: true,
76
+ variables: {},
77
+ ruleKey: 'default-rollout-216689-29200910123',
78
+ flagKey: 'qualtrics_flag',
79
+ userContext: {
80
+ _qualifiedSegments: null,
81
+ // optimizely: [e],
82
+ userId: 'user123',
83
+ attributes: {},
84
+ forcedDecisionsMap: {},
85
+ },
86
+ reasons: [],
87
+ },
88
+ testing_flag: {
89
+ variationKey: 'max_10',
90
+ enabled: true,
91
+ variables: { max_family_members: 10 },
92
+ ruleKey: 'default-rollout-223709-29200910123',
93
+ flagKey: 'testing_flag',
94
+ userContext: {
95
+ _qualifiedSegments: null,
96
+ // optimizely: [e],
97
+ userId: 'user123',
98
+ attributes: {},
99
+ forcedDecisionsMap: {},
100
+ },
101
+ reasons: [],
102
+ },
103
+ another_test_flag_1: {
104
+ variationKey: 'off',
105
+ enabled: false,
106
+ variables: {},
107
+ ruleKey: 'default-rollout-225089-29200910123',
108
+ flagKey: 'another_test_flag_1',
109
+ userContext: {
110
+ _qualifiedSegments: null,
111
+ // optimizely: [e],
112
+ userId: 'user123',
113
+ attributes: {},
114
+ forcedDecisionsMap: {},
115
+ },
116
+ reasons: [],
117
+ },
118
+ testing_flag_with_variations_and_variables: {
119
+ variationKey: 'primary_with_new_weclome_message_and_max_accounts',
120
+ enabled: true,
121
+ variables: {
122
+ family_primary_welcome_message: 'This is the new message',
123
+ family_primary_enable_secondary_accounts: true,
124
+ family_primary_max_secondary_accounts: 10,
125
+ family_primary_metadata_json: {
126
+ metadata1: 'a',
127
+ },
128
+ },
129
+ ruleKey: 'default-rollout-225097-29200910123',
130
+ flagKey: 'testing_flag_with_variations_and_variables',
131
+ userContext: {
132
+ _qualifiedSegments: null,
133
+ // optimizely: [e],
134
+ userId: 'user123',
135
+ attributes: {},
136
+ forcedDecisionsMap: {},
137
+ },
138
+ reasons: [],
139
+ },
140
+ };
141
+ // TO DO: Improve test coverage
142
+ beforeEach(function () {
143
+ jest.resetModules();
144
+ process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
145
+ });
146
+ // afterEach(() => {
147
+ // _resetInstance()
148
+ // })
149
+ describe('Test', function () {
150
+ it('Test description', function () {
151
+ expect(true);
152
+ });
153
+ });
154
+ describe.skip('getAllFeatureFlags', function () {
155
+ it('should return all flags data in flat mode with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
156
+ var flagsAll;
157
+ return __generator(this, function (_a) {
158
+ switch (_a.label) {
159
+ case 0: return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)()];
160
+ case 1:
161
+ flagsAll = _a.sent();
162
+ expect(flagsAll).toEqual({
163
+ another_test_flag_1: false,
164
+ qualtrics_flag: true,
165
+ testing_flag: 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 options', function () { return __awaiter(void 0, void 0, void 0, function () {
173
+ var options, flagsAll;
174
+ return __generator(this, function (_a) {
175
+ switch (_a.label) {
176
+ case 0:
177
+ options = {
178
+ includeFlagVariables: true,
179
+ };
180
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(options)];
181
+ case 1:
182
+ flagsAll = _a.sent();
183
+ expect(flagsAll).toEqual({
184
+ qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
185
+ testing_flag: {
186
+ variationKey: 'max_10',
187
+ enabled: true,
188
+ variables: { max_family_members: 10 },
189
+ },
190
+ another_test_flag_1: {
191
+ variationKey: 'off',
192
+ enabled: false,
193
+ variables: {},
194
+ },
195
+ testing_flag_with_variations_and_variables: {
196
+ variationKey: 'primary_with_new_weclome_message_and_max_accounts',
197
+ enabled: true,
198
+ variables: {
199
+ family_primary_welcome_message: 'This is the new message',
200
+ family_primary_enable_secondary_accounts: true,
201
+ family_primary_max_secondary_accounts: 10,
202
+ family_primary_metadata_json: {
203
+ metadata1: 'a',
204
+ },
205
+ },
206
+ },
207
+ });
208
+ return [2 /*return*/];
209
+ }
210
+ });
211
+ }); });
212
+ it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
213
+ var getAllFeatureFlags, flagsAll;
214
+ return __generator(this, function (_a) {
215
+ switch (_a.label) {
216
+ case 0:
217
+ jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
218
+ decideAll: jest
219
+ .fn()
220
+ .mockImplementation(function (options) {
221
+ return undefined;
222
+ }),
223
+ }); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
224
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
225
+ return [4 /*yield*/, getAllFeatureFlags()];
226
+ case 1:
227
+ flagsAll = _a.sent();
228
+ expect(flagsAll).toEqual({});
229
+ return [2 /*return*/];
230
+ }
231
+ });
232
+ }); });
233
+ it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
234
+ var options, flagsAll;
235
+ return __generator(this, function (_a) {
236
+ switch (_a.label) {
237
+ case 0:
238
+ process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
239
+ options = {
240
+ sdkConfig: {
241
+ sdkKey: 'custom-optimizely-sdk',
242
+ },
243
+ userData: {
244
+ userId: 'user456',
245
+ attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
246
+ },
247
+ includeFlagVariables: true,
248
+ };
249
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(options)];
250
+ case 1:
251
+ flagsAll = _a.sent();
252
+ expect(flagsAll).toEqual({
253
+ qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
254
+ testing_flag: {
255
+ variationKey: 'max_10',
256
+ enabled: true,
257
+ variables: { max_family_members: 10 },
258
+ },
259
+ another_test_flag_1: {
260
+ variationKey: 'off',
261
+ enabled: false,
262
+ variables: {},
263
+ },
264
+ testing_flag_with_variations_and_variables: {
265
+ variationKey: 'primary_with_new_weclome_message_and_max_accounts',
266
+ enabled: true,
267
+ variables: {
268
+ family_primary_welcome_message: 'This is the new message',
269
+ family_primary_enable_secondary_accounts: true,
270
+ family_primary_max_secondary_accounts: 10,
271
+ family_primary_metadata_json: {
272
+ metadata1: 'a',
273
+ },
274
+ },
275
+ },
276
+ });
277
+ return [2 /*return*/];
278
+ }
279
+ });
280
+ }); });
281
+ it('should return empty object when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
282
+ var flagsAll;
283
+ return __generator(this, function (_a) {
284
+ switch (_a.label) {
285
+ case 0:
286
+ process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
287
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)()];
288
+ case 1:
289
+ flagsAll = _a.sent();
290
+ expect(flagsAll).toEqual({});
291
+ return [2 /*return*/];
292
+ }
293
+ });
294
+ }); });
295
+ it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
296
+ var getAllFeatureFlags, flagsAll;
297
+ return __generator(this, function (_a) {
298
+ switch (_a.label) {
299
+ case 0:
300
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
301
+ createInstance: jest.fn().mockReturnValue(null),
302
+ }); });
303
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
304
+ return [4 /*yield*/, getAllFeatureFlags()];
305
+ case 1:
306
+ flagsAll = _a.sent();
307
+ expect(flagsAll).toEqual({});
308
+ return [2 /*return*/];
309
+ }
310
+ });
311
+ }); });
312
+ it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
313
+ var getAllFeatureFlags, flagsAll;
314
+ return __generator(this, function (_a) {
315
+ switch (_a.label) {
316
+ case 0:
317
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
318
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
319
+ }); });
320
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
321
+ return [4 /*yield*/, getAllFeatureFlags()];
322
+ case 1:
323
+ flagsAll = _a.sent();
324
+ expect(flagsAll).toEqual({});
325
+ return [2 /*return*/];
326
+ }
327
+ });
328
+ }); });
329
+ it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
330
+ var options;
331
+ return __generator(this, function (_a) {
332
+ switch (_a.label) {
333
+ case 0:
334
+ options = {
335
+ logLevel: 'critical',
336
+ };
337
+ return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(options)];
338
+ case 1:
339
+ _a.sent();
340
+ expect(optimizely_sdk_1.setLogLevel).toBeCalledWith('critical');
341
+ expect(optimizely_sdk_1.setLogger).toHaveBeenCalled();
342
+ return [2 /*return*/];
343
+ }
344
+ });
345
+ }); });
346
+ it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
347
+ var getAllFeatureFlags, options, flagsAll;
348
+ return __generator(this, function (_a) {
349
+ switch (_a.label) {
350
+ case 0:
351
+ jest.doMock('@optimizely/optimizely-sdk', function () { return ({
352
+ createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
353
+ decideAll: jest
354
+ .fn()
355
+ .mockImplementation(function (options) {
356
+ return flagsMock;
357
+ }),
358
+ }); }, onReady: jest
359
+ .fn()
360
+ .mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
361
+ }); });
362
+ getAllFeatureFlags = require('../utils').getAllFeatureFlags;
363
+ options = {
364
+ defaultFeatureFlags: {
365
+ default_flag: {
366
+ variationKey: 'off',
367
+ enabled: true,
368
+ variables: {},
369
+ },
370
+ },
371
+ };
372
+ return [4 /*yield*/, getAllFeatureFlags(options)];
373
+ case 1:
374
+ flagsAll = _a.sent();
375
+ expect(flagsAll).toEqual(options.defaultFeatureFlags);
376
+ return [2 /*return*/];
377
+ }
378
+ });
379
+ }); });
380
+ });
381
+ // describe('getFlagsAll', () => {
382
+ // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
383
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
384
+ // createInstance: () => ({
385
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
386
+ // createUserContext: () => ({
387
+ // decideAll: jest
388
+ // .fn()
389
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
390
+ // return flagsMock as {
391
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
392
+ // }
393
+ // }),
394
+ // }),
395
+ // onReady: jest
396
+ // .fn()
397
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
398
+ // }),
399
+ // }))
400
+ // const { getFlagsAll } = require('../utils')
401
+ // const options: SDKConfig = {
402
+ // defaultFeatureFlags: {
403
+ // default_flag: {
404
+ // variationKey: 'off',
405
+ // enabled: true,
406
+ // variables: {},
407
+ // },
408
+ // },
409
+ // }
410
+ // const flagsAll = await getFlagsAll(options)
411
+ // expect(flagsAll).toEqual(options.defaultFeatureFlags)
412
+ // })
413
+ // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
414
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
415
+ // createInstance: () => ({
416
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
417
+ // createUserContext: () => ({
418
+ // decideAll: jest
419
+ // .fn()
420
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
421
+ // return flagsMock as {
422
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
423
+ // }
424
+ // }),
425
+ // }),
426
+ // onReady: jest
427
+ // .fn()
428
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
429
+ // }),
430
+ // }))
431
+ // const { getFlagsAll } = require('../utils')
432
+ // const flagsAll = await getFlagsAll()
433
+ // expect(flagsAll).toEqual({})
434
+ // })
435
+ // })
436
+ // describe('closeFlagsInstance', () => {
437
+ // it('should close sdk instance successfully', async () => {
438
+ // const spy = jest.spyOn(console, 'log')
439
+ // await getFlagsAll()
440
+ // await closeFlagsInstance()
441
+ // expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully')
442
+ // })
443
+ // it('should not close sdk instance sucessfully', async () => {
444
+ // const spy = jest.spyOn(console, 'log')
445
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
446
+ // createInstance: () => ({
447
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
448
+ // createUserContext: () => ({
449
+ // decide: jest
450
+ // .fn()
451
+ // .mockImplementation(
452
+ // (key: string, options?: OptimizelyDecideOption[]) => {
453
+ // return getFlagsAll as Omit<OptimizelyDecision, 'userContext'>
454
+ // }
455
+ // ),
456
+ // }),
457
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
458
+ // close: jest
459
+ // .fn()
460
+ // .mockResolvedValue({ success: false, reason: 'Closing rejected' }),
461
+ // }),
462
+ // }))
463
+ // const { getFlagsAll, closeFlagsInstance } = require('../utils')
464
+ // await getFlagsAll()
465
+ // await closeFlagsInstance()
466
+ // expect(spy).toHaveBeenCalledWith(
467
+ // 'closing Optimizely instance failed, reason: Closing rejected'
468
+ // )
469
+ // })
470
+ // })
471
+ // describe('getFlag', () => {
472
+ // it('should return a flag with default options', async () => {
473
+ // const flag = await getFlag('testing_flag_with_variations_and_variables')
474
+ // expect(flag).toEqual({
475
+ // testing_flag_with_variations_and_variables: {
476
+ // variationKey: 'primary_with_new_weclome_message_and_max_accounts',
477
+ // enabled: true,
478
+ // variables: {
479
+ // family_primary_welcome_message: 'This is the new message',
480
+ // family_primary_enable_secondary_accounts: true,
481
+ // family_primary_max_secondary_accounts: 10,
482
+ // family_primary_metadata_json: {
483
+ // metadata1: 'a',
484
+ // },
485
+ // },
486
+ // },
487
+ // })
488
+ // })
489
+ // it('should return empty object if no flags are fetched', async () => {
490
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
491
+ // ...jest.requireActual('@optimizely/optimizely-sdk'),
492
+ // createInstance: () => ({
493
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
494
+ // createUserContext: () => ({
495
+ // decide: jest
496
+ // .fn()
497
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
498
+ // return undefined
499
+ // }),
500
+ // }),
501
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
502
+ // close: jest.fn().mockResolvedValue({ success: true }),
503
+ // }),
504
+ // }))
505
+ // const { getFlag } = require('../utils')
506
+ // const flagsAll = await getFlag('testing_flag_with_variations_and_variables')
507
+ // expect(flagsAll).toEqual({})
508
+ // })
509
+ // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
510
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
511
+ // createInstance: () => ({
512
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
513
+ // createUserContext: () => ({
514
+ // decide: jest
515
+ // .fn()
516
+ // .mockImplementation(
517
+ // (key: string, options?: OptimizelyDecideOption[]) => {
518
+ // return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
519
+ // }
520
+ // ),
521
+ // }),
522
+ // onReady: jest
523
+ // .fn()
524
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
525
+ // }),
526
+ // }))
527
+ // const { getFlag } = require('../utils')
528
+ // const options: SDKConfig = {
529
+ // defaultFeatureFlags: {
530
+ // default_flag: {
531
+ // variationKey: 'off',
532
+ // enabled: true,
533
+ // variables: {},
534
+ // },
535
+ // },
536
+ // }
537
+ // const flag = await getFlag(
538
+ // 'testing_flag_with_variations_and_variables',
539
+ // options
540
+ // )
541
+ // expect(flag).toEqual(options.defaultFeatureFlags)
542
+ // })
543
+ // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
544
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
545
+ // createInstance: () => ({
546
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
547
+ // createUserContext: () => ({
548
+ // decide: jest
549
+ // .fn()
550
+ // .mockImplementation(
551
+ // (key: string, options?: OptimizelyDecideOption[]) => {
552
+ // return flagsMock[key] as Omit<OptimizelyDecision, 'userContext'>
553
+ // }
554
+ // ),
555
+ // }),
556
+ // onReady: jest
557
+ // .fn()
558
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
559
+ // }),
560
+ // }))
561
+ // const { getFlag } = require('../utils')
562
+ // const flag = await getFlag('testing_flag_with_variations_and_variables')
563
+ // expect(flag).toEqual({})
564
+ // })
565
+ // })
566
+ // describe('getFlagsByKeys', () => {
567
+ // it('should return flags by keys with default options', async () => {
568
+ // const flagsByKeys = await getFlagsByKeys([
569
+ // 'another_test_flag_1',
570
+ // 'qualtrics_flag',
571
+ // ])
572
+ // expect(flagsByKeys).toEqual({
573
+ // qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
574
+ // another_test_flag_1: {
575
+ // variationKey: 'off',
576
+ // enabled: false,
577
+ // variables: {},
578
+ // },
579
+ // })
580
+ // })
581
+ // it('should return empty object if no flags are fetched', async () => {
582
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
583
+ // ...jest.requireActual('@optimizely/optimizely-sdk'),
584
+ // createInstance: () => ({
585
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
586
+ // createUserContext: () => ({
587
+ // decideForKeys: jest
588
+ // .fn()
589
+ // .mockImplementation((options?: OptimizelyDecideOption[]) => {
590
+ // return undefined
591
+ // }),
592
+ // }),
593
+ // onReady: jest.fn().mockResolvedValue({ success: true }),
594
+ // close: jest.fn().mockResolvedValue({ success: true }),
595
+ // }),
596
+ // }))
597
+ // const { getFlagsByKeys } = require('../utils')
598
+ // const flagsAll = await getFlagsByKeys([
599
+ // 'another_test_flag_1',
600
+ // 'qualtrics_flag',
601
+ // ])
602
+ // expect(flagsAll).toEqual({})
603
+ // })
604
+ // it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', async () => {
605
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
606
+ // createInstance: () => ({
607
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
608
+ // createUserContext: () => ({
609
+ // decideForKeys: jest
610
+ // .fn()
611
+ // .mockImplementation(
612
+ // (keys: string[], options?: OptimizelyDecideOption[]) => {
613
+ // const filtered: {
614
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
615
+ // } = {}
616
+ // keys.forEach((k) => (filtered[k] = flagsMock[k]))
617
+ // return filtered
618
+ // }
619
+ // ),
620
+ // }),
621
+ // onReady: jest
622
+ // .fn()
623
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
624
+ // }),
625
+ // }))
626
+ // const { getFlagsByKeys } = require('../utils')
627
+ // const options: SDKConfig = {
628
+ // defaultFeatureFlags: {
629
+ // default_flag: {
630
+ // variationKey: 'off',
631
+ // enabled: true,
632
+ // variables: {},
633
+ // },
634
+ // },
635
+ // }
636
+ // const flagsByKeys = await getFlagsByKeys(
637
+ // ['another_test_flag_1', 'qualtrics_flag'],
638
+ // options
639
+ // )
640
+ // expect(flagsByKeys).toEqual(options.defaultFeatureFlags)
641
+ // })
642
+ // it('should return empty object when no default flag have been passed and optimizely client is not ready', async () => {
643
+ // jest.doMock('@optimizely/optimizely-sdk', () => ({
644
+ // createInstance: () => ({
645
+ // ...jest.requireActual('@optimizely/optimizely-sdk').createInstance,
646
+ // createUserContext: () => ({
647
+ // decideForKeys: jest
648
+ // .fn()
649
+ // .mockImplementation(
650
+ // (keys: string[], options?: OptimizelyDecideOption[]) => {
651
+ // const filtered: {
652
+ // [key: string]: Omit<OptimizelyDecision, 'userContext'>
653
+ // } = {}
654
+ // keys.forEach((k) => (filtered[k] = flagsMock[k]))
655
+ // return filtered
656
+ // }
657
+ // ),
658
+ // }),
659
+ // onReady: jest
660
+ // .fn()
661
+ // .mockResolvedValue({ success: false, reason: 'Promise rejected' }),
662
+ // }),
663
+ // }))
664
+ // const { getFlagsByKeys } = require('../utils')
665
+ // const flagsByKeys = await getFlagsByKeys([
666
+ // 'another_test_flag_1',
667
+ // 'qualtrics_flag',
668
+ // ])
669
+ // expect(flagsByKeys).toEqual({})
670
+ // })
671
+ // })
672
+ //# sourceMappingURL=utils.tests.js.map