37
37
import com .optimizely .ab .event .LogEvent ;
38
38
import com .optimizely .ab .event .internal .EventBuilder ;
39
39
import com .optimizely .ab .event .internal .EventBuilderV2 ;
40
- import com .optimizely .ab .event .internal .payload .Feature ;
41
40
import com .optimizely .ab .internal .LogbackVerifier ;
42
41
import com .optimizely .ab .notification .NotificationListener ;
43
42
import edu .umd .cs .findbugs .annotations .SuppressFBWarnings ;
53
52
import org .mockito .junit .MockitoRule ;
54
53
55
54
import java .io .IOException ;
55
+ import java .util .ArrayList ;
56
56
import java .util .Arrays ;
57
57
import java .util .Collection ;
58
- import java .util .Map ;
58
+ import java .util .Collections ;
59
59
import java .util .HashMap ;
60
60
import java .util .List ;
61
- import java .util .Collections ;
62
- import java .util .ArrayList ;
61
+ import java .util .Map ;
63
62
64
63
import static com .optimizely .ab .config .ProjectConfigTestUtils .noAudienceProjectConfigJsonV2 ;
65
64
import static com .optimizely .ab .config .ProjectConfigTestUtils .noAudienceProjectConfigJsonV3 ;
80
79
import static com .optimizely .ab .config .ValidProjectConfigV4 .EXPERIMENT_MULTIVARIATE_EXPERIMENT_KEY ;
81
80
import static com .optimizely .ab .config .ValidProjectConfigV4 .EXPERIMENT_PAUSED_EXPERIMENT_KEY ;
82
81
import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_FLAG_MULTI_VARIATE_FEATURE ;
82
+ import static com .optimizely .ab .config .ValidProjectConfigV4 .FEATURE_FLAG_SINGLE_VARIABLE_DOUBLE ;
83
83
import 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 ;
85
86
import static com .optimizely .ab .config .ValidProjectConfigV4 .MULTIVARIATE_EXPERIMENT_FORCED_VARIATION_USER_ID_GRED ;
86
87
import 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 ;
88
92
import 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 ;
91
93
import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIATION_MULTIVARIATE_EXPERIMENT_GRED ;
92
94
import static com .optimizely .ab .config .ValidProjectConfigV4 .VARIATION_MULTIVARIATE_EXPERIMENT_GRED_KEY ;
93
95
import static com .optimizely .ab .event .LogEvent .RequestMethod ;
@@ -2504,16 +2506,16 @@ public void getFeatureVariableValueReturnsNullWhenVariableTypeDoesNotMatch() thr
2504
2506
/**
2505
2507
* Verify {@link Optimizely#getFeatureVariableValueForType(String, String, String, Map, LiveVariable.VariableType)}
2506
2508
* 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 .
2508
2510
* @throws ConfigParseException
2509
2511
*/
2510
2512
@ Test
2511
- public void getFeatureVariableValueForTypeReturnsDefaultValueWhenFeatureIsNotAttached () throws ConfigParseException {
2513
+ public void getFeatureVariableValueForTypeReturnsDefaultValueWhenFeatureIsNotAttachedToExperimentOrRollout () throws ConfigParseException {
2512
2514
assumeTrue (datafileVersion >= Integer .parseInt (ProjectConfig .Version .V4 .toString ()));
2513
2515
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 ;
2517
2519
Map <String , String > attributes = Collections .singletonMap (ATTRIBUTE_HOUSE_KEY , AUDIENCE_GRYFFINDOR_VALUE );
2518
2520
2519
2521
Optimizely optimizely = Optimizely .builder (validDatafile , mockEventHandler )
@@ -2525,28 +2527,41 @@ public void getFeatureVariableValueForTypeReturnsDefaultValueWhenFeatureIsNotAtt
2525
2527
validVariableKey ,
2526
2528
genericUserId ,
2527
2529
attributes ,
2528
- LiveVariable .VariableType .STRING );
2530
+ LiveVariable .VariableType .BOOLEAN );
2529
2531
assertEquals (defaultValue , value );
2530
2532
2531
2533
logbackVerifier .expectMessage (
2532
2534
Level .INFO ,
2533
2535
"The feature flag \" " + validFeatureKey + "\" is not used in any experiments."
2534
2536
);
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
+ );
2535
2548
}
2536
2549
2537
2550
/**
2538
2551
* Verify {@link Optimizely#getFeatureVariableValueForType(String, String, String, Map, LiveVariable.VariableType)}
2539
2552
* 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.
2541
2554
* @throws ConfigParseException
2542
2555
*/
2543
2556
@ Test
2544
2557
public void getFeatureVariableValueReturnsDefaultValueWhenFeatureIsAttachedToOneExperimentButFailsTargeting () throws ConfigParseException {
2545
2558
assumeTrue (datafileVersion >= Integer .parseInt (ProjectConfig .Version .V4 .toString ()));
2546
2559
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 ));
2550
2565
2551
2566
Optimizely optimizely = Optimizely .builder (validDatafile , mockEventHandler )
2552
2567
.withConfig (validProjectConfig )
@@ -2556,16 +2571,26 @@ public void getFeatureVariableValueReturnsDefaultValueWhenFeatureIsAttachedToOne
2556
2571
validFeatureKey ,
2557
2572
validVariableKey ,
2558
2573
genericUserId ,
2559
- Collections .singletonMap (ATTRIBUTE_HOUSE_KEY , "Slytherin " ),
2560
- LiveVariable .VariableType .STRING
2574
+ Collections .singletonMap (ATTRIBUTE_HOUSE_KEY , "Ravenclaw " ),
2575
+ LiveVariable .VariableType .DOUBLE
2561
2576
);
2562
2577
assertEquals (expectedValue , valueWithImproperAttributes );
2563
2578
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
+ );
2564
2588
logbackVerifier .expectMessage (
2565
2589
Level .INFO ,
2566
2590
"User \" " + genericUserId +
2567
2591
"\" 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."
2569
2594
);
2570
2595
}
2571
2596
0 commit comments