@@ -1285,12 +1285,8 @@ def test_track__invalid_user_id(self):
1285
1285
""" Test that None is returned and expected log messages are logged during track \
1286
1286
when user_id is in invalid format. """
1287
1287
1288
- with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging , \
1289
- mock .patch ('optimizely.helpers.validator.is_non_empty_string' , side_effect = [True , False ]) as mock_validator :
1288
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
1290
1289
self .assertIsNone (self .optimizely .track ('test_event' , 99 ))
1291
-
1292
- mock_validator .assert_any_call (99 )
1293
-
1294
1290
mock_client_logging .error .assert_called_once_with ('Provided "user_id" is in an invalid format.' )
1295
1291
1296
1292
def test_get_variation__invalid_object (self ):
@@ -1329,11 +1325,8 @@ def test_is_feature_enabled__returns_false_for_invalid_user_id(self):
1329
1325
1330
1326
opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
1331
1327
1332
- with mock .patch .object (opt_obj , 'logger' ) as mock_client_logging ,\
1333
- mock .patch ('optimizely.helpers.validator.is_non_empty_string' , side_effect = [True , False ]) as mock_validator :
1328
+ with mock .patch .object (opt_obj , 'logger' ) as mock_client_logging :
1334
1329
self .assertFalse (opt_obj .is_feature_enabled ('feature_key' , 1.2 ))
1335
-
1336
- mock_validator .assert_any_call (1.2 )
1337
1330
mock_client_logging .error .assert_called_with ('Provided "user_id" is in an invalid format.' )
1338
1331
1339
1332
def test_is_feature_enabled__returns_false_for__invalid_attributes (self ):
@@ -1628,11 +1621,9 @@ def side_effect(*args, **kwargs):
1628
1621
mock_is_feature_enabled .assert_any_call ('test_feature_in_experiment_and_rollout' , 'user_1' , None )
1629
1622
1630
1623
def test_get_enabled_features_invalid_user_id (self ):
1631
- with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging , \
1632
- mock .patch ('optimizely.helpers.validator.is_non_empty_string' , return_value = False ) as mock_validator :
1633
- self .optimizely .get_enabled_features (1.2 )
1624
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
1625
+ self .assertEqual ([], self .optimizely .get_enabled_features (1.2 ))
1634
1626
1635
- mock_validator .assert_any_call (1.2 )
1636
1627
mock_client_logging .error .assert_called_once_with ('Provided "user_id" is in an invalid format.' )
1637
1628
1638
1629
def test_get_enabled_features__invalid_attributes (self ):
@@ -1853,22 +1844,22 @@ def test_get_feature_variable__returns_none_if_none_feature_key(self):
1853
1844
with mock .patch .object (opt_obj , 'logger' ) as mock_client_logger :
1854
1845
# Check for booleans
1855
1846
self .assertIsNone (opt_obj .get_feature_variable_boolean (None , 'variable_key' , 'test_user' ))
1856
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_FEATURE_KEY_PARAMETER )
1847
+ mock_client_logger .error .assert_called_with ('Provided "feature_key" is in an invalid format.' )
1857
1848
mock_client_logger .reset_mock ()
1858
1849
1859
1850
# Check for doubles
1860
1851
self .assertIsNone (opt_obj .get_feature_variable_double (None , 'variable_key' , 'test_user' ))
1861
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_FEATURE_KEY_PARAMETER )
1852
+ mock_client_logger .error .assert_called_with ('Provided "feature_key" is in an invalid format.' )
1862
1853
mock_client_logger .reset_mock ()
1863
1854
1864
1855
# Check for integers
1865
1856
self .assertIsNone (opt_obj .get_feature_variable_integer (None , 'variable_key' , 'test_user' ))
1866
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_FEATURE_KEY_PARAMETER )
1857
+ mock_client_logger .error .assert_called_with ('Provided "feature_key" is in an invalid format.' )
1867
1858
mock_client_logger .reset_mock ()
1868
1859
1869
1860
# Check for strings
1870
1861
self .assertIsNone (opt_obj .get_feature_variable_string (None , 'variable_key' , 'test_user' ))
1871
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_FEATURE_KEY_PARAMETER )
1862
+ mock_client_logger .error .assert_called_with ('Provided "feature_key" is in an invalid format.' )
1872
1863
mock_client_logger .reset_mock ()
1873
1864
1874
1865
def test_get_feature_variable__returns_none_if_none_variable_key (self ):
@@ -1878,22 +1869,22 @@ def test_get_feature_variable__returns_none_if_none_variable_key(self):
1878
1869
with mock .patch .object (opt_obj , 'logger' ) as mock_client_logger :
1879
1870
# Check for booleans
1880
1871
self .assertIsNone (opt_obj .get_feature_variable_boolean ('feature_key' , None , 'test_user' ))
1881
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_VARIABLE_KEY_PARAMETER )
1872
+ mock_client_logger .error .assert_called_with ('Provided "variable_key" is in an invalid format.' )
1882
1873
mock_client_logger .reset_mock ()
1883
1874
1884
1875
# Check for doubles
1885
1876
self .assertIsNone (opt_obj .get_feature_variable_double ('feature_key' , None , 'test_user' ))
1886
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_VARIABLE_KEY_PARAMETER )
1877
+ mock_client_logger .error .assert_called_with ('Provided "variable_key" is in an invalid format.' )
1887
1878
mock_client_logger .reset_mock ()
1888
1879
1889
1880
# Check for integers
1890
1881
self .assertIsNone (opt_obj .get_feature_variable_integer ('feature_key' , None , 'test_user' ))
1891
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_VARIABLE_KEY_PARAMETER )
1882
+ mock_client_logger .error .assert_called_with ('Provided "variable_key" is in an invalid format.' )
1892
1883
mock_client_logger .reset_mock ()
1893
1884
1894
1885
# Check for strings
1895
1886
self .assertIsNone (opt_obj .get_feature_variable_string ('feature_key' , None , 'test-User' ))
1896
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_VARIABLE_KEY_PARAMETER )
1887
+ mock_client_logger .error .assert_called_with ('Provided "variable_key" is in an invalid format.' )
1897
1888
mock_client_logger .reset_mock ()
1898
1889
1899
1890
def test_get_feature_variable__returns_none_if_none_user_id (self ):
@@ -1903,22 +1894,22 @@ def test_get_feature_variable__returns_none_if_none_user_id(self):
1903
1894
with mock .patch .object (opt_obj , 'logger' ) as mock_client_logger :
1904
1895
# Check for booleans
1905
1896
self .assertIsNone (opt_obj .get_feature_variable_boolean ('feature_key' , 'variable_key' , None ))
1906
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_USER_ID_PARAMETER )
1897
+ mock_client_logger .error .assert_called_with ('Provided "user_id" is in an invalid format.' )
1907
1898
mock_client_logger .reset_mock ()
1908
1899
1909
1900
# Check for doubles
1910
1901
self .assertIsNone (opt_obj .get_feature_variable_double ('feature_key' , 'variable_key' , None ))
1911
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_USER_ID_PARAMETER )
1902
+ mock_client_logger .error .assert_called_with ('Provided "user_id" is in an invalid format.' )
1912
1903
mock_client_logger .reset_mock ()
1913
1904
1914
1905
# Check for integers
1915
1906
self .assertIsNone (opt_obj .get_feature_variable_integer ('feature_key' , 'variable_key' , None ))
1916
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_USER_ID_PARAMETER )
1907
+ mock_client_logger .error .assert_called_with ('Provided "user_id" is in an invalid format.' )
1917
1908
mock_client_logger .reset_mock ()
1918
1909
1919
1910
# Check for strings
1920
1911
self .assertIsNone (opt_obj .get_feature_variable_string ('feature_key' , 'variable_key' , None ))
1921
- mock_client_logger .error .assert_called_with (enums . Errors . NONE_USER_ID_PARAMETER )
1912
+ mock_client_logger .error .assert_called_with ('Provided "user_id" is in an invalid format.' )
1922
1913
mock_client_logger .reset_mock ()
1923
1914
1924
1915
def test_get_feature_variable__invalid_attributes (self ):
@@ -2246,11 +2237,8 @@ def test_get_variation__invalid_user_id(self):
2246
2237
""" Test that None is returned and expected log messages are logged during get_variation \
2247
2238
when user_id is in invalid format. """
2248
2239
2249
- with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging ,\
2250
- mock .patch ('optimizely.helpers.validator.is_non_empty_string' , side_effect = [True , False ]) as mock_validator :
2240
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
2251
2241
self .assertIsNone (self .optimizely .get_variation ('test_experiment' , 99 ))
2252
-
2253
- mock_validator .assert_any_call (99 )
2254
2242
mock_client_logging .error .assert_called_once_with ('Provided "user_id" is in an invalid format.' )
2255
2243
2256
2244
def test_activate__invalid_experiment_key (self ):
@@ -2269,14 +2257,35 @@ def test_activate__invalid_user_id(self):
2269
2257
""" Test that None is returned and expected log messages are logged during activate \
2270
2258
when user_id is in invalid format. """
2271
2259
2272
- with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging ,\
2273
- mock .patch ('optimizely.helpers.validator.is_non_empty_string' , side_effect = [True , False ]) as mock_validator :
2260
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
2274
2261
self .assertIsNone (self .optimizely .activate ('test_experiment' , 99 ))
2275
2262
2276
- mock_validator .assert_any_call (99 )
2277
-
2278
2263
mock_client_logging .error .assert_called_once_with ('Provided "user_id" is in an invalid format.' )
2279
2264
2265
+ def test_activate__empty_user_id (self ):
2266
+ """ Test that expected log messages are logged during activate. """
2267
+
2268
+ variation_key = 'variation'
2269
+ experiment_key = 'test_experiment'
2270
+ user_id = ''
2271
+
2272
+ with mock .patch ('optimizely.decision_service.DecisionService.get_variation' ,
2273
+ return_value = self .project_config .get_variation_from_id (
2274
+ 'test_experiment' , '111129' )), \
2275
+ mock .patch ('time.time' , return_value = 42 ), \
2276
+ mock .patch ('optimizely.event_dispatcher.EventDispatcher.dispatch_event' ), \
2277
+ mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
2278
+ self .assertEqual (variation_key , self .optimizely .activate (experiment_key , user_id ))
2279
+
2280
+ mock_client_logging .info .assert_called_once_with (
2281
+ 'Activating user "" in experiment "test_experiment".'
2282
+ )
2283
+ debug_message = mock_client_logging .debug .call_args_list [0 ][0 ][0 ]
2284
+ self .assertRegexpMatches (
2285
+ debug_message ,
2286
+ 'Dispatching impression event to URL https://logx.optimizely.com/v1/events with params'
2287
+ )
2288
+
2280
2289
def test_activate__invalid_attributes (self ):
2281
2290
""" Test that expected log messages are logged during activate when attributes are in invalid format. """
2282
2291
with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
@@ -2373,3 +2382,64 @@ def test_get_variation__invalid_attributes__forced_bucketing(self):
2373
2382
'test_user' ,
2374
2383
attributes = {'test_attribute' : 'test_value_invalid' })
2375
2384
self .assertEqual ('variation' , variation_key )
2385
+
2386
+ def test_set_forced_variation__invalid_object (self ):
2387
+ """ Test that set_forced_variation logs error if Optimizely object is not created correctly. """
2388
+
2389
+ opt_obj = optimizely .Optimizely ('invalid_datafile' )
2390
+
2391
+ with mock .patch .object (opt_obj , 'logger' ) as mock_client_logging :
2392
+ self .assertFalse (opt_obj .set_forced_variation ('test_experiment' , 'test_user' , 'test_variation' ))
2393
+
2394
+ mock_client_logging .error .assert_called_once_with ('Datafile has invalid format. Failing "set_forced_variation".' )
2395
+
2396
+ def test_set_forced_variation__invalid_experiment_key (self ):
2397
+ """ Test that None is returned and expected log messages are logged during set_forced_variation \
2398
+ when exp_key is in invalid format. """
2399
+
2400
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging , \
2401
+ mock .patch ('optimizely.helpers.validator.is_non_empty_string' , return_value = False ) as mock_validator :
2402
+ self .assertFalse (self .optimizely .set_forced_variation (99 , 'test_user' , 'variation' ))
2403
+
2404
+ mock_validator .assert_any_call (99 )
2405
+
2406
+ mock_client_logging .error .assert_called_once_with ('Provided "experiment_key" is in an invalid format.' )
2407
+
2408
+ def test_set_forced_variation__invalid_user_id (self ):
2409
+ """ Test that None is returned and expected log messages are logged during set_forced_variation \
2410
+ when user_id is in invalid format. """
2411
+
2412
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
2413
+ self .assertFalse (self .optimizely .set_forced_variation ('test_experiment' , 99 , 'variation' ))
2414
+ mock_client_logging .error .assert_called_once_with ('Provided "user_id" is in an invalid format.' )
2415
+
2416
+ def test_get_forced_variation__invalid_object (self ):
2417
+ """ Test that get_forced_variation logs error if Optimizely object is not created correctly. """
2418
+
2419
+ opt_obj = optimizely .Optimizely ('invalid_datafile' )
2420
+
2421
+ with mock .patch .object (opt_obj , 'logger' ) as mock_client_logging :
2422
+ self .assertIsNone (opt_obj .get_forced_variation ('test_experiment' , 'test_user' ))
2423
+
2424
+ mock_client_logging .error .assert_called_once_with ('Datafile has invalid format. Failing "get_forced_variation".' )
2425
+
2426
+ def test_get_forced_variation__invalid_experiment_key (self ):
2427
+ """ Test that None is returned and expected log messages are logged during get_forced_variation \
2428
+ when exp_key is in invalid format. """
2429
+
2430
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging , \
2431
+ mock .patch ('optimizely.helpers.validator.is_non_empty_string' , return_value = False ) as mock_validator :
2432
+ self .assertIsNone (self .optimizely .get_forced_variation (99 , 'test_user' ))
2433
+
2434
+ mock_validator .assert_any_call (99 )
2435
+
2436
+ mock_client_logging .error .assert_called_once_with ('Provided "experiment_key" is in an invalid format.' )
2437
+
2438
+ def test_get_forced_variation__invalid_user_id (self ):
2439
+ """ Test that None is returned and expected log messages are logged during get_forced_variation \
2440
+ when user_id is in invalid format. """
2441
+
2442
+ with mock .patch .object (self .optimizely , 'logger' ) as mock_client_logging :
2443
+ self .assertIsNone (self .optimizely .get_forced_variation ('test_experiment' , 99 ))
2444
+
2445
+ mock_client_logging .error .assert_called_once_with ('Provided "user_id" is in an invalid format.' )
0 commit comments