1
1
/**
2
2
*
3
- * Copyright 2017, Optimizely and contributors
3
+ * Copyright 2017-2018 , Optimizely and contributors
4
4
*
5
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
6
* you may not use this file except in compliance with the License.
@@ -591,10 +591,7 @@ public void TestGetVariationForFeatureRolloutWhenUserIsBucketedInTheTargetingRul
591
591
var decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
592
592
593
593
var actualDecision = decisionService . GetVariationForFeatureRollout ( featureFlag , "user_1" , userAttributes ) ;
594
-
595
594
Assert . IsTrue ( TestData . CompareObjects ( expectedDecision , actualDecision ) ) ;
596
-
597
- LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , $ "Attempting to bucket user \" user_1\" into rollout rule \" { experiment . Key } \" .") ) ;
598
595
}
599
596
600
597
// Should return the variation the user is bucketed into when the user is bucketed into the "Everyone Else" rule
@@ -619,11 +616,7 @@ public void TestGetVariationForFeatureRolloutWhenUserIsNotBucketedInTheTargeting
619
616
var decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
620
617
621
618
var actualDecision = decisionService . GetVariationForFeatureRollout ( featureFlag , "user_1" , userAttributes ) ;
622
-
623
619
Assert . IsTrue ( TestData . CompareObjects ( expectedDecision , actualDecision ) ) ;
624
-
625
- LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , $ "Attempting to bucket user \" user_1\" into rollout rule \" { experiment . Key } \" .") ) ;
626
- LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "User \" user_1\" is excluded due to traffic allocation. Checking \" Eveyrone Else\" rule now." ) ) ;
627
620
}
628
621
629
622
// Should log and return null when the user is not bucketed into the targeting rule
@@ -634,9 +627,6 @@ public void TestGetVariationForFeatureRolloutWhenUserIsNeitherBucketedInTheTarge
634
627
var featureFlag = ProjectConfig . GetFeatureFlagFromKey ( "boolean_single_variable_feature" ) ;
635
628
var rolloutId = featureFlag . RolloutId ;
636
629
var rollout = ProjectConfig . GetRolloutFromId ( rolloutId ) ;
637
- var experiment = rollout . Experiments [ 0 ] ;
638
- var everyoneElseRule = rollout . Experiments [ rollout . Experiments . Count - 1 ] ;
639
-
640
630
var userAttributes = new UserAttributes {
641
631
{ "browser_type" , "chrome" }
642
632
} ;
@@ -646,10 +636,6 @@ public void TestGetVariationForFeatureRolloutWhenUserIsNeitherBucketedInTheTarge
646
636
647
637
var actualDecision = decisionService . GetVariationForFeatureRollout ( featureFlag , "user_1" , userAttributes ) ;
648
638
Assert . IsNull ( actualDecision ) ;
649
-
650
- LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , $ "Attempting to bucket user \" user_1\" into rollout rule \" { experiment . Key } \" .") ) ;
651
- LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "User \" user_1\" is excluded due to traffic allocation. Checking \" Eveyrone Else\" rule now." ) ) ;
652
- LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , $ "User \" user_1\" is excluded from \" Everyone Else\" rule for feature flag \" { featureFlag . Key } \" .") ) ;
653
639
}
654
640
655
641
// Should return expected variation when the user is attempted to be bucketed into all targeting rules
@@ -735,6 +721,39 @@ public void TestGetVariationForFeatureRolloutAudienceAndTrafficeAllocationCheck(
735
721
Assert . Null ( actualDecision ) ;
736
722
}
737
723
724
+ [ Test ]
725
+ public void TestGetVariationForFeatureRolloutCheckAudienceInEveryoneElseRule ( )
726
+ {
727
+ var featureFlag = ProjectConfig . GetFeatureFlagFromKey ( "boolean_single_variable_feature" ) ;
728
+ var rolloutId = featureFlag . RolloutId ;
729
+ var rollout = ProjectConfig . GetRolloutFromId ( rolloutId ) ;
730
+ var everyoneElseRule = rollout . Experiments [ 2 ] ;
731
+ var variation = everyoneElseRule . Variations [ 0 ] ;
732
+ var expectedDecision = new FeatureDecision ( everyoneElseRule , variation , FeatureDecision . DECISION_SOURCE_ROLLOUT ) ;
733
+
734
+ BucketerMock . Setup ( bm => bm . Bucket ( It . IsAny < ProjectConfig > ( ) , everyoneElseRule , It . IsAny < string > ( ) , WhitelistedUserId ) ) . Returns ( variation ) ;
735
+ BucketerMock . Setup ( bm => bm . Bucket ( It . IsAny < ProjectConfig > ( ) , everyoneElseRule , It . IsAny < string > ( ) , GenericUserId ) ) . Returns < Variation > ( null ) ;
736
+ var decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
737
+
738
+ // Returned variation id should be of everyone else rule as it passes audience Id checking.
739
+ var actualDecision = decisionService . GetVariationForFeatureRollout ( featureFlag , WhitelistedUserId , null ) ;
740
+ Assert . True ( TestData . CompareObjects ( expectedDecision , actualDecision ) ) ;
741
+
742
+ // Returned variation id should be null.
743
+ actualDecision = decisionService . GetVariationForFeatureRollout ( featureFlag , GenericUserId , null ) ;
744
+ Assert . Null ( actualDecision ) ;
745
+
746
+ // Returned variation id should be null as it fails audience Id checking.
747
+ everyoneElseRule . AudienceIds = new string [ ] { ProjectConfig . Audiences [ 0 ] . Id } ;
748
+ actualDecision = decisionService . GetVariationForFeatureRollout ( featureFlag , GenericUserId , null ) ;
749
+ Assert . Null ( actualDecision ) ;
750
+
751
+ LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "User \" testUser1\" does not meet the conditions to be in rollout rule for audience \" Chrome users\" ." ) , Times . Once ) ;
752
+ LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "User \" testUser1\" does not meet the conditions to be in rollout rule for audience \" iPhone users in San Francisco\" ." ) , Times . Once ) ;
753
+ LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "User \" genericUserId\" does not meet the conditions to be in rollout rule for audience \" Chrome users\" ." ) , Times . Exactly ( 2 ) ) ;
754
+ LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "User \" genericUserId\" does not meet the conditions to be in rollout rule for audience \" iPhone users in San Francisco\" ." ) , Times . Exactly ( 3 ) ) ;
755
+ }
756
+
738
757
#endregion // GetVariationForFeatureRollout Tests
739
758
740
759
#region GetVariationForFeature Tests
0 commit comments