Skip to content

Commit b65274c

Browse files
committed
add test to make sure we continue evaluating more rules when we fail audience targeting in fallback strategy
1 parent c7533d6 commit b65274c

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
@@ -474,6 +474,44 @@ public void getVariationForFeatureInRolloutReturnsVariationWhenUserFailsTrafficI
474474
verify(mockBucketer, times(2)).bucket(any(Experiment.class), anyString());
475475
}
476476

477+
/**
478+
* Verify that {@link DecisionService#getVariationForFeatureInRollout(FeatureFlag, String, Map)}
479+
* returns the variation of "English Citizens" rule
480+
* when the user fails targeting for previous rules, but passes targeting and traffic for Rule 3.
481+
*/
482+
@Test
483+
public void getVariationForFeatureInRolloutReturnsVariationWhenUserFailsTargetingInPreviousRulesButPassesRule3() {
484+
Bucketer mockBucketer = mock(Bucketer.class);
485+
Rollout rollout = ROLLOUT_2;
486+
Experiment englishCitizensRule = rollout.getExperiments().get(2);
487+
Variation englishCitizenVariation = englishCitizensRule.getVariations().get(0);
488+
Experiment everyoneElseRule = rollout.getExperiments().get(rollout.getExperiments().size() - 1);
489+
Variation everyoneElseVariation = everyoneElseRule.getVariations().get(0);
490+
when(mockBucketer.bucket(any(Experiment.class), anyString())).thenReturn(null);
491+
when(mockBucketer.bucket(eq(everyoneElseRule), anyString())).thenReturn(everyoneElseVariation);
492+
when(mockBucketer.bucket(eq(englishCitizensRule), anyString())).thenReturn(englishCitizenVariation);
493+
494+
DecisionService decisionService = new DecisionService(
495+
mockBucketer,
496+
mockErrorHandler,
497+
v4ProjectConfig,
498+
null
499+
);
500+
501+
assertEquals(englishCitizenVariation,
502+
decisionService.getVariationForFeatureInRollout(
503+
FEATURE_FLAG_MULTI_VARIATE_FEATURE,
504+
genericUserId,
505+
Collections.singletonMap(
506+
ATTRIBUTE_NATIONALITY_KEY, AUDIENCE_ENGLISH_CITIZENS_VALUE
507+
)
508+
)
509+
);
510+
511+
// verify user is only bucketed once for everyone else rule
512+
verify(mockBucketer, times(1)).bucket(any(Experiment.class), anyString());
513+
}
514+
477515
//========= white list tests ==========/
478516

479517
/**

0 commit comments

Comments
 (0)