14
14
import json
15
15
import mock
16
16
17
+ from optimizely import decision_service
17
18
from optimizely import entities
18
19
from optimizely import optimizely
19
20
from optimizely import user_profile
@@ -343,7 +344,8 @@ def test_get_variation_for_rollout__returns_none_if_no_experiments(self, mock_lo
343
344
""" Test that get_variation_for_rollout returns None if there are no experiments (targeting rules). """
344
345
345
346
no_experiment_rollout = self .project_config .get_rollout_from_id ('201111' )
346
- self .assertIsNone (self .decision_service .get_variation_for_rollout (no_experiment_rollout , 'test_user' ))
347
+ self .assertEqual (decision_service .Decision (None , None ),
348
+ self .decision_service .get_variation_for_rollout (no_experiment_rollout , 'test_user' ))
347
349
348
350
# Assert no log messages were generated
349
351
self .assertEqual (0 , mock_logging .call_count )
@@ -356,7 +358,8 @@ def test_get_variation_for_rollout__skips_to_everyone_else_rule(self, mock_loggi
356
358
357
359
with mock .patch ('optimizely.helpers.audience.is_user_in_experiment' , return_value = True ) as mock_audience_check ,\
358
360
mock .patch ('optimizely.bucketer.Bucketer.bucket' , return_value = None ):
359
- self .assertIsNone (self .decision_service .get_variation_for_rollout (rollout , 'test_user' ))
361
+ self .assertEqual (decision_service .Decision (None , None ),
362
+ self .decision_service .get_variation_for_rollout (rollout , 'test_user' ))
360
363
361
364
# Check that after first experiment, it skips to the last experiment to check
362
365
self .assertEqual (
@@ -378,7 +381,8 @@ def test_get_variation_for_rollout__returns_none_for_user_not_in_rollout(self, m
378
381
rollout = self .project_config .get_rollout_from_id ('211111' )
379
382
380
383
with mock .patch ('optimizely.helpers.audience.is_user_in_experiment' , return_value = False ) as mock_audience_check :
381
- self .assertIsNone (self .decision_service .get_variation_for_rollout (rollout , 'test_user' ))
384
+ self .assertEqual (decision_service .Decision (None , None ),
385
+ self .decision_service .get_variation_for_rollout (rollout , 'test_user' ))
382
386
383
387
# Check that all experiments in rollout layer were checked
384
388
self .assertEqual (
@@ -399,11 +403,12 @@ def test_get_variation_for_feature__returns_variation_for_feature_in_experiment(
399
403
400
404
feature = self .project_config .get_feature_from_key ('test_feature_in_experiment' )
401
405
406
+ expected_experiment = self .project_config .get_experiment_from_key ('test_experiment' )
402
407
expected_variation = self .project_config .get_variation_from_id ('test_experiment' , '111129' )
403
- with mock .patch (
404
- 'optimizely.decision_service.DecisionService.get_variation' ,
405
- return_value = expected_variation ) as mock_decision :
406
- self . assertEqual ( expected_variation , self .decision_service .get_variation_for_feature (feature , 'user1' ))
408
+ with mock .patch ('optimizely.decision_service.DecisionService.get_variation' ,
409
+ return_value = expected_variation ) as mock_decision :
410
+ self . assertEqual ( decision_service . Decision ( expected_experiment , expected_variation ),
411
+ self .decision_service .get_variation_for_feature (feature , 'user1' ))
407
412
408
413
mock_decision .assert_called_once_with (
409
414
self .project_config .get_experiment_from_key ('test_experiment' ), 'user1' , None
@@ -436,12 +441,14 @@ def test_get_variation_for_feature__returns_variation_if_user_not_in_experiment_
436
441
437
442
feature = self .project_config .get_feature_from_key ('test_feature_in_experiment_and_rollout' )
438
443
444
+ expected_experiment = self .project_config .get_experiment_from_key ('211127' )
439
445
expected_variation = self .project_config .get_variation_from_id ('211127' , '211129' )
440
446
with mock .patch (
441
447
'optimizely.helpers.audience.is_user_in_experiment' ,
442
448
side_effect = [False , True ]) as mock_audience_check , \
443
449
mock .patch ('optimizely.bucketer.Bucketer.bucket' , return_value = expected_variation ):
444
- self .assertEqual (expected_variation , self .decision_service .get_variation_for_feature (feature , 'user1' ))
450
+ self .assertEqual (decision_service .Decision (expected_experiment , expected_variation ),
451
+ self .decision_service .get_variation_for_feature (feature , 'user1' ))
445
452
446
453
self .assertEqual (2 , mock_audience_check .call_count )
447
454
mock_audience_check .assert_any_call (self .project_config ,
@@ -453,21 +460,20 @@ def test_get_variation_for_feature__returns_variation_for_feature_in_group(self,
453
460
""" Test that get_variation_for_feature returns the variation of
454
461
the experiment the user is bucketed in the feature's group. """
455
462
456
- opt_obj = optimizely .Optimizely (json .dumps (self .config_dict_with_features ))
457
- project_config = opt_obj .config
458
- decision_service = opt_obj .decision_service
459
- feature = project_config .get_feature_from_key ('test_feature_in_group' )
463
+ feature = self .project_config .get_feature_from_key ('test_feature_in_group' )
460
464
461
- expected_variation = project_config .get_variation_from_id ('group_exp_1' , '28901' )
465
+ expected_experiment = self .project_config .get_experiment_from_key ('group_exp_1' )
466
+ expected_variation = self .project_config .get_variation_from_id ('group_exp_1' , '28901' )
462
467
with mock .patch (
463
468
'optimizely.decision_service.DecisionService.get_experiment_in_group' ,
464
- return_value = project_config .get_experiment_from_key ('group_exp_1' )) as mock_get_experiment_in_group , \
469
+ return_value = self . project_config .get_experiment_from_key ('group_exp_1' )) as mock_get_experiment_in_group , \
465
470
mock .patch ('optimizely.decision_service.DecisionService.get_variation' ,
466
471
return_value = expected_variation ) as mock_decision :
467
- self .assertEqual (expected_variation , decision_service .get_variation_for_feature (feature , 'user1' ))
472
+ self .assertEqual (decision_service .Decision (expected_experiment , expected_variation ),
473
+ self .decision_service .get_variation_for_feature (feature , 'user1' ))
468
474
469
- mock_get_experiment_in_group .assert_called_once_with (project_config .get_group ('19228' ), 'user1' )
470
- mock_decision .assert_called_once_with (project_config .get_experiment_from_key ('group_exp_1' ), 'user1' , None )
475
+ mock_get_experiment_in_group .assert_called_once_with (self . project_config .get_group ('19228' ), 'user1' )
476
+ mock_decision .assert_called_once_with (self . project_config .get_experiment_from_key ('group_exp_1' ), 'user1' , None )
471
477
472
478
def test_get_variation_for_feature__returns_none_for_user_not_in_group (self , _ ):
473
479
""" Test that get_variation_for_feature returns None for
@@ -478,7 +484,8 @@ def test_get_variation_for_feature__returns_none_for_user_not_in_group(self, _):
478
484
with mock .patch ('optimizely.decision_service.DecisionService.get_experiment_in_group' ,
479
485
return_value = None ) as mock_get_experiment_in_group , \
480
486
mock .patch ('optimizely.decision_service.DecisionService.get_variation' ) as mock_decision :
481
- self .assertIsNone (self .decision_service .get_variation_for_feature (feature , 'user1' ))
487
+ self .assertEqual (decision_service .Decision (None , None ),
488
+ self .decision_service .get_variation_for_feature (feature , 'user1' ))
482
489
483
490
mock_get_experiment_in_group .assert_called_once_with (self .project_config .get_group ('19228' ), 'user1' )
484
491
self .assertFalse (mock_decision .called )
@@ -487,9 +494,11 @@ def test_get_variation_for_feature__returns_none_for_user_not_in_experiment(self
487
494
""" Test that get_variation_for_feature returns None for user not in the associated experiment. """
488
495
489
496
feature = self .project_config .get_feature_from_key ('test_feature_in_experiment' )
497
+ expected_experiment = self .project_config .get_experiment_from_key ('test_experiment' )
490
498
491
499
with mock .patch ('optimizely.decision_service.DecisionService.get_variation' , return_value = None ) as mock_decision :
492
- self .assertIsNone (self .decision_service .get_variation_for_feature (feature , 'user1' ))
500
+ self .assertEqual (decision_service .Decision (expected_experiment , None ),
501
+ self .decision_service .get_variation_for_feature (feature , 'user1' ))
493
502
494
503
mock_decision .assert_called_once_with (
495
504
self .project_config .get_experiment_from_key ('test_experiment' ), 'user1' , None
@@ -500,10 +509,12 @@ def test_get_variation_for_feature__returns_none_for_user_in_group_experiment_no
500
509
not targeting a feature, then None is returned. """
501
510
502
511
feature = self .project_config .get_feature_from_key ('test_feature_in_group' )
512
+ expected_experiment = self .project_config .get_experiment_from_key ('group_exp_2' )
503
513
504
514
with mock .patch ('optimizely.decision_service.DecisionService.get_experiment_in_group' ,
505
515
return_value = self .project_config .get_experiment_from_key ('group_exp_2' )) as mock_decision :
506
- self .assertIsNone (self .decision_service .get_variation_for_feature (feature , 'user_1' ))
516
+ self .assertEqual (decision_service .Decision (expected_experiment , None ),
517
+ self .decision_service .get_variation_for_feature (feature , 'user_1' ))
507
518
508
519
mock_decision .assert_called_once_with (self .project_config .get_group ('19228' ), 'user_1' )
509
520
0 commit comments