Skip to content

Commit fb5744b

Browse files
committed
add tests
1 parent 3087bad commit fb5744b

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

core-api/src/test/java/com/optimizely/ab/OptimizelyUserContextTest.java

+36-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import com.google.common.base.Charsets;
2121
import com.google.common.io.Resources;
2222
import com.optimizely.ab.bucketing.FeatureDecision;
23+
import com.optimizely.ab.bucketing.UserProfile;
2324
import com.optimizely.ab.bucketing.UserProfileService;
25+
import com.optimizely.ab.bucketing.UserProfileUtils;
2426
import com.optimizely.ab.config.*;
2527
import com.optimizely.ab.config.parser.ConfigParseException;
2628
import com.optimizely.ab.event.EventHandler;
@@ -369,7 +371,7 @@ public void decideAll_allFlags() {
369371

370372
OptimizelyUserContext user = optimizely.createUserContext(userId, attributes);
371373
Map<String, OptimizelyDecision> decisions = user.decideAll();
372-
assertTrue(decisions.size() == 3);
374+
assertEquals(decisions.size(), 3);
373375

374376
assertEquals(
375377
decisions.get(flagKey1),
@@ -421,6 +423,39 @@ public void decideAll_allFlags() {
421423
assertEquals(sentEvents.get(2).getUserContext().getUserId(), userId);
422424
}
423425

426+
@Test
427+
public void decideForKeys_ups_batching() throws Exception {
428+
UserProfileService ups = mock(UserProfileService.class);
429+
430+
optimizely = new Optimizely.Builder()
431+
.withDatafile(datafile)
432+
.withUserProfileService(ups)
433+
.build();
434+
435+
String flagKey1 = "feature_1";
436+
String flagKey2 = "feature_2";
437+
String flagKey3 = "feature_3";
438+
Map<String, Object> attributes = Collections.singletonMap("gender", "f");
439+
440+
OptimizelyUserContext user = optimizely.createUserContext(userId, attributes);
441+
Map<String, OptimizelyDecision> decisions = user.decideForKeys(Arrays.asList(
442+
flagKey1, flagKey2, flagKey3
443+
));
444+
445+
assertEquals(decisions.size(), 3);
446+
447+
ArgumentCaptor<Map> argumentCaptor = ArgumentCaptor.forClass(Map.class);
448+
449+
450+
verify(ups, times(1)).lookup(userId);
451+
verify(ups, times(1)).save(argumentCaptor.capture());
452+
453+
Map<String, Object> savedUps = argumentCaptor.getValue();
454+
UserProfile savedProfile = UserProfileUtils.convertMapToUserProfile(savedUps);
455+
456+
assertEquals(savedProfile.userId, userId);
457+
}
458+
424459
@Test
425460
public void decideAll_allFlags_enabledFlagsOnly() {
426461
String flagKey1 = "feature_1";

core-api/src/test/java/com/optimizely/ab/bucketing/DecisionServiceTest.java

+24
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,30 @@ public void getVariationForFeatureReturnsVariationFromRolloutWhenExperimentFails
493493

494494
//========== getVariationForFeatureList tests ==========//
495495

496+
@Test
497+
public void getVariationsForFeatureListBatchesUpsLoadAndSave() throws Exception {
498+
Bucketer bucketer = new Bucketer();
499+
ErrorHandler mockErrorHandler = mock(ErrorHandler.class);
500+
UserProfileService mockUserProfileService = mock(UserProfileService.class);
501+
502+
DecisionService decisionService = new DecisionService(bucketer, mockErrorHandler, mockUserProfileService);
503+
504+
FeatureFlag featureFlag1 = FEATURE_FLAG_MULTI_VARIATE_FEATURE;
505+
FeatureFlag featureFlag2 = FEATURE_FLAG_MULTI_VARIATE_FUTURE_FEATURE;
506+
FeatureFlag featureFlag3 = FEATURE_FLAG_MUTEX_GROUP_FEATURE;
507+
508+
List<DecisionResponse<FeatureDecision>> decisions = decisionService.getVariationsForFeatureList(
509+
Arrays.asList(featureFlag1, featureFlag2, featureFlag3),
510+
optimizely.createUserContext(genericUserId),
511+
v4ProjectConfig,
512+
new ArrayList<>()
513+
);
514+
515+
assertEquals(decisions.size(), 3);
516+
verify(mockUserProfileService, times(1)).lookup(genericUserId);
517+
verify(mockUserProfileService, times(1)).save(anyObject());
518+
}
519+
496520

497521
//========== getVariationForFeatureInRollout tests ==========//
498522

0 commit comments

Comments
 (0)