@@ -834,7 +834,8 @@ class InvalidErrorHandler; end
834834 expect ( spy_logger ) . to have_received ( :log ) . once . with ( Logger ::INFO , "Feature 'multi_variate_feature' is enabled for user 'test_user'." )
835835 end
836836
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 ) )
838839 experiment_to_return = config_body [ 'experiments' ] [ 3 ]
839840 variation_to_return = experiment_to_return [ 'variations' ] [ 1 ]
840841 decision_to_return = Optimizely ::DecisionService ::Decision . new (
@@ -846,6 +847,7 @@ class InvalidErrorHandler; end
846847 allow ( project_instance . decision_service ) . to receive ( :get_variation_for_feature ) . and_return ( decision_to_return )
847848
848849 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
849851 expect ( spy_logger ) . to have_received ( :log ) . once . with ( Logger ::INFO , "Feature 'multi_variate_feature' is not enabled for user 'test_user'." )
850852 end
851853 end
@@ -893,6 +895,17 @@ class InvalidErrorHandler; end
893895 user_id = 'test_user'
894896 user_attributes = { }
895897
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+
896909 describe 'when the feature flag is enabled for the user' do
897910 describe 'and a variable usage instance is not found' do
898911 it 'should return the default variable value' do
@@ -1027,6 +1040,17 @@ class InvalidErrorHandler; end
10271040 user_id = 'test_user'
10281041 user_attributes = { }
10291042
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+
10301054 it 'should return the variable value for the variation for the user is bucketed into' do
10311055 boolean_feature = project_instance . config . feature_flag_key_map [ 'boolean_single_variable_feature' ]
10321056 rollout = project_instance . config . rollout_id_map [ boolean_feature [ 'rolloutId' ] ]
@@ -1053,6 +1077,17 @@ class InvalidErrorHandler; end
10531077 user_id = 'test_user'
10541078 user_attributes = { }
10551079
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+
10561091 it 'should return the variable value for the variation for the user is bucketed into' do
10571092 double_feature = project_instance . config . feature_flag_key_map [ 'double_single_variable_feature' ]
10581093 experiment_to_return = project_instance . config . experiment_id_map [ double_feature [ 'experimentIds' ] [ 0 ] ]
@@ -1080,6 +1115,17 @@ class InvalidErrorHandler; end
10801115 user_id = 'test_user'
10811116 user_attributes = { }
10821117
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+
10831129 it 'should return the variable value for the variation for the user is bucketed into' do
10841130 integer_feature = project_instance . config . feature_flag_key_map [ 'integer_single_variable_feature' ]
10851131 experiment_to_return = project_instance . config . experiment_id_map [ integer_feature [ 'experimentIds' ] [ 0 ] ]
0 commit comments