@newskit-render/feature-flags 1.8.0 → 1.8.1
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/dist/cjs/__tests__/utils.tests.js +479 -213
- package/dist/cjs/__tests__/utils.tests.js.map +1 -1
- package/dist/cjs/types.d.ts +21 -10
- package/dist/cjs/types.js +10 -2
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +5 -15
- package/dist/cjs/utils.js +134 -66
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/__tests__/utils.tests.js +483 -212
- package/dist/esm/__tests__/utils.tests.js.map +1 -1
- package/dist/esm/types.d.ts +21 -10
- package/dist/esm/types.js +9 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.d.ts +5 -15
- package/dist/esm/utils.js +130 -62
- package/dist/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/config.d.ts +0 -4
- package/dist/cjs/config.js +0 -12
- package/dist/cjs/config.js.map +0 -1
- package/dist/esm/config.d.ts +0 -4
- package/dist/esm/config.js +0 -9
- package/dist/esm/config.js.map +0 -1
|
@@ -45,326 +45,597 @@ 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
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
import {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
import { setLogLevel, setLogger,
|
|
49
|
+
// createInstance
|
|
50
|
+
} from '@optimizely/optimizely-sdk';
|
|
51
|
+
import { _resetInstance, closeFlagsInstance, getFlag, getFlagsAll, getFlagsByKeys, } from '../utils';
|
|
52
|
+
import { MissingConfigurationError, MissingInstanceError, MissingUserContextError, } from '../types';
|
|
53
|
+
var originalEnv = process.env;
|
|
54
|
+
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
|
+
decide: jest
|
|
56
|
+
.fn()
|
|
57
|
+
.mockImplementation(function (key, options) {
|
|
58
|
+
return flagsMock[key];
|
|
59
|
+
}),
|
|
60
|
+
decideForKeys: jest
|
|
61
|
+
.fn()
|
|
62
|
+
.mockImplementation(function (keys, options) {
|
|
63
|
+
var filtered = {};
|
|
64
|
+
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
65
|
+
return filtered;
|
|
66
|
+
}),
|
|
67
|
+
decideAll: jest
|
|
68
|
+
.fn()
|
|
69
|
+
.mockImplementation(function (options) {
|
|
70
|
+
return flagsMock;
|
|
71
|
+
}),
|
|
72
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); }, setLogLevel: jest.fn(), setLogger: jest.fn() })); });
|
|
73
|
+
var flagsMock = {
|
|
74
|
+
qualtrics_flag: {
|
|
75
|
+
variationKey: 'on',
|
|
76
|
+
enabled: true,
|
|
77
|
+
variables: {},
|
|
78
|
+
ruleKey: 'default-rollout-216689-29200910123',
|
|
79
|
+
flagKey: 'qualtrics_flag',
|
|
80
|
+
userContext: {
|
|
81
|
+
_qualifiedSegments: null,
|
|
82
|
+
// optimizely: [e],
|
|
83
|
+
userId: 'user123',
|
|
84
|
+
attributes: {},
|
|
85
|
+
forcedDecisionsMap: {},
|
|
86
|
+
},
|
|
87
|
+
reasons: [],
|
|
88
|
+
},
|
|
89
|
+
testing_flag: {
|
|
90
|
+
variationKey: 'max_10',
|
|
91
|
+
enabled: true,
|
|
92
|
+
variables: { max_family_members: 10 },
|
|
93
|
+
ruleKey: 'default-rollout-223709-29200910123',
|
|
94
|
+
flagKey: 'testing_flag',
|
|
95
|
+
userContext: {
|
|
96
|
+
_qualifiedSegments: null,
|
|
97
|
+
// optimizely: [e],
|
|
98
|
+
userId: 'user123',
|
|
99
|
+
attributes: {},
|
|
100
|
+
forcedDecisionsMap: {},
|
|
101
|
+
},
|
|
102
|
+
reasons: [],
|
|
103
|
+
},
|
|
104
|
+
another_test_flag_1: {
|
|
105
|
+
variationKey: 'off',
|
|
55
106
|
enabled: false,
|
|
107
|
+
variables: {},
|
|
108
|
+
ruleKey: 'default-rollout-225089-29200910123',
|
|
109
|
+
flagKey: 'another_test_flag_1',
|
|
110
|
+
userContext: {
|
|
111
|
+
_qualifiedSegments: null,
|
|
112
|
+
// optimizely: [e],
|
|
113
|
+
userId: 'user123',
|
|
114
|
+
attributes: {},
|
|
115
|
+
forcedDecisionsMap: {},
|
|
116
|
+
},
|
|
117
|
+
reasons: [],
|
|
56
118
|
},
|
|
57
|
-
|
|
58
|
-
|
|
119
|
+
testing_flag_with_variations_and_variables: {
|
|
120
|
+
variationKey: 'primary_with_new_weclome_message_and_max_accounts',
|
|
59
121
|
enabled: true,
|
|
122
|
+
variables: {
|
|
123
|
+
family_primary_welcome_message: 'This is the new message',
|
|
124
|
+
family_primary_enable_secondary_accounts: true,
|
|
125
|
+
family_primary_max_secondary_accounts: 10,
|
|
126
|
+
family_primary_metadata_json: {
|
|
127
|
+
metadata1: 'a',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
ruleKey: 'default-rollout-225097-29200910123',
|
|
131
|
+
flagKey: 'testing_flag_with_variations_and_variables',
|
|
132
|
+
userContext: {
|
|
133
|
+
_qualifiedSegments: null,
|
|
134
|
+
// optimizely: [e],
|
|
135
|
+
userId: 'user123',
|
|
136
|
+
attributes: {},
|
|
137
|
+
forcedDecisionsMap: {},
|
|
138
|
+
},
|
|
139
|
+
reasons: [],
|
|
60
140
|
},
|
|
61
141
|
};
|
|
62
|
-
jest.mock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return ({
|
|
63
|
-
isFeatureEnabled: jest
|
|
64
|
-
.fn()
|
|
65
|
-
.mockImplementation(function (featureKey, userId) {
|
|
66
|
-
return mockFeaturesMap[featureKey].enabled;
|
|
67
|
-
}),
|
|
68
|
-
onReady: jest.fn().mockResolvedValue({ success: true }),
|
|
69
|
-
getOptimizelyConfig: jest
|
|
70
|
-
.fn()
|
|
71
|
-
.mockReturnValue({ featuresMap: mockFeaturesMap }),
|
|
72
|
-
}); } })); });
|
|
73
|
-
jest
|
|
74
|
-
.spyOn(optimizelySDK, 'setLogLevel')
|
|
75
|
-
.mockImplementation(function (logLevel) { return logLevel; });
|
|
76
|
-
jest.spyOn(optimizelySDK, 'setLogger');
|
|
77
142
|
beforeEach(function () {
|
|
78
143
|
jest.resetModules();
|
|
144
|
+
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: 'optimizely-sdk-key' });
|
|
79
145
|
});
|
|
80
146
|
afterEach(function () {
|
|
81
147
|
_resetInstance();
|
|
82
148
|
});
|
|
83
|
-
describe('
|
|
84
|
-
it('should
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
it('should use default userId when creating instance', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
149
|
+
describe('getFlagsAll', function () {
|
|
150
|
+
it('should return all flags with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
151
|
+
var flagsAll;
|
|
88
152
|
return __generator(this, function (_a) {
|
|
89
153
|
switch (_a.label) {
|
|
90
|
-
case 0: return [4 /*yield*/,
|
|
154
|
+
case 0: return [4 /*yield*/, getFlagsAll()];
|
|
91
155
|
case 1:
|
|
92
|
-
_a.sent();
|
|
93
|
-
expect(
|
|
156
|
+
flagsAll = _a.sent();
|
|
157
|
+
expect(flagsAll).toEqual({
|
|
158
|
+
qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
|
|
159
|
+
testing_flag: {
|
|
160
|
+
variationKey: 'max_10',
|
|
161
|
+
enabled: true,
|
|
162
|
+
variables: { max_family_members: 10 },
|
|
163
|
+
},
|
|
164
|
+
another_test_flag_1: {
|
|
165
|
+
variationKey: 'off',
|
|
166
|
+
enabled: false,
|
|
167
|
+
variables: {},
|
|
168
|
+
},
|
|
169
|
+
testing_flag_with_variations_and_variables: {
|
|
170
|
+
variationKey: 'primary_with_new_weclome_message_and_max_accounts',
|
|
171
|
+
enabled: true,
|
|
172
|
+
variables: {
|
|
173
|
+
family_primary_welcome_message: 'This is the new message',
|
|
174
|
+
family_primary_enable_secondary_accounts: true,
|
|
175
|
+
family_primary_max_secondary_accounts: 10,
|
|
176
|
+
family_primary_metadata_json: {
|
|
177
|
+
metadata1: 'a',
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
});
|
|
94
182
|
return [2 /*return*/];
|
|
95
183
|
}
|
|
96
184
|
});
|
|
97
185
|
}); });
|
|
98
|
-
it('should
|
|
186
|
+
it('should return all flags with custom options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
187
|
+
var options, flagsAll;
|
|
99
188
|
return __generator(this, function (_a) {
|
|
100
189
|
switch (_a.label) {
|
|
101
|
-
case 0:
|
|
190
|
+
case 0:
|
|
191
|
+
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
192
|
+
options = {
|
|
193
|
+
sdkConfig: {
|
|
194
|
+
sdkKey: 'custom-optimizely-sdk',
|
|
195
|
+
},
|
|
196
|
+
userData: {
|
|
197
|
+
userId: 'user456',
|
|
198
|
+
attributes: { logged_in: true, cpn: 'AAA123', subs_type: 'digi-print' },
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
return [4 /*yield*/, getFlagsAll(options)];
|
|
102
202
|
case 1:
|
|
103
|
-
_a.sent();
|
|
104
|
-
expect(
|
|
203
|
+
flagsAll = _a.sent();
|
|
204
|
+
expect(flagsAll).toEqual({
|
|
205
|
+
qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
|
|
206
|
+
testing_flag: {
|
|
207
|
+
variationKey: 'max_10',
|
|
208
|
+
enabled: true,
|
|
209
|
+
variables: { max_family_members: 10 },
|
|
210
|
+
},
|
|
211
|
+
another_test_flag_1: {
|
|
212
|
+
variationKey: 'off',
|
|
213
|
+
enabled: false,
|
|
214
|
+
variables: {},
|
|
215
|
+
},
|
|
216
|
+
testing_flag_with_variations_and_variables: {
|
|
217
|
+
variationKey: 'primary_with_new_weclome_message_and_max_accounts',
|
|
218
|
+
enabled: true,
|
|
219
|
+
variables: {
|
|
220
|
+
family_primary_welcome_message: 'This is the new message',
|
|
221
|
+
family_primary_enable_secondary_accounts: true,
|
|
222
|
+
family_primary_max_secondary_accounts: 10,
|
|
223
|
+
family_primary_metadata_json: {
|
|
224
|
+
metadata1: 'a',
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
});
|
|
105
229
|
return [2 /*return*/];
|
|
106
230
|
}
|
|
107
231
|
});
|
|
108
232
|
}); });
|
|
109
|
-
it('should
|
|
233
|
+
it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
234
|
+
var getFlagsAll, flagsAll;
|
|
110
235
|
return __generator(this, function (_a) {
|
|
111
236
|
switch (_a.label) {
|
|
112
|
-
case 0:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
237
|
+
case 0:
|
|
238
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
239
|
+
decideAll: jest
|
|
240
|
+
.fn()
|
|
241
|
+
.mockImplementation(function (options) {
|
|
242
|
+
return undefined;
|
|
243
|
+
}),
|
|
244
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
245
|
+
getFlagsAll = require('../utils').getFlagsAll;
|
|
246
|
+
return [4 /*yield*/, getFlagsAll()];
|
|
116
247
|
case 1:
|
|
117
|
-
_a.sent();
|
|
118
|
-
expect(
|
|
248
|
+
flagsAll = _a.sent();
|
|
249
|
+
expect(flagsAll).toEqual({});
|
|
119
250
|
return [2 /*return*/];
|
|
120
251
|
}
|
|
121
252
|
});
|
|
122
253
|
}); });
|
|
123
|
-
it('should
|
|
254
|
+
it('should throw error when called without sdk key', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
255
|
+
return __generator(this, function (_a) {
|
|
256
|
+
process.env = __assign(__assign({}, originalEnv), { OPTIMIZELY_SDK_KEY: undefined });
|
|
257
|
+
expect(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
258
|
+
switch (_a.label) {
|
|
259
|
+
case 0: return [4 /*yield*/, 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;
|
|
124
300
|
return __generator(this, function (_a) {
|
|
125
301
|
switch (_a.label) {
|
|
126
|
-
case 0:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
paymentMethod: {
|
|
132
|
-
type: 'CreditCard',
|
|
133
|
-
cardType: 'Visa',
|
|
134
|
-
cardNumber: '************4321',
|
|
135
|
-
expirationYear: 2028,
|
|
136
|
-
expirationMonth: 2,
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
})];
|
|
302
|
+
case 0:
|
|
303
|
+
options = {
|
|
304
|
+
logLevel: 'critical',
|
|
305
|
+
};
|
|
306
|
+
return [4 /*yield*/, getFlagsAll(options)];
|
|
141
307
|
case 1:
|
|
142
308
|
_a.sent();
|
|
143
|
-
expect(
|
|
144
|
-
|
|
145
|
-
billingDetails: {
|
|
146
|
-
paymentMethod: {
|
|
147
|
-
type: 'CreditCard',
|
|
148
|
-
cardType: 'Visa',
|
|
149
|
-
cardNumber: '************4321',
|
|
150
|
-
expirationYear: 2028,
|
|
151
|
-
expirationMonth: 2,
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
});
|
|
309
|
+
expect(setLogLevel).toBeCalledWith('critical');
|
|
310
|
+
expect(setLogger).toHaveBeenCalled();
|
|
155
311
|
return [2 /*return*/];
|
|
156
312
|
}
|
|
157
313
|
});
|
|
158
314
|
}); });
|
|
159
|
-
it('should
|
|
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;
|
|
160
317
|
return __generator(this, function (_a) {
|
|
161
318
|
switch (_a.label) {
|
|
162
319
|
case 0:
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
320
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
321
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
322
|
+
decideAll: jest
|
|
323
|
+
.fn()
|
|
324
|
+
.mockImplementation(function (options) {
|
|
325
|
+
return flagsMock;
|
|
326
|
+
}),
|
|
327
|
+
}); }, onReady: jest
|
|
328
|
+
.fn()
|
|
329
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
330
|
+
}); });
|
|
331
|
+
getFlagsAll = require('../utils').getFlagsAll;
|
|
332
|
+
options = {
|
|
333
|
+
defaultFeatureFlags: {
|
|
334
|
+
default_flag: {
|
|
335
|
+
variationKey: 'off',
|
|
336
|
+
enabled: true,
|
|
337
|
+
variables: {},
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
return [4 /*yield*/, getFlagsAll(options)];
|
|
168
342
|
case 1:
|
|
169
|
-
_a.sent();
|
|
170
|
-
expect(
|
|
171
|
-
expect(defaultFeatureFlags).toEqual({
|
|
172
|
-
default_flag: true,
|
|
173
|
-
default_flag2: false,
|
|
174
|
-
});
|
|
343
|
+
flagsAll = _a.sent();
|
|
344
|
+
expect(flagsAll).toEqual(options.defaultFeatureFlags);
|
|
175
345
|
return [2 /*return*/];
|
|
176
346
|
}
|
|
177
347
|
});
|
|
178
348
|
}); });
|
|
179
|
-
it('should
|
|
349
|
+
it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
350
|
+
var getFlagsAll, flagsAll;
|
|
180
351
|
return __generator(this, function (_a) {
|
|
181
352
|
switch (_a.label) {
|
|
182
|
-
case 0:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
353
|
+
case 0:
|
|
354
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
355
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
356
|
+
decideAll: jest
|
|
357
|
+
.fn()
|
|
358
|
+
.mockImplementation(function (options) {
|
|
359
|
+
return flagsMock;
|
|
360
|
+
}),
|
|
361
|
+
}); }, onReady: jest
|
|
362
|
+
.fn()
|
|
363
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
364
|
+
}); });
|
|
365
|
+
getFlagsAll = require('../utils').getFlagsAll;
|
|
366
|
+
return [4 /*yield*/, getFlagsAll()];
|
|
186
367
|
case 1:
|
|
187
|
-
_a.sent();
|
|
188
|
-
expect(
|
|
189
|
-
expect(optimizelySDK.setLogger).toHaveBeenCalled();
|
|
368
|
+
flagsAll = _a.sent();
|
|
369
|
+
expect(flagsAll).toEqual({});
|
|
190
370
|
return [2 /*return*/];
|
|
191
371
|
}
|
|
192
372
|
});
|
|
193
373
|
}); });
|
|
194
374
|
});
|
|
195
|
-
describe('
|
|
196
|
-
it('should
|
|
197
|
-
var
|
|
198
|
-
return __generator(this, function (
|
|
199
|
-
switch (
|
|
200
|
-
case 0: return [4 /*yield*/,
|
|
375
|
+
describe('getFlag', function () {
|
|
376
|
+
it('should return a flag with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
377
|
+
var flag;
|
|
378
|
+
return __generator(this, function (_a) {
|
|
379
|
+
switch (_a.label) {
|
|
380
|
+
case 0: return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
201
381
|
case 1:
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
+
},
|
|
209
396
|
});
|
|
210
397
|
return [2 /*return*/];
|
|
211
398
|
}
|
|
212
399
|
});
|
|
213
400
|
}); });
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
it('should throw error when called without optimizely instance', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
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;
|
|
217
403
|
return __generator(this, function (_a) {
|
|
218
|
-
|
|
219
|
-
|
|
404
|
+
switch (_a.label) {
|
|
405
|
+
case 0:
|
|
406
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk')), { createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
407
|
+
decide: jest
|
|
408
|
+
.fn()
|
|
409
|
+
.mockImplementation(function (options) {
|
|
410
|
+
return undefined;
|
|
411
|
+
}),
|
|
412
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
413
|
+
getFlag = require('../utils').getFlag;
|
|
414
|
+
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
415
|
+
case 1:
|
|
416
|
+
flagsAll = _a.sent();
|
|
417
|
+
expect(flagsAll).toEqual({});
|
|
418
|
+
return [2 /*return*/];
|
|
419
|
+
}
|
|
220
420
|
});
|
|
221
421
|
}); });
|
|
222
|
-
it('should return
|
|
223
|
-
var
|
|
224
|
-
return __generator(this, function (
|
|
225
|
-
switch (
|
|
226
|
-
case 0:
|
|
422
|
+
it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
423
|
+
var getFlag, options, flag;
|
|
424
|
+
return __generator(this, function (_a) {
|
|
425
|
+
switch (_a.label) {
|
|
426
|
+
case 0:
|
|
427
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
428
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
429
|
+
decide: jest
|
|
430
|
+
.fn()
|
|
431
|
+
.mockImplementation(function (key, options) {
|
|
432
|
+
return flagsMock[key];
|
|
433
|
+
}),
|
|
434
|
+
}); }, onReady: jest
|
|
435
|
+
.fn()
|
|
436
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
437
|
+
}); });
|
|
438
|
+
getFlag = require('../utils').getFlag;
|
|
439
|
+
options = {
|
|
440
|
+
defaultFeatureFlags: {
|
|
441
|
+
default_flag: {
|
|
442
|
+
variationKey: 'off',
|
|
443
|
+
enabled: true,
|
|
444
|
+
variables: {},
|
|
445
|
+
},
|
|
446
|
+
},
|
|
447
|
+
};
|
|
448
|
+
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables', options)];
|
|
227
449
|
case 1:
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
return [4 /*yield*/, getFeatureFlags()];
|
|
231
|
-
case 2:
|
|
232
|
-
_a.apply(void 0, [_b.sent()]).toEqual({
|
|
233
|
-
test_flag: false,
|
|
234
|
-
test_flag2: true,
|
|
235
|
-
});
|
|
450
|
+
flag = _a.sent();
|
|
451
|
+
expect(flag).toEqual(options.defaultFeatureFlags);
|
|
236
452
|
return [2 /*return*/];
|
|
237
453
|
}
|
|
238
454
|
});
|
|
239
455
|
}); });
|
|
240
|
-
it('should return default
|
|
241
|
-
var
|
|
242
|
-
return __generator(this, function (
|
|
243
|
-
switch (
|
|
456
|
+
it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
457
|
+
var getFlag, flag;
|
|
458
|
+
return __generator(this, function (_a) {
|
|
459
|
+
switch (_a.label) {
|
|
244
460
|
case 0:
|
|
245
461
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
246
|
-
createInstance: function () { return ({
|
|
247
|
-
|
|
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
|
|
248
469
|
.fn()
|
|
249
|
-
.
|
|
250
|
-
return mockFeaturesMap[featureKey].enabled;
|
|
251
|
-
}),
|
|
252
|
-
onReady: jest.fn().mockResolvedValue({ success: false }),
|
|
253
|
-
getOptimizelyConfig: jest
|
|
254
|
-
.fn()
|
|
255
|
-
.mockReturnValue({ featuresMap: mockFeaturesMap }),
|
|
256
|
-
}); },
|
|
470
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
257
471
|
}); });
|
|
258
|
-
|
|
259
|
-
return [4 /*yield*/,
|
|
260
|
-
optimizelyConfig: { sdkKey: 'sdkkey' },
|
|
261
|
-
defaultFeatureFlags: { defaultFlag: true },
|
|
262
|
-
})];
|
|
472
|
+
getFlag = require('../utils').getFlag;
|
|
473
|
+
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
263
474
|
case 1:
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
return [4 /*yield*/, utils.getFeatureFlags()];
|
|
267
|
-
case 2:
|
|
268
|
-
_a.apply(void 0, [_b.sent()]).toEqual({
|
|
269
|
-
defaultFlag: true,
|
|
270
|
-
});
|
|
475
|
+
flag = _a.sent();
|
|
476
|
+
expect(flag).toEqual({});
|
|
271
477
|
return [2 /*return*/];
|
|
272
478
|
}
|
|
273
479
|
});
|
|
274
480
|
}); });
|
|
275
481
|
});
|
|
276
|
-
describe('
|
|
277
|
-
it('should return
|
|
278
|
-
var
|
|
279
|
-
return __generator(this, function (
|
|
280
|
-
switch (
|
|
281
|
-
case 0:
|
|
282
|
-
|
|
283
|
-
|
|
482
|
+
describe('getFlagsByKeys', function () {
|
|
483
|
+
it('should return flags by keys with default options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
484
|
+
var flagsByKeys;
|
|
485
|
+
return __generator(this, function (_a) {
|
|
486
|
+
switch (_a.label) {
|
|
487
|
+
case 0: return [4 /*yield*/, getFlagsByKeys([
|
|
488
|
+
'another_test_flag_1',
|
|
489
|
+
'qualtrics_flag',
|
|
490
|
+
])];
|
|
284
491
|
case 1:
|
|
285
|
-
|
|
492
|
+
flagsByKeys = _a.sent();
|
|
493
|
+
expect(flagsByKeys).toEqual({
|
|
494
|
+
qualtrics_flag: { variationKey: 'on', enabled: true, variables: {} },
|
|
495
|
+
another_test_flag_1: {
|
|
496
|
+
variationKey: 'off',
|
|
497
|
+
enabled: false,
|
|
498
|
+
variables: {},
|
|
499
|
+
},
|
|
500
|
+
});
|
|
286
501
|
return [2 /*return*/];
|
|
287
502
|
}
|
|
288
503
|
});
|
|
289
504
|
}); });
|
|
290
|
-
it('should return
|
|
291
|
-
var
|
|
292
|
-
return __generator(this, function (
|
|
293
|
-
switch (
|
|
505
|
+
it('should return empty object if no flags are fetched', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
506
|
+
var getFlagsByKeys, flagsAll;
|
|
507
|
+
return __generator(this, function (_a) {
|
|
508
|
+
switch (_a.label) {
|
|
294
509
|
case 0:
|
|
295
|
-
|
|
296
|
-
|
|
510
|
+
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
|
+
decideForKeys: jest
|
|
512
|
+
.fn()
|
|
513
|
+
.mockImplementation(function (options) {
|
|
514
|
+
return undefined;
|
|
515
|
+
}),
|
|
516
|
+
}); }, onReady: jest.fn().mockResolvedValue({ success: true }), close: jest.fn().mockResolvedValue({ success: true }) })); } })); });
|
|
517
|
+
getFlagsByKeys = require('../utils').getFlagsByKeys;
|
|
518
|
+
return [4 /*yield*/, getFlagsByKeys([
|
|
519
|
+
'another_test_flag_1',
|
|
520
|
+
'qualtrics_flag',
|
|
521
|
+
])];
|
|
297
522
|
case 1:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
test_flag2: true,
|
|
301
|
-
});
|
|
523
|
+
flagsAll = _a.sent();
|
|
524
|
+
expect(flagsAll).toEqual({});
|
|
302
525
|
return [2 /*return*/];
|
|
303
526
|
}
|
|
304
527
|
});
|
|
305
528
|
}); });
|
|
306
|
-
it('should return
|
|
307
|
-
var
|
|
308
|
-
return __generator(this, function (
|
|
309
|
-
switch (
|
|
529
|
+
it('should return defaultFeatureFlags when they have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
530
|
+
var getFlagsByKeys, options, flagsByKeys;
|
|
531
|
+
return __generator(this, function (_a) {
|
|
532
|
+
switch (_a.label) {
|
|
310
533
|
case 0:
|
|
311
534
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
312
|
-
createInstance: function () { return ({
|
|
313
|
-
|
|
535
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
536
|
+
decideForKeys: jest
|
|
537
|
+
.fn()
|
|
538
|
+
.mockImplementation(function (keys, options) {
|
|
539
|
+
var filtered = {};
|
|
540
|
+
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
541
|
+
return filtered;
|
|
542
|
+
}),
|
|
543
|
+
}); }, onReady: jest
|
|
314
544
|
.fn()
|
|
315
|
-
.
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
545
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
546
|
+
}); });
|
|
547
|
+
getFlagsByKeys = require('../utils').getFlagsByKeys;
|
|
548
|
+
options = {
|
|
549
|
+
defaultFeatureFlags: {
|
|
550
|
+
default_flag: {
|
|
551
|
+
variationKey: 'off',
|
|
552
|
+
enabled: true,
|
|
553
|
+
variables: {},
|
|
554
|
+
},
|
|
555
|
+
},
|
|
556
|
+
};
|
|
557
|
+
return [4 /*yield*/, getFlagsByKeys(['another_test_flag_1', 'qualtrics_flag'], options)];
|
|
558
|
+
case 1:
|
|
559
|
+
flagsByKeys = _a.sent();
|
|
560
|
+
expect(flagsByKeys).toEqual(options.defaultFeatureFlags);
|
|
561
|
+
return [2 /*return*/];
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
}); });
|
|
565
|
+
it('should return empty object when no default flag have been passed and optimizely client is not ready', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
566
|
+
var getFlagsByKeys, flagsByKeys;
|
|
567
|
+
return __generator(this, function (_a) {
|
|
568
|
+
switch (_a.label) {
|
|
569
|
+
case 0:
|
|
570
|
+
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
571
|
+
createInstance: function () { return (__assign(__assign({}, jest.requireActual('@optimizely/optimizely-sdk').createInstance), { createUserContext: function () { return ({
|
|
572
|
+
decideForKeys: jest
|
|
573
|
+
.fn()
|
|
574
|
+
.mockImplementation(function (keys, options) {
|
|
575
|
+
var filtered = {};
|
|
576
|
+
keys.forEach(function (k) { return (filtered[k] = flagsMock[k]); });
|
|
577
|
+
return filtered;
|
|
578
|
+
}),
|
|
579
|
+
}); }, onReady: jest
|
|
323
580
|
.fn()
|
|
324
|
-
.
|
|
325
|
-
}); },
|
|
581
|
+
.mockResolvedValue({ success: false, reason: 'Promise rejected' }) })); },
|
|
326
582
|
}); });
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
583
|
+
getFlagsByKeys = require('../utils').getFlagsByKeys;
|
|
584
|
+
return [4 /*yield*/, getFlagsByKeys([
|
|
585
|
+
'another_test_flag_1',
|
|
586
|
+
'qualtrics_flag',
|
|
587
|
+
])];
|
|
330
588
|
case 1:
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
test_flag2: true,
|
|
334
|
-
});
|
|
589
|
+
flagsByKeys = _a.sent();
|
|
590
|
+
expect(flagsByKeys).toEqual({});
|
|
335
591
|
return [2 /*return*/];
|
|
336
592
|
}
|
|
337
593
|
});
|
|
338
594
|
}); });
|
|
339
|
-
|
|
340
|
-
|
|
595
|
+
});
|
|
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;
|
|
341
616
|
return __generator(this, function (_b) {
|
|
342
617
|
switch (_b.label) {
|
|
343
618
|
case 0:
|
|
619
|
+
spy = jest.spyOn(console, 'log');
|
|
344
620
|
jest.doMock('@optimizely/optimizely-sdk', function () { return ({
|
|
345
|
-
createInstance: function () { return ({
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
return false;
|
|
353
|
-
}),
|
|
354
|
-
onReady: jest.fn().mockResolvedValue({ success: true }),
|
|
355
|
-
getOptimizelyConfig: jest
|
|
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
|
|
356
628
|
.fn()
|
|
357
|
-
.
|
|
358
|
-
}); },
|
|
629
|
+
.mockResolvedValue({ success: false, reason: 'Closing rejected' }) })); },
|
|
359
630
|
}); });
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
return [4 /*yield*/, utils.initAndGetFeatureFlag('sdkkey', { cpn: '4AAA039156221' })];
|
|
631
|
+
_a = require('../utils'), getFlag = _a.getFlag, closeFlagsInstance = _a.closeFlagsInstance;
|
|
632
|
+
return [4 /*yield*/, getFlag('testing_flag_with_variations_and_variables')];
|
|
363
633
|
case 1:
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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');
|
|
368
639
|
return [2 /*return*/];
|
|
369
640
|
}
|
|
370
641
|
});
|