@@ -834,7 +834,8 @@ class InvalidErrorHandler; end
834
834
expect ( spy_logger ) . to have_received ( :log ) . once . with ( Logger ::INFO , "Feature 'multi_variate_feature' is enabled for user 'test_user'." )
835
835
end
836
836
837
- it 'should return false, if the user is bucketed into a feature experiment but the featureEnabled property is false' do
837
+ it 'should return false and send impression if the user is bucketed into a feature experiment but the featureEnabled property is false' do
838
+ allow ( project_instance . event_dispatcher ) . to receive ( :dispatch_event ) . with ( instance_of ( Optimizely ::Event ) )
838
839
experiment_to_return = config_body [ 'experiments' ] [ 3 ]
839
840
variation_to_return = experiment_to_return [ 'variations' ] [ 1 ]
840
841
decision_to_return = Optimizely ::DecisionService ::Decision . new (
@@ -846,6 +847,7 @@ class InvalidErrorHandler; end
846
847
allow ( project_instance . decision_service ) . to receive ( :get_variation_for_feature ) . and_return ( decision_to_return )
847
848
848
849
expect ( project_instance . is_feature_enabled ( 'multi_variate_feature' , 'test_user' ) ) . to be false
850
+ expect ( project_instance . event_dispatcher ) . to have_received ( :dispatch_event ) . with ( instance_of ( Optimizely ::Event ) ) . once
849
851
expect ( spy_logger ) . to have_received ( :log ) . once . with ( Logger ::INFO , "Feature 'multi_variate_feature' is not enabled for user 'test_user'." )
850
852
end
851
853
end
@@ -893,6 +895,17 @@ class InvalidErrorHandler; end
893
895
user_id = 'test_user'
894
896
user_attributes = { }
895
897
898
+ it 'should return nil when called with invalid project config' do
899
+ logger = double ( 'logger' )
900
+ allow ( logger ) . to receive ( :log )
901
+ allow ( Optimizely ::SimpleLogger ) . to receive ( :new ) { logger }
902
+ invalid_project = Optimizely ::Project . new ( 'invalid' , nil , spy_logger )
903
+ expect ( invalid_project . get_feature_variable_string ( 'string_single_variable_feature' , 'string_variable' , user_id , user_attributes ) )
904
+ . to eq ( nil )
905
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format.' )
906
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format. Aborting get_feature_variable_string.' )
907
+ end
908
+
896
909
describe 'when the feature flag is enabled for the user' do
897
910
describe 'and a variable usage instance is not found' do
898
911
it 'should return the default variable value' do
@@ -1027,6 +1040,17 @@ class InvalidErrorHandler; end
1027
1040
user_id = 'test_user'
1028
1041
user_attributes = { }
1029
1042
1043
+ it 'should return nil when called with invalid project config' do
1044
+ logger = double ( 'logger' )
1045
+ allow ( logger ) . to receive ( :log )
1046
+ allow ( Optimizely ::SimpleLogger ) . to receive ( :new ) { logger }
1047
+ invalid_project = Optimizely ::Project . new ( 'invalid' , nil , spy_logger )
1048
+ expect ( invalid_project . get_feature_variable_boolean ( 'boolean_single_variable_feature' , 'boolean_variable' , user_id , user_attributes ) )
1049
+ . to eq ( nil )
1050
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format.' )
1051
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format. Aborting get_feature_variable_boolean.' )
1052
+ end
1053
+
1030
1054
it 'should return the variable value for the variation for the user is bucketed into' do
1031
1055
boolean_feature = project_instance . config . feature_flag_key_map [ 'boolean_single_variable_feature' ]
1032
1056
rollout = project_instance . config . rollout_id_map [ boolean_feature [ 'rolloutId' ] ]
@@ -1053,6 +1077,17 @@ class InvalidErrorHandler; end
1053
1077
user_id = 'test_user'
1054
1078
user_attributes = { }
1055
1079
1080
+ it 'should return nil when called with invalid project config' do
1081
+ logger = double ( 'logger' )
1082
+ allow ( logger ) . to receive ( :log )
1083
+ allow ( Optimizely ::SimpleLogger ) . to receive ( :new ) { logger }
1084
+ invalid_project = Optimizely ::Project . new ( 'invalid' , nil , spy_logger )
1085
+ expect ( invalid_project . get_feature_variable_double ( 'double_single_variable_feature' , 'double_variable' , user_id , user_attributes ) )
1086
+ . to eq ( nil )
1087
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format.' )
1088
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format. Aborting get_feature_variable_double.' )
1089
+ end
1090
+
1056
1091
it 'should return the variable value for the variation for the user is bucketed into' do
1057
1092
double_feature = project_instance . config . feature_flag_key_map [ 'double_single_variable_feature' ]
1058
1093
experiment_to_return = project_instance . config . experiment_id_map [ double_feature [ 'experimentIds' ] [ 0 ] ]
@@ -1080,6 +1115,17 @@ class InvalidErrorHandler; end
1080
1115
user_id = 'test_user'
1081
1116
user_attributes = { }
1082
1117
1118
+ it 'should return nil when called with invalid project config' do
1119
+ logger = double ( 'logger' )
1120
+ allow ( logger ) . to receive ( :log )
1121
+ allow ( Optimizely ::SimpleLogger ) . to receive ( :new ) { logger }
1122
+ invalid_project = Optimizely ::Project . new ( 'invalid' , nil , spy_logger )
1123
+ expect ( invalid_project . get_feature_variable_integer ( 'integer_single_variable_feature' , 'integer_variable' , user_id , user_attributes ) )
1124
+ . to eq ( nil )
1125
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format.' )
1126
+ expect ( logger ) . to have_received ( :log ) . once . with ( Logger ::ERROR , 'Provided datafile is in an invalid format. Aborting get_feature_variable_integer.' )
1127
+ end
1128
+
1083
1129
it 'should return the variable value for the variation for the user is bucketed into' do
1084
1130
integer_feature = project_instance . config . feature_flag_key_map [ 'integer_single_variable_feature' ]
1085
1131
experiment_to_return = project_instance . config . experiment_id_map [ integer_feature [ 'experimentIds' ] [ 0 ] ]
0 commit comments