@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.
- package/README.md +38 -48
- package/dist/cjs/__tests__/utils.tests.js +167 -296
- package/dist/cjs/__tests__/utils.tests.js.map +1 -1
- package/dist/cjs/feature-flags-context.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 +9 -11
- 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 +60 -145
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/__tests__/utils.tests.js +169 -300
- package/dist/esm/__tests__/utils.tests.js.map +1 -1
- package/dist/esm/feature-flags-context.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 +9 -11
- 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 +57 -139
- package/dist/esm/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 =
|
|
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,
|
|
56
|
+
.mockImplementation(function (key, config) {
|
|
58
57
|
return flagsMock[key];
|
|
59
58
|
}),
|
|
60
59
|
decideForKeys: jest
|
|
61
60
|
.fn()
|
|
62
|
-
.mockImplementation(function (keys,
|
|
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 (
|
|
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
|
-
|
|
73
|
+
test_flag_1: {
|
|
75
74
|
variationKey: 'on',
|
|
76
75
|
enabled: true,
|
|
77
76
|
variables: {},
|
|
78
77
|
ruleKey: 'default-rollout-216689-29200910123',
|
|
79
|
-
flagKey: '
|
|
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
|
-
|
|
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: '
|
|
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
|
-
|
|
101
|
+
test_flag_3: {
|
|
105
102
|
variationKey: 'off',
|
|
106
103
|
enabled: false,
|
|
107
104
|
variables: {},
|
|
108
105
|
ruleKey: 'default-rollout-225089-29200910123',
|
|
109
|
-
flagKey: '
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
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.
|
|
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
|
-
|
|
159
|
-
|
|
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
|
-
|
|
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
|
|
187
|
-
var
|
|
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
|
-
|
|
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.
|
|
266
|
+
return [4 /*yield*/, (0, utils_1.getAllFeatureFlags)(config)];
|
|
202
267
|
case 1:
|
|
203
268
|
flagsAll = _a.sent();
|
|
204
269
|
expect(flagsAll).toEqual({
|
|
205
|
-
|
|
206
|
-
|
|
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
|
-
|
|
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
|
|
234
|
-
var
|
|
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
|
-
|
|
239
|
-
|
|
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
|
|
255
|
-
|
|
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:
|
|
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
|
-
|
|
332
|
-
|
|
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(
|
|
324
|
+
expect(flagsAll).toEqual({});
|
|
345
325
|
return [2 /*return*/];
|
|
346
326
|
}
|
|
347
327
|
});
|
|
348
328
|
}); });
|
|
349
|
-
it('should return empty object when
|
|
350
|
-
var
|
|
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:
|
|
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
|
-
|
|
366
|
-
return [4 /*yield*/,
|
|
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
|
-
|
|
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
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
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
|
-
|
|
417
|
-
expect(
|
|
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
|
|
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
|
-
|
|
370
|
+
decideAll: jest
|
|
430
371
|
.fn()
|
|
431
|
-
.mockImplementation(function (
|
|
432
|
-
return flagsMock
|
|
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
|
-
|
|
439
|
-
|
|
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
|
-
|
|
451
|
-
expect(
|
|
382
|
+
flagsAll = _a.sent();
|
|
383
|
+
expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
|
|
452
384
|
return [2 /*return*/];
|
|
453
385
|
}
|
|
454
386
|
});
|
|
455
387
|
}); });
|
|
456
|
-
|
|
457
|
-
|
|
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
|
-
|
|
476
|
-
expect(
|
|
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.
|
|
488
|
-
'
|
|
489
|
-
'
|
|
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
|
-
|
|
495
|
-
|
|
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
|
|
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 (
|
|
435
|
+
.mockImplementation(function (config) {
|
|
514
436
|
return undefined;
|
|
515
437
|
}),
|
|
516
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true })
|
|
517
|
-
|
|
518
|
-
return [4 /*yield*/,
|
|
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
|
|
530
|
-
var
|
|
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,
|
|
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
|
-
|
|
548
|
-
|
|
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*/,
|
|
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(
|
|
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
|
|
566
|
-
var
|
|
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,
|
|
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
|
-
|
|
584
|
-
return [4 /*yield*/,
|
|
585
|
-
'
|
|
586
|
-
'
|
|
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
|