Skip to content

Commit 4f60179

Browse files
committed
add test to make sure we continue evaluating more rules when we fail audience targeting in fallback strategy
1 parent 8c5e506 commit 4f60179

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,44 @@ public void getVariationForFeatureInRolloutReturnsVariationWhenUserFailsTrafficI
611611
verify(mockBucketer, times(2)).bucket(any(Experiment.class), anyString());
612612
}
613613

614+
/**
615+
* Verify that {@link DecisionService#getVariationForFeatureInRollout(FeatureFlag, String, Map)}
616+
* returns the variation of "English Citizens" rule
617+
* when the user fails targeting for previous rules, but passes targeting and traffic for Rule 3.
618+
*/
619+
@Test
620+
public void getVariationForFeatureInRolloutReturnsVariationWhenUserFailsTargetingInPreviousRulesButPassesRule3() {
621+
Bucketer mockBucketer = mock(Bucketer.class);
622+
Rollout rollout = ROLLOUT_2;
623+
Experiment englishCitizensRule = rollout.getExperiments().get(2);
624+
Variation englishCitizenVariation = englishCitizensRule.getVariations().get(0);
625+
Experiment everyoneElseRule = rollout.getExperiments().get(rollout.getExperiments().size() - 1);
626+
Variation everyoneElseVariation = everyoneElseRule.getVariations().get(0);
627+
when(mockBucketer.bucket(any(Experiment.class), anyString())).thenReturn(null);
628+
when(mockBucketer.bucket(eq(everyoneElseRule), anyString())).thenReturn(everyoneElseVariation);
629+
when(mockBucketer.bucket(eq(englishCitizensRule), anyString())).thenReturn(englishCitizenVariation);
630+
631+
DecisionService decisionService = new DecisionService(
632+
mockBucketer,
633+
mockErrorHandler,
634+
v4ProjectConfig,
635+
null
636+
);
637+
638+
assertEquals(englishCitizenVariation,
639+
decisionService.getVariationForFeatureInRollout(
640+
FEATURE_FLAG_MULTI_VARIATE_FEATURE,
641+
genericUserId,
642+
Collections.singletonMap(
643+
ATTRIBUTE_NATIONALITY_KEY, AUDIENCE_ENGLISH_CITIZENS_VALUE
644+
)
645+
)
646+
);
647+
648+
// verify user is only bucketed once for everyone else rule
649+
verify(mockBucketer, times(1)).bucket(any(Experiment.class), anyString());
650+
}
651+
614652
//========= white list tests ==========/
615653

616654
/**

0 commit comments

Comments
 (0)