@newskit-render/feature-flags 0.0.0-767f0ff7 → 0.0.0-b7fba40c6
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.
- package/README.md +38 -48
- package/dist/cjs/__tests__/utils.tests.js +145 -278
- package/dist/cjs/__tests__/utils.tests.js.map +1 -1
- package/dist/cjs/optimizelyClient.d.ts +4 -0
- package/dist/cjs/optimizelyClient.js +41 -0
- package/dist/cjs/optimizelyClient.js.map +1 -0
- package/dist/cjs/types.d.ts +4 -10
- package/dist/cjs/types.js +1 -25
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +3 -6
- package/dist/cjs/utils.js +62 -170
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/__tests__/utils.tests.js +146 -279
- package/dist/esm/__tests__/utils.tests.js.map +1 -1
- package/dist/esm/optimizelyClient.d.ts +4 -0
- package/dist/esm/optimizelyClient.js +36 -0
- package/dist/esm/optimizelyClient.js.map +1 -0
- package/dist/esm/types.d.ts +4 -10
- package/dist/esm/types.js +0 -24
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.d.ts +3 -6
- package/dist/esm/utils.js +59 -164
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 {
|
|
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,
|
|
54
|
+
.mockImplementation(function (key, config) {
|
|
55
55
|
return flagsMock[key];
|
|
56
56
|
}),
|
|
57
57
|
decideForKeys: jest
|
|
58
58
|
.fn()
|
|
59
|
-
.mockImplementation(function (keys,
|
|
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 (
|
|
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
|
-
|
|
71
|
+
test_flag_1: {
|
|
72
72
|
variationKey: 'on',
|
|
73
73
|
enabled: true,
|
|
74
74
|
variables: {},
|
|
75
75
|
ruleKey: 'default-rollout-216689-29200910123',
|
|
76
|
-
flagKey: '
|
|
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
|
-
|
|
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: '
|
|
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
|
-
|
|
99
|
+
test_flag_3: {
|
|
102
100
|
variationKey: 'off',
|
|
103
101
|
enabled: false,
|
|
104
102
|
variables: {},
|
|
105
103
|
ruleKey: 'default-rollout-225089-29200910123',
|
|
106
|
-
flagKey: '
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
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*/,
|
|
157
|
+
case 0: return [4 /*yield*/, getAllFeatureFlags()];
|
|
153
158
|
case 1:
|
|
154
159
|
flagsAll = _a.sent();
|
|
155
160
|
expect(flagsAll).toEqual({
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
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
|
|
185
|
-
var
|
|
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
|
-
|
|
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*/,
|
|
264
|
+
return [4 /*yield*/, getAllFeatureFlags(config)];
|
|
200
265
|
case 1:
|
|
201
266
|
flagsAll = _a.sent();
|
|
202
267
|
expect(flagsAll).toEqual({
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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*/,
|
|
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
|
|
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
|
-
|
|
275
|
-
return [4 /*yield*/,
|
|
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
|
|
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
|
-
|
|
292
|
-
return [4 /*yield*/,
|
|
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
|
|
345
|
+
var config;
|
|
302
346
|
return __generator(this, function (_a) {
|
|
303
347
|
switch (_a.label) {
|
|
304
348
|
case 0:
|
|
305
|
-
|
|
349
|
+
config = {
|
|
306
350
|
logLevel: 'critical',
|
|
307
351
|
};
|
|
308
|
-
return [4 /*yield*/,
|
|
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
|
|
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 (
|
|
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
|
-
|
|
334
|
-
|
|
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(
|
|
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('
|
|
378
|
-
it('should return
|
|
379
|
-
var
|
|
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*/,
|
|
392
|
+
case 0: return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
|
|
383
393
|
case 1:
|
|
384
|
-
|
|
385
|
-
expect(
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
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
|
|
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*/,
|
|
490
|
-
'
|
|
491
|
-
'
|
|
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
|
-
|
|
497
|
-
|
|
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
|
|
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 (
|
|
433
|
+
.mockImplementation(function (config) {
|
|
516
434
|
return undefined;
|
|
517
435
|
}),
|
|
518
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true })
|
|
519
|
-
|
|
520
|
-
return [4 /*yield*/,
|
|
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
|
|
532
|
-
var
|
|
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,
|
|
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
|
-
|
|
550
|
-
|
|
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*/,
|
|
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(
|
|
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
|
|
568
|
-
var
|
|
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,
|
|
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
|
-
|
|
586
|
-
return [4 /*yield*/,
|
|
587
|
-
'
|
|
588
|
-
'
|
|
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,52 +510,4 @@ 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;
|
|
601
|
-
return __generator(this, function (_a) {
|
|
602
|
-
switch (_a.label) {
|
|
603
|
-
case 0:
|
|
604
|
-
spy = jest.spyOn(console, 'log');
|
|
605
|
-
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
606
|
-
case 1:
|
|
607
|
-
_a.sent();
|
|
608
|
-
return [4 /*yield*/, closeFlagsInstance()];
|
|
609
|
-
case 2:
|
|
610
|
-
_a.sent();
|
|
611
|
-
expect(spy).toHaveBeenCalledWith('optimizely instance closed successfully');
|
|
612
|
-
return [2 /*return*/];
|
|
613
|
-
}
|
|
614
|
-
});
|
|
615
|
-
}); });
|
|
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) {
|
|
620
|
-
case 0:
|
|
621
|
-
spy = jest.spyOn(console, 'log');
|
|
622
|
-
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' }) })); },
|
|
632
|
-
}); });
|
|
633
|
-
_a = require('../utils'), getFlag = _a.getFlag, closeFlagsInstance = _a.closeFlagsInstance;
|
|
634
|
-
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
635
|
-
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');
|
|
641
|
-
return [2 /*return*/];
|
|
642
|
-
}
|
|
643
|
-
});
|
|
644
|
-
}); });
|
|
645
|
-
});
|
|
646
513
|
//# sourceMappingURL=utils.tests.js.map
|