@@ -1173,6 +1173,26 @@ def test_get_variation__invalid_object(self):
1173
1173
1174
1174
mock_logging .assert_called_once_with (enums .LogLevels .ERROR , 'Datafile has invalid format. Failing "get_variation".' )
1175
1175
1176
+ def test_is_feature_enabled__returns_false_for_none_feature_key (self ):
1177
+ """ Test that is_feature_enabled returns false if the provided feature key is None. """
1178
+
1179
+ opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
1180
+
1181
+ with mock .patch ('optimizely.logger.NoOpLogger.log' ) as mock_logger :
1182
+ self .assertFalse (opt_obj .is_feature_enabled (None , 'test_user' ))
1183
+
1184
+ mock_logger .assert_called_once_with (enums .LogLevels .ERROR , enums .Errors .NONE_FEATURE_KEY_PARAMETER )
1185
+
1186
+ def test_is_feature_enabled__returns_false_for_none_user_id (self ):
1187
+ """ Test that is_feature_enabled returns false if the provided user ID is None. """
1188
+
1189
+ opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
1190
+
1191
+ with mock .patch ('optimizely.logger.NoOpLogger.log' ) as mock_logger :
1192
+ self .assertFalse (opt_obj .is_feature_enabled ('feature_key' , None ))
1193
+
1194
+ mock_logger .assert_called_once_with (enums .LogLevels .ERROR , enums .Errors .NONE_USER_ID_PARAMETER )
1195
+
1176
1196
def test_is_feature_enabled__returns_false_for_invalid_feature (self ):
1177
1197
""" Test that the feature is not enabled for the user if the provided feature key is invalid. """
1178
1198
@@ -1449,6 +1469,54 @@ def test_get_feature_variable__returns_default_value(self):
1449
1469
'Returning default value for variable "environment" of feature flag "test_feature_in_experiment".'
1450
1470
)
1451
1471
1472
+ def test_get_feature_variable__returns_none_if_none_feature_key (self ):
1473
+ """ Test that get_feature_variable_* returns None for None feature key. """
1474
+
1475
+ opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
1476
+ with mock .patch ('optimizely.logger.NoOpLogger.log' ) as mock_logger :
1477
+ self .assertIsNone (opt_obj .get_feature_variable_boolean (None , 'variable_key' , 'test_user' ))
1478
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_FEATURE_KEY_PARAMETER )
1479
+ self .assertIsNone (opt_obj .get_feature_variable_double (None , 'variable_key' , 'test_user' ))
1480
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_FEATURE_KEY_PARAMETER )
1481
+ self .assertIsNone (opt_obj .get_feature_variable_integer (None , 'variable_key' , 'test_user' ))
1482
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_FEATURE_KEY_PARAMETER )
1483
+ self .assertIsNone (opt_obj .get_feature_variable_string (None , 'variable_key' , 'test_user' ))
1484
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_FEATURE_KEY_PARAMETER )
1485
+
1486
+ self .assertEqual (4 , mock_logger .call_count )
1487
+
1488
+ def test_get_feature_variable__returns_none_if_none_variable_key (self ):
1489
+ """ Test that get_feature_variable_* returns None for None variable key. """
1490
+
1491
+ opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
1492
+ with mock .patch ('optimizely.logger.NoOpLogger.log' ) as mock_logger :
1493
+ self .assertIsNone (opt_obj .get_feature_variable_boolean ('feature_key' , None , 'test_user' ))
1494
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_VARIABLE_KEY_PARAMETER )
1495
+ self .assertIsNone (opt_obj .get_feature_variable_double ('feature_key' , None , 'test_user' ))
1496
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_VARIABLE_KEY_PARAMETER )
1497
+ self .assertIsNone (opt_obj .get_feature_variable_integer ('feature_key' , None , 'test_user' ))
1498
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_VARIABLE_KEY_PARAMETER )
1499
+ self .assertIsNone (opt_obj .get_feature_variable_string ('feature_key' , None , 'test-User' ))
1500
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_VARIABLE_KEY_PARAMETER )
1501
+
1502
+ self .assertEqual (4 , mock_logger .call_count )
1503
+
1504
+ def test_get_feature_variable__returns_none_if_none_user_id (self ):
1505
+ """ Test that get_feature_variable_* returns None for None user ID. """
1506
+
1507
+ opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
1508
+ with mock .patch ('optimizely.logger.NoOpLogger.log' ) as mock_logger :
1509
+ self .assertIsNone (opt_obj .get_feature_variable_boolean ('feature_key' , 'variable_key' , None ))
1510
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_USER_ID_PARAMETER )
1511
+ self .assertIsNone (opt_obj .get_feature_variable_double ('feature_key' , 'variable_key' , None ))
1512
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_USER_ID_PARAMETER )
1513
+ self .assertIsNone (opt_obj .get_feature_variable_integer ('feature_key' , 'variable_key' , None ))
1514
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_USER_ID_PARAMETER )
1515
+ self .assertIsNone (opt_obj .get_feature_variable_string ('feature_key' , 'variable_key' , None ))
1516
+ mock_logger .assert_called_with (enums .LogLevels .ERROR , enums .Errors .NONE_USER_ID_PARAMETER )
1517
+
1518
+ self .assertEqual (4 , mock_logger .call_count )
1519
+
1452
1520
def test_get_feature_variable__returns_none_if_invalid_feature_key (self ):
1453
1521
""" Test that get_feature_variable_* returns None for invalid feature key. """
1454
1522
0 commit comments