3737import com .optimizely .ab .event .LogEvent ;
3838import com .optimizely .ab .event .internal .EventBuilder ;
3939import com .optimizely .ab .event .internal .EventBuilderV2 ;
40- import com .optimizely .ab .event .internal .payload .Feature ;
4140import com .optimizely .ab .internal .LogbackVerifier ;
4241import com .optimizely .ab .notification .NotificationListener ;
4342import edu .umd .cs .findbugs .annotations .SuppressFBWarnings ;
5352import org .mockito .junit .MockitoRule ;
5453
5554import java .io .IOException ;
55+ import java .util .ArrayList ;
5656import java .util .Arrays ;
5757import java .util .Collection ;
58- import java .util .Map ;
58+ import java .util .Collections ;
5959import java .util .HashMap ;
6060import java .util .List ;
61- import java .util .Collections ;
62- import java .util .ArrayList ;
61+ import java .util .Map ;
6362
6463import static com .optimizely .ab .config .ProjectConfigTestUtils .noAudienceProjectConfigJsonV2 ;
6564import static com .optimizely .ab .config .ProjectConfigTestUtils .noAudienceProjectConfigJsonV3 ;
8079import static com .optimizely .ab .config .ValidProjectConfigV4 .EXPERIMENT_MULTIVARIATE_EXPERIMENT_KEY ;
8180import static com .optimizely .ab .config .ValidProjectConfigV4 .EXPERIMENT_PAUSED_EXPERIMENT_KEY ;
8281import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_FLAG_MULTI_VARIATE_FEATURE ;
82+ import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_FLAG_SINGLE_VARIABLE_DOUBLE ;
8383import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_MULTI_VARIATE_FEATURE_KEY ;
84- import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_SINGLE_VARIABLE_STRING_KEY ;
84+ import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_SINGLE_VARIABLE_BOOLEAN_KEY ;
85+ import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_SINGLE_VARIABLE_DOUBLE_KEY ;
8586import static com .optimizely .ab .config .ValidProjectConfigV4 .MULTIVARIATE_EXPERIMENT_FORCED_VARIATION_USER_ID_GRED ;
8687import static com .optimizely .ab .config .ValidProjectConfigV4 .PAUSED_EXPERIMENT_FORCED_VARIATION_USER_ID_CONTROL ;
87- import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_FIRST_LETTER_DEFAULT_VALUE ;
88+ import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_BOOLEAN_VARIABLE_DEFAULT_VALUE ;
89+ import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_BOOLEAN_VARIABLE_KEY ;
90+ import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_DOUBLE_DEFAULT_VALUE ;
91+ import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_DOUBLE_VARIABLE_KEY ;
8892import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_FIRST_LETTER_KEY ;
89- import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_STRING_VARIABLE_DEFAULT_VALUE ;
90- import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIABLE_STRING_VARIABLE_KEY ;
9193import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIATION_MULTIVARIATE_EXPERIMENT_GRED ;
9294import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIATION_MULTIVARIATE_EXPERIMENT_GRED_KEY ;
9395import static com .optimizely .ab .event .LogEvent .RequestMethod ;
@@ -2504,16 +2506,16 @@ public void getFeatureVariableValueReturnsNullWhenVariableTypeDoesNotMatch() thr
25042506 /**
25052507 * Verify {@link Optimizely#getFeatureVariableValueForType(String, String, String, Map, LiveVariable.VariableType)}
25062508 * returns the String default value of a live variable
2507- * when the feature is not attached to an experiment.
2509+ * when the feature is not attached to an experiment or a rollout .
25082510 * @throws ConfigParseException
25092511 */
25102512 @ Test
2511- public void getFeatureVariableValueForTypeReturnsDefaultValueWhenFeatureIsNotAttached () throws ConfigParseException {
2513+ public void getFeatureVariableValueForTypeReturnsDefaultValueWhenFeatureIsNotAttachedToExperimentOrRollout () throws ConfigParseException {
25122514 assumeTrue (datafileVersion >= Integer .parseInt (ProjectConfig .Version .V4 .toString ()));
25132515
2514- String validFeatureKey = FEATURE_SINGLE_VARIABLE_STRING_KEY ;
2515- String validVariableKey = VARIABLE_STRING_VARIABLE_KEY ;
2516- String defaultValue = VARIABLE_STRING_VARIABLE_DEFAULT_VALUE ;
2516+ String validFeatureKey = FEATURE_SINGLE_VARIABLE_BOOLEAN_KEY ;
2517+ String validVariableKey = VARIABLE_BOOLEAN_VARIABLE_KEY ;
2518+ String defaultValue = VARIABLE_BOOLEAN_VARIABLE_DEFAULT_VALUE ;
25172519 Map <String , String > attributes = Collections .singletonMap (ATTRIBUTE_HOUSE_KEY , AUDIENCE_GRYFFINDOR_VALUE );
25182520
25192521 Optimizely optimizely = Optimizely .builder (validDatafile , mockEventHandler )
@@ -2525,28 +2527,41 @@ public void getFeatureVariableValueForTypeReturnsDefaultValueWhenFeatureIsNotAtt
25252527 validVariableKey ,
25262528 genericUserId ,
25272529 attributes ,
2528- LiveVariable .VariableType .STRING );
2530+ LiveVariable .VariableType .BOOLEAN );
25292531 assertEquals (defaultValue , value );
25302532
25312533 logbackVerifier .expectMessage (
25322534 Level .INFO ,
25332535 "The feature flag \" " + validFeatureKey + "\" is not used in any experiments."
25342536 );
2537+ logbackVerifier .expectMessage (
2538+ Level .INFO ,
2539+ "The feature flag \" " + validFeatureKey + "\" is not used in a rollout."
2540+ );
2541+ logbackVerifier .expectMessage (
2542+ Level .INFO ,
2543+ "User \" " + genericUserId + "\" was not bucketed into any variation for feature flag \" " +
2544+ validFeatureKey + "\" . The default value \" " +
2545+ defaultValue + "\" for \" " +
2546+ validVariableKey + "\" is being returned."
2547+ );
25352548 }
25362549
25372550 /**
25382551 * Verify {@link Optimizely#getFeatureVariableValueForType(String, String, String, Map, LiveVariable.VariableType)}
25392552 * returns the String default value for a live variable
2540- * when the feature is attached to an experiment, but the user is excluded from the experiment.
2553+ * when the feature is attached to an experiment and no rollout , but the user is excluded from the experiment.
25412554 * @throws ConfigParseException
25422555 */
25432556 @ Test
25442557 public void getFeatureVariableValueReturnsDefaultValueWhenFeatureIsAttachedToOneExperimentButFailsTargeting () throws ConfigParseException {
25452558 assumeTrue (datafileVersion >= Integer .parseInt (ProjectConfig .Version .V4 .toString ()));
25462559
2547- String validFeatureKey = FEATURE_MULTI_VARIATE_FEATURE_KEY ;
2548- String validVariableKey = VARIABLE_FIRST_LETTER_KEY ;
2549- String expectedValue = VARIABLE_FIRST_LETTER_DEFAULT_VALUE ;
2560+ String validFeatureKey = FEATURE_SINGLE_VARIABLE_DOUBLE_KEY ;
2561+ String validVariableKey = VARIABLE_DOUBLE_VARIABLE_KEY ;
2562+ String expectedValue = VARIABLE_DOUBLE_DEFAULT_VALUE ;
2563+ FeatureFlag featureFlag = FEATURE_FLAG_SINGLE_VARIABLE_DOUBLE ;
2564+ Experiment experiment = validProjectConfig .getExperimentIdMapping ().get (featureFlag .getExperimentIds ().get (0 ));
25502565
25512566 Optimizely optimizely = Optimizely .builder (validDatafile , mockEventHandler )
25522567 .withConfig (validProjectConfig )
@@ -2556,16 +2571,26 @@ public void getFeatureVariableValueReturnsDefaultValueWhenFeatureIsAttachedToOne
25562571 validFeatureKey ,
25572572 validVariableKey ,
25582573 genericUserId ,
2559- Collections .singletonMap (ATTRIBUTE_HOUSE_KEY , "Slytherin " ),
2560- LiveVariable .VariableType .STRING
2574+ Collections .singletonMap (ATTRIBUTE_HOUSE_KEY , "Ravenclaw " ),
2575+ LiveVariable .VariableType .DOUBLE
25612576 );
25622577 assertEquals (expectedValue , valueWithImproperAttributes );
25632578
2579+ logbackVerifier .expectMessage (
2580+ Level .INFO ,
2581+ "User \" " + genericUserId + "\" does not meet conditions to be in experiment \" " +
2582+ experiment .getKey () + "\" ."
2583+ );
2584+ logbackVerifier .expectMessage (
2585+ Level .INFO ,
2586+ "The feature flag \" " + validFeatureKey + "\" is not used in a rollout."
2587+ );
25642588 logbackVerifier .expectMessage (
25652589 Level .INFO ,
25662590 "User \" " + genericUserId +
25672591 "\" was not bucketed into any variation for feature flag \" " + validFeatureKey +
2568- "\" . The default value is being returned."
2592+ "\" . The default value \" " + expectedValue +
2593+ "\" for \" " + validVariableKey + "\" is being returned."
25692594 );
25702595 }
25712596
0 commit comments