@@ -1173,6 +1173,26 @@ def test_get_variation__invalid_object(self):
11731173
11741174 mock_logging .assert_called_once_with (enums .LogLevels .ERROR , 'Datafile has invalid format. Failing "get_variation".' )
11751175
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+
11761196 def test_is_feature_enabled__returns_false_for_invalid_feature (self ):
11771197 """ Test that the feature is not enabled for the user if the provided feature key is invalid. """
11781198
@@ -1449,6 +1469,54 @@ def test_get_feature_variable__returns_default_value(self):
14491469 'Returning default value for variable "environment" of feature flag "test_feature_in_experiment".'
14501470 )
14511471
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+
14521520 def test_get_feature_variable__returns_none_if_invalid_feature_key (self ):
14531521 """ Test that get_feature_variable_* returns None for invalid feature key. """
14541522
0 commit comments