@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
|
@@ -19,8 +19,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
21
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
-
return g =
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
23
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
24
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
25
|
function step(op) {
|
|
26
26
|
if (f) throw new TypeError("Generator is already executing.");
|
|
@@ -45,71 +45,65 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
45
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
import { setLogLevel, setLogger,
|
|
49
|
-
|
|
50
|
-
} from '@optimizely/optimizely-sdk';
|
|
51
|
-
import { _resetInstance, closeFlagsInstance, getFlag, getFlagsAll, getFlagsByKeys, } from '../utils';
|
|
52
|
-
import { MissingConfigurationError, MissingInstanceError, MissingUserContextError, } from '../types';
|
|
48
|
+
import { setLogLevel, setLogger, } from '@optimizely/optimizely-sdk';
|
|
49
|
+
import { getAllFeatureFlags, getFeatureFlagsByKeys } from '../utils';
|
|
53
50
|
var originalEnv = process.env;
|
|
54
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 ({
|
|
55
52
|
decide: jest
|
|
56
53
|
.fn()
|
|
57
|
-
.mockImplementation(function (key,
|
|
54
|
+
.mockImplementation(function (key, config) {
|
|
58
55
|
return flagsMock[key];
|
|
59
56
|
}),
|
|
60
57
|
decideForKeys: jest
|
|
61
58
|
.fn()
|
|
62
|
-
.mockImplementation(function (keys,
|
|
59
|
+
.mockImplementation(function (keys, config) {
|
|
63
60
|
var filtered = {};
|
|
64
61
|
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
65
62
|
return filtered;
|
|
66
63
|
}),
|
|
67
64
|
decideAll: jest
|
|
68
65
|
.fn()
|
|
69
|
-
.mockImplementation(function (
|
|
66
|
+
.mockImplementation(function (config) {
|
|
70
67
|
return flagsMock;
|
|
71
68
|
}),
|
|
72
69
|
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
|
|
73
70
|
var flagsMock = {
|
|
74
|
-
|
|
71
|
+
test_flag_1: {
|
|
75
72
|
variationKey: 'on',
|
|
76
73
|
enabled: true,
|
|
77
74
|
variables: {},
|
|
78
75
|
ruleKey: 'default-rollout-216689-29200910123',
|
|
79
|
-
flagKey: '
|
|
76
|
+
flagKey: 'test_flag_1',
|
|
80
77
|
userContext: {
|
|
81
78
|
_qualifiedSegments: null,
|
|
82
|
-
// optimizely: [e],
|
|
83
79
|
userId: 'user123',
|
|
84
80
|
attributes: {},
|
|
85
81
|
forcedDecisionsMap: {},
|
|
86
82
|
},
|
|
87
83
|
reasons: [],
|
|
88
84
|
},
|
|
89
|
-
|
|
85
|
+
test_flag_2: {
|
|
90
86
|
variationKey: 'max_10',
|
|
91
87
|
enabled: true,
|
|
92
88
|
variables: { max_family_members: 10 },
|
|
93
89
|
ruleKey: 'default-rollout-223709-29200910123',
|
|
94
|
-
flagKey: '
|
|
90
|
+
flagKey: 'test_flag_2',
|
|
95
91
|
userContext: {
|
|
96
92
|
_qualifiedSegments: null,
|
|
97
|
-
// optimizely: [e],
|
|
98
93
|
userId: 'user123',
|
|
99
94
|
attributes: {},
|
|
100
95
|
forcedDecisionsMap: {},
|
|
101
96
|
},
|
|
102
97
|
reasons: [],
|
|
103
98
|
},
|
|
104
|
-
|
|
99
|
+
test_flag_3: {
|
|
105
100
|
variationKey: 'off',
|
|
106
101
|
enabled: false,
|
|
107
102
|
variables: {},
|
|
108
103
|
ruleKey: 'default-rollout-225089-29200910123',
|
|
109
|
-
flagKey: '
|
|
104
|
+
flagKey: 'test_flag_3',
|
|
110
105
|
userContext: {
|
|
111
106
|
_qualifiedSegments: null,
|
|
112
|
-
// optimizely: [e],
|
|
113
107
|
userId: 'user123',
|
|
114
108
|
attributes: {},
|
|
115
109
|
forcedDecisionsMap: {},
|
|
@@ -143,25 +137,51 @@ beforeEach(function () {
|
|
|
143
137
|
jest.resetModules();
|
|
144
138
|
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
|
|
145
139
|
});
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
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 () {
|
|
151
154
|
var flagsAll;
|
|
152
155
|
return __generator(this, function (_a) {
|
|
153
156
|
switch (_a.label) {
|
|
154
|
-
case 0: return [4 /*yield*/,
|
|
157
|
+
case 0: return [4 /*yield*/, getAllFeatureFlags()];
|
|
155
158
|
case 1:
|
|
156
159
|
flagsAll = _a.sent();
|
|
157
160
|
expect(flagsAll).toEqual({
|
|
158
|
-
|
|
159
|
-
|
|
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: {
|
|
160
180
|
variationKey: 'max_10',
|
|
161
181
|
enabled: true,
|
|
162
182
|
variables: { max_family_members: 10 },
|
|
163
183
|
},
|
|
164
|
-
|
|
184
|
+
test_flag_3: {
|
|
165
185
|
variationKey: 'off',
|
|
166
186
|
enabled: false,
|
|
167
187
|
variables: {},
|
|
@@ -183,13 +203,55 @@ describe('getFlagsAll', function () {
|
|
|
183
203
|
}
|
|
184
204
|
});
|
|
185
205
|
}); });
|
|
186
|
-
it('should return
|
|
187
|
-
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;
|
|
188
250
|
return __generator(this, function (_a) {
|
|
189
251
|
switch (_a.label) {
|
|
190
252
|
case 0:
|
|
191
253
|
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
192
|
-
|
|
254
|
+
config = {
|
|
193
255
|
sdkConfig: {
|
|
194
256
|
sdkKey: 'custom-optimizely-sdk',
|
|
195
257
|
},
|
|
@@ -197,18 +259,19 @@ describe('getFlagsAll', function () {
|
|
|
197
259
|
userId: 'user456',
|
|
198
260
|
attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
|
|
199
261
|
},
|
|
262
|
+
includeFlagVariables: true,
|
|
200
263
|
};
|
|
201
|
-
return [4 /*yield*/,
|
|
264
|
+
return [4 /*yield*/, getAllFeatureFlags(config)];
|
|
202
265
|
case 1:
|
|
203
266
|
flagsAll = _a.sent();
|
|
204
267
|
expect(flagsAll).toEqual({
|
|
205
|
-
|
|
206
|
-
|
|
268
|
+
test_flag_1: { variationKey: 'on', enabled: true, variables: {} },
|
|
269
|
+
test_flag_2: {
|
|
207
270
|
variationKey: 'max_10',
|
|
208
271
|
enabled: true,
|
|
209
272
|
variables: { max_family_members: 10 },
|
|
210
273
|
},
|
|
211
|
-
|
|
274
|
+
test_flag_3: {
|
|
212
275
|
variationKey: 'off',
|
|
213
276
|
enabled: false,
|
|
214
277
|
variables: {},
|
|
@@ -230,20 +293,13 @@ describe('getFlagsAll', function () {
|
|
|
230
293
|
}
|
|
231
294
|
});
|
|
232
295
|
}); });
|
|
233
|
-
it('should return empty object
|
|
234
|
-
var
|
|
296
|
+
it('should return empty object when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
297
|
+
var flagsAll;
|
|
235
298
|
return __generator(this, function (_a) {
|
|
236
299
|
switch (_a.label) {
|
|
237
300
|
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()];
|
|
301
|
+
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
302
|
+
return [4 /*yield*/, getAllFeatureFlags()];
|
|
247
303
|
case 1:
|
|
248
304
|
flagsAll = _a.sent();
|
|
249
305
|
expect(flagsAll).toEqual({});
|
|
@@ -251,119 +307,33 @@ describe('getFlagsAll', function () {
|
|
|
251
307
|
}
|
|
252
308
|
});
|
|
253
309
|
}); });
|
|
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*/, getFlagsAll()];
|
|
260
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
261
|
-
}
|
|
262
|
-
}); }); }).rejects.toThrow(new 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 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 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*/, getFlagsAll(options)];
|
|
307
|
-
case 1:
|
|
308
|
-
_a.sent();
|
|
309
|
-
expect(setLogLevel).toBeCalledWith('critical');
|
|
310
|
-
expect(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;
|
|
310
|
+
it('should return empty object when sdk not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
311
|
+
var getAllFeatureFlags, flagsAll;
|
|
317
312
|
return __generator(this, function (_a) {
|
|
318
313
|
switch (_a.label) {
|
|
319
314
|
case 0:
|
|
320
315
|
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' }) })); },
|
|
316
|
+
createInstance: jest.fn().mockReturnValue(null),
|
|
330
317
|
}); });
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
defaultFeatureFlags: {
|
|
334
|
-
default_flag: {
|
|
335
|
-
variationKey: 'off',
|
|
336
|
-
enabled: true,
|
|
337
|
-
variables: {},
|
|
338
|
-
},
|
|
339
|
-
},
|
|
340
|
-
};
|
|
341
|
-
return [4 /*yield*/, getFlagsAll(options)];
|
|
318
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
319
|
+
return [4 /*yield*/, getAllFeatureFlags()];
|
|
342
320
|
case 1:
|
|
343
321
|
flagsAll = _a.sent();
|
|
344
|
-
expect(flagsAll).toEqual(
|
|
322
|
+
expect(flagsAll).toEqual({});
|
|
345
323
|
return [2 /*return*/];
|
|
346
324
|
}
|
|
347
325
|
});
|
|
348
326
|
}); });
|
|
349
|
-
it('should return empty object when
|
|
350
|
-
var
|
|
327
|
+
it('should return empty object when user context not initialized', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
328
|
+
var getAllFeatureFlags, flagsAll;
|
|
351
329
|
return __generator(this, function (_a) {
|
|
352
330
|
switch (_a.label) {
|
|
353
331
|
case 0:
|
|
354
332
|
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' }) })); },
|
|
333
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: jest.fn().mockReturnValue(null), onReady: jest.fn().mockResolvedValue({ success: true }) })); },
|
|
364
334
|
}); });
|
|
365
|
-
|
|
366
|
-
return [4 /*yield*/,
|
|
335
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
336
|
+
return [4 /*yield*/, getAllFeatureFlags()];
|
|
367
337
|
case 1:
|
|
368
338
|
flagsAll = _a.sent();
|
|
369
339
|
expect(flagsAll).toEqual({});
|
|
@@ -371,154 +341,101 @@ describe('getFlagsAll', function () {
|
|
|
371
341
|
}
|
|
372
342
|
});
|
|
373
343
|
}); });
|
|
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*/, 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;
|
|
344
|
+
it('should instantiate logger with log level', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
345
|
+
var config;
|
|
403
346
|
return __generator(this, function (_a) {
|
|
404
347
|
switch (_a.label) {
|
|
405
348
|
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')];
|
|
349
|
+
config = {
|
|
350
|
+
logLevel: 'critical',
|
|
351
|
+
};
|
|
352
|
+
return [4 /*yield*/, getAllFeatureFlags(config)];
|
|
415
353
|
case 1:
|
|
416
|
-
|
|
417
|
-
expect(
|
|
354
|
+
_a.sent();
|
|
355
|
+
expect(setLogLevel).toBeCalledWith('critical');
|
|
356
|
+
expect(setLogger).toHaveBeenCalled();
|
|
418
357
|
return [2 /*return*/];
|
|
419
358
|
}
|
|
420
359
|
});
|
|
421
360
|
}); });
|
|
422
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 () {
|
|
423
|
-
var
|
|
362
|
+
var getAllFeatureFlags, flagsAll;
|
|
424
363
|
return __generator(this, function (_a) {
|
|
425
364
|
switch (_a.label) {
|
|
426
365
|
case 0:
|
|
427
366
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
428
367
|
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
429
|
-
|
|
368
|
+
decideAll: jest
|
|
430
369
|
.fn()
|
|
431
|
-
.mockImplementation(function (
|
|
432
|
-
return flagsMock
|
|
370
|
+
.mockImplementation(function (config) {
|
|
371
|
+
return flagsMock;
|
|
433
372
|
}),
|
|
434
373
|
}); }, onReady: jest
|
|
435
374
|
.fn()
|
|
436
375
|
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
437
376
|
}); });
|
|
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)];
|
|
377
|
+
getAllFeatureFlags = require('../utils').getAllFeatureFlags;
|
|
378
|
+
return [4 /*yield*/, getAllFeatureFlags(optionsWithDefaultFlags)];
|
|
449
379
|
case 1:
|
|
450
|
-
|
|
451
|
-
expect(
|
|
380
|
+
flagsAll = _a.sent();
|
|
381
|
+
expect(flagsAll).toEqual(optionsWithDefaultFlags.defaultFeatureFlags);
|
|
452
382
|
return [2 /*return*/];
|
|
453
383
|
}
|
|
454
384
|
});
|
|
455
385
|
}); });
|
|
456
|
-
|
|
457
|
-
|
|
386
|
+
});
|
|
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;
|
|
458
390
|
return __generator(this, function (_a) {
|
|
459
391
|
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')];
|
|
392
|
+
case 0: return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], optionsWithIncludeFlagVariables)];
|
|
474
393
|
case 1:
|
|
475
|
-
|
|
476
|
-
expect(
|
|
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: {},
|
|
401
|
+
},
|
|
402
|
+
});
|
|
477
403
|
return [2 /*return*/];
|
|
478
404
|
}
|
|
479
405
|
});
|
|
480
406
|
}); });
|
|
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 () {
|
|
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 () {
|
|
484
408
|
var flagsByKeys;
|
|
485
409
|
return __generator(this, function (_a) {
|
|
486
410
|
switch (_a.label) {
|
|
487
|
-
case 0: return [4 /*yield*/,
|
|
488
|
-
'
|
|
489
|
-
'
|
|
411
|
+
case 0: return [4 /*yield*/, getFeatureFlagsByKeys([
|
|
412
|
+
'test_flag_3',
|
|
413
|
+
'test_flag_1',
|
|
490
414
|
])];
|
|
491
415
|
case 1:
|
|
492
416
|
flagsByKeys = _a.sent();
|
|
493
417
|
expect(flagsByKeys).toEqual({
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
variationKey: 'off',
|
|
497
|
-
enabled: false,
|
|
498
|
-
variables: {},
|
|
499
|
-
},
|
|
418
|
+
test_flag_1: true,
|
|
419
|
+
test_flag_3: false,
|
|
500
420
|
});
|
|
501
421
|
return [2 /*return*/];
|
|
502
422
|
}
|
|
503
423
|
});
|
|
504
424
|
}); });
|
|
505
425
|
it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
506
|
-
var
|
|
426
|
+
var getFeatureFlagsByKeys, flagsAll;
|
|
507
427
|
return __generator(this, function (_a) {
|
|
508
428
|
switch (_a.label) {
|
|
509
429
|
case 0:
|
|
510
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 ({
|
|
511
431
|
decideForKeys: jest
|
|
512
432
|
.fn()
|
|
513
|
-
.mockImplementation(function (
|
|
433
|
+
.mockImplementation(function (config) {
|
|
514
434
|
return undefined;
|
|
515
435
|
}),
|
|
516
|
-
}); }, onReady: jest.fn().mockResolvedValue({ success: true })
|
|
517
|
-
|
|
518
|
-
return [4 /*yield*/,
|
|
519
|
-
'another_test_flag_1',
|
|
520
|
-
'qualtrics_flag',
|
|
521
|
-
])];
|
|
436
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
437
|
+
getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
|
|
438
|
+
return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'])];
|
|
522
439
|
case 1:
|
|
523
440
|
flagsAll = _a.sent();
|
|
524
441
|
expect(flagsAll).toEqual({});
|
|
@@ -526,8 +443,8 @@ describe('getFlagsByKeys', function () {
|
|
|
526
443
|
}
|
|
527
444
|
});
|
|
528
445
|
}); });
|
|
529
|
-
it('should return defaultFeatureFlags when they have been passed and optimizely client
|
|
530
|
-
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;
|
|
531
448
|
return __generator(this, function (_a) {
|
|
532
449
|
switch (_a.label) {
|
|
533
450
|
case 0:
|
|
@@ -535,7 +452,7 @@ describe('getFlagsByKeys', function () {
|
|
|
535
452
|
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
536
453
|
decideForKeys: jest
|
|
537
454
|
.fn()
|
|
538
|
-
.mockImplementation(function (keys,
|
|
455
|
+
.mockImplementation(function (keys, config) {
|
|
539
456
|
var filtered = {};
|
|
540
457
|
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
541
458
|
return filtered;
|
|
@@ -544,8 +461,8 @@ describe('getFlagsByKeys', function () {
|
|
|
544
461
|
.fn()
|
|
545
462
|
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
546
463
|
}); });
|
|
547
|
-
|
|
548
|
-
|
|
464
|
+
getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
|
|
465
|
+
config = {
|
|
549
466
|
defaultFeatureFlags: {
|
|
550
467
|
default_flag: {
|
|
551
468
|
variationKey: 'off',
|
|
@@ -554,16 +471,16 @@ describe('getFlagsByKeys', function () {
|
|
|
554
471
|
},
|
|
555
472
|
},
|
|
556
473
|
};
|
|
557
|
-
return [4 /*yield*/,
|
|
474
|
+
return [4 /*yield*/, getFeatureFlagsByKeys(['test_flag_3', 'test_flag_1'], config)];
|
|
558
475
|
case 1:
|
|
559
476
|
flagsByKeys = _a.sent();
|
|
560
|
-
expect(flagsByKeys).toEqual(
|
|
477
|
+
expect(flagsByKeys).toEqual(config.defaultFeatureFlags);
|
|
561
478
|
return [2 /*return*/];
|
|
562
479
|
}
|
|
563
480
|
});
|
|
564
481
|
}); });
|
|
565
|
-
it('should return empty object when no default flag have been passed and optimizely client
|
|
566
|
-
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;
|
|
567
484
|
return __generator(this, function (_a) {
|
|
568
485
|
switch (_a.label) {
|
|
569
486
|
case 0:
|
|
@@ -571,7 +488,7 @@ describe('getFlagsByKeys', function () {
|
|
|
571
488
|
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
572
489
|
decideForKeys: jest
|
|
573
490
|
.fn()
|
|
574
|
-
.mockImplementation(function (keys,
|
|
491
|
+
.mockImplementation(function (keys, config) {
|
|
575
492
|
var filtered = {};
|
|
576
493
|
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
577
494
|
return filtered;
|
|
@@ -580,10 +497,10 @@ describe('getFlagsByKeys', function () {
|
|
|
580
497
|
.fn()
|
|
581
498
|
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
582
499
|
}); });
|
|
583
|
-
|
|
584
|
-
return [4 /*yield*/,
|
|
585
|
-
'
|
|
586
|
-
'
|
|
500
|
+
getFeatureFlagsByKeys = require('../utils').getFeatureFlagsByKeys;
|
|
501
|
+
return [4 /*yield*/, getFeatureFlagsByKeys([
|
|
502
|
+
'test_flag_3',
|
|
503
|
+
'test_flag_1',
|
|
587
504
|
])];
|
|
588
505
|
case 1:
|
|
589
506
|
flagsByKeys = _a.sent();
|
|
@@ -593,52 +510,4 @@ describe('getFlagsByKeys', function () {
|
|
|
593
510
|
});
|
|
594
511
|
}); });
|
|
595
512
|
});
|
|
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*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
604
|
-
case 1:
|
|
605
|
-
_a.sent();
|
|
606
|
-
return [4 /*yield*/, 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
513
|
//# sourceMappingURL=utils.tests.js.map
|