Skip to content

Commit 68d6618

Browse files
committed
up
1 parent 091eb40 commit 68d6618

File tree

1 file changed

+114
-5
lines changed

1 file changed

+114
-5
lines changed

lib/optimizely_user_context/index.spec.ts

Lines changed: 114 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const getOptlyInstance = ({ datafileObj, defaultDecideOptions }: GetOptlyInstanc
7070

7171
describe('OptimizelyUserContext', () => {
7272
const userId = 'tester';
73-
const options = ['fakeOption'];
73+
const options = [OptimizelyDecideOption.IGNORE_CMAB_CACHE];
7474

7575
describe('setAttribute', () => {
7676
let fakeOptimizely: any;
@@ -208,12 +208,37 @@ describe('OptimizelyUserContext', () => {
208208
optimizely: fakeOptimizely,
209209
userId,
210210
});
211-
const decision = user.decide(flagKey, options as any);
211+
const decision = user.decide(flagKey, options);
212212
expect(fakeOptimizely.decide).toHaveBeenCalledWith(user, flagKey, options);
213213
expect(decision).toEqual(fakeDecision);
214214
});
215215
});
216216

217+
describe('decideAsync', () => {
218+
it('should return an expected decision object', async () => {
219+
const flagKey = 'feature_1';
220+
const fakeDecision = {
221+
variationKey: 'variation_with_traffic',
222+
enabled: true,
223+
variables: {},
224+
ruleKey: 'exp_no_audience',
225+
flagKey: flagKey,
226+
userContext: 'fakeUserContext',
227+
reasons: [],
228+
};
229+
const fakeOptimizely: any = {
230+
decideAsync: vi.fn().mockResolvedValue(fakeDecision),
231+
};
232+
const user = new OptimizelyUserContext({
233+
optimizely: fakeOptimizely,
234+
userId,
235+
});
236+
const decision = await user.decideAsync(flagKey, options);
237+
expect(fakeOptimizely.decideAsync).toHaveBeenCalledWith(user, flagKey, options);
238+
expect(decision).toEqual(fakeDecision);
239+
});
240+
});
241+
217242
describe('decideForKeys', () => {
218243
it('should return an expected decision results object', () => {
219244
const flagKey1 = 'feature_1';
@@ -245,12 +270,49 @@ describe('OptimizelyUserContext', () => {
245270
optimizely: fakeOptimizely,
246271
userId,
247272
});
248-
const decisionMap = user.decideForKeys([flagKey1, flagKey2], options as any);
273+
const decisionMap = user.decideForKeys([flagKey1, flagKey2], options);
249274
expect(fakeOptimizely.decideForKeys).toHaveBeenCalledWith(user, [flagKey1, flagKey2], options);
250275
expect(decisionMap).toEqual(fakeDecisionMap);
251276
});
252277
});
253278

279+
describe('decideForKeysAsync', () => {
280+
it('should return an expected decision results object', async () => {
281+
const flagKey1 = 'feature_1';
282+
const flagKey2 = 'feature_2';
283+
const fakeDecisionMap = {
284+
flagKey1: {
285+
variationKey: '18257766532',
286+
enabled: true,
287+
variables: {},
288+
ruleKey: '18322080788',
289+
flagKey: flagKey1,
290+
userContext: 'fakeUserContext',
291+
reasons: [],
292+
},
293+
flagKey2: {
294+
variationKey: 'variation_with_traffic',
295+
enabled: true,
296+
variables: {},
297+
ruleKey: 'exp_no_audience',
298+
flagKey: flagKey2,
299+
userContext: 'fakeUserContext',
300+
reasons: [],
301+
},
302+
};
303+
const fakeOptimizely: any = {
304+
decideForKeysAsync: vi.fn().mockResolvedValue(fakeDecisionMap),
305+
};
306+
const user = new OptimizelyUserContext({
307+
optimizely: fakeOptimizely,
308+
userId,
309+
});
310+
const decisionMap = await user.decideForKeysAsync([flagKey1, flagKey2], options);
311+
expect(fakeOptimizely.decideForKeysAsync).toHaveBeenCalledWith(user, [flagKey1, flagKey2], options);
312+
expect(decisionMap).toEqual(fakeDecisionMap);
313+
});
314+
});
315+
254316
describe('decideAll', () => {
255317
it('should return an expected decision results object', () => {
256318
const flagKey1 = 'feature_1';
@@ -292,12 +354,59 @@ describe('OptimizelyUserContext', () => {
292354
optimizely: fakeOptimizely,
293355
userId,
294356
});
295-
const decisionMap = user.decideAll(options as any);
357+
const decisionMap = user.decideAll(options);
296358
expect(fakeOptimizely.decideAll).toHaveBeenCalledWith(user, options);
297359
expect(decisionMap).toEqual(fakeDecisionMap);
298360
});
299361
});
300362

363+
describe('decideAllAsync', () => {
364+
it('should return an expected decision results object', async () => {
365+
const flagKey1 = 'feature_1';
366+
const flagKey2 = 'feature_2';
367+
const flagKey3 = 'feature_3';
368+
const fakeDecisionMap: any = {
369+
flagKey1: {
370+
variationKey: '18257766532',
371+
enabled: true,
372+
variables: {},
373+
ruleKey: '18322080788',
374+
flagKey: flagKey1,
375+
userContext: 'fakeUserContext',
376+
reasons: [],
377+
},
378+
flagKey2: {
379+
variationKey: 'variation_with_traffic',
380+
enabled: true,
381+
variables: {},
382+
ruleKey: 'exp_no_audience',
383+
flagKey: flagKey2,
384+
userContext: 'fakeUserContext',
385+
reasons: [],
386+
},
387+
flagKey3: {
388+
variationKey: '',
389+
enabled: false,
390+
variables: {},
391+
ruleKey: '',
392+
flagKey: flagKey3,
393+
userContext: undefined,
394+
reasons: [],
395+
},
396+
};
397+
const fakeOptimizely: any = {
398+
decideAllAsync: vi.fn().mockResolvedValue(fakeDecisionMap),
399+
};
400+
const user = new OptimizelyUserContext({
401+
optimizely: fakeOptimizely,
402+
userId,
403+
});
404+
const decisionMap = await user.decideAllAsync(options);
405+
expect(fakeOptimizely.decideAllAsync).toHaveBeenCalledWith(user, options);
406+
expect(decisionMap).toEqual(fakeDecisionMap);
407+
});
408+
});
409+
301410
describe('trackEvent', () => {
302411
it('should call track from optimizely client', () => {
303412
const fakeOptimizely: any = {
@@ -393,7 +502,7 @@ describe('OptimizelyUserContext', () => {
393502
});
394503

395504
user.setForcedDecision({ flagKey: flagKey, ruleKey }, { variationKey });
396-
const decision = user.decide(flagKey, options as any);
505+
const decision = user.decide(flagKey, options);
397506

398507
expect(decision.variationKey).toEqual(variationKey);
399508
expect(decision.ruleKey).toEqual(ruleKey);

0 commit comments

Comments
 (0)