1919using OptimizelySDK . Config ;
2020using OptimizelySDK . Entity ;
2121using OptimizelySDK . Logger ;
22+ using OptimizelySDK . OptimizelyDecisions ;
2223
2324namespace OptimizelySDK . Tests
2425{
@@ -27,6 +28,7 @@ public class BucketerTest
2728 {
2829 private Mock < ILogger > LoggerMock ;
2930 private ProjectConfig Config ;
31+ private IDecisionReasons DecisionReasons ;
3032 private const string TestUserId = "testUserId" ;
3133 public string TestBucketingIdControl { get ; } = "testBucketingIdControl!" ; // generates bucketing number 3741
3234 public string TestBucketingIdVariation { get ; } = "123456789'" ; // generates bucketing number 4567
@@ -59,6 +61,7 @@ public override string ToString()
5961 public void Initialize ( )
6062 {
6163 LoggerMock = new Mock < ILogger > ( ) ;
64+ DecisionReasons = DefaultDecisionReasons . NewInstance ( ) ;
6265 Config = DatafileProjectConfig . Create ( TestData . Datafile , LoggerMock . Object , new ErrorHandler . NoOpErrorHandler ( ) ) ;
6366 }
6467
@@ -95,42 +98,41 @@ public void TestBucketValidExperimentNotInGroup()
9598 {
9699 TestBucketer bucketer = new TestBucketer ( LoggerMock . Object ) ;
97100 bucketer . SetBucketValues ( new [ ] { 3000 , 7000 , 9000 } ) ;
98-
99101 // control
100102 Assert . AreEqual ( new Variation { Id = "7722370027" , Key = "control" } ,
101- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "test_experiment" ) , TestBucketingIdControl , TestUserId ) ) ;
103+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "test_experiment" ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
102104
103105 LoggerMock . Verify ( l => l . Log ( It . IsAny < LogLevel > ( ) , It . IsAny < string > ( ) ) , Times . Exactly ( 2 ) ) ;
104106 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [3000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
105107 LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , "User [testUserId] is in variation [control] of experiment [test_experiment]." ) ) ;
106-
107108 // variation
108109 Assert . AreEqual ( new Variation { Id = "7721010009" , Key = "variation" } ,
109- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "test_experiment" ) , TestBucketingIdControl , TestUserId ) ) ;
110+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "test_experiment" ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
110111
111112 LoggerMock . Verify ( l => l . Log ( It . IsAny < LogLevel > ( ) , It . IsAny < string > ( ) ) , Times . Exactly ( 4 ) ) ;
112113 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [7000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
113114 LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , "User [testUserId] is in variation [variation] of experiment [test_experiment]." ) ) ;
114115
115116 // no variation
116117 Assert . AreEqual ( new Variation { } ,
117- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "test_experiment" ) , TestBucketingIdControl , TestUserId ) ) ;
118+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "test_experiment" ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
118119
119120 LoggerMock . Verify ( l => l . Log ( It . IsAny < LogLevel > ( ) , It . IsAny < string > ( ) ) , Times . Exactly ( 6 ) ) ;
120121 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [9000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
121122 LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , "User [testUserId] is in no variation." ) ) ;
123+ Assert . AreEqual ( DecisionReasons . ToReport ( ) . Count , 0 ) ;
122124 }
123125
124126 [ Test ]
125127 public void TestBucketValidExperimentInGroup ( )
126128 {
127129 TestBucketer bucketer = new TestBucketer ( LoggerMock . Object ) ;
128-
130+
129131 // group_experiment_1 (20% experiment)
130132 // variation 1
131133 bucketer . SetBucketValues ( new [ ] { 1000 , 4000 } ) ;
132134 Assert . AreEqual ( new Variation { Id = "7722260071" , Key = "group_exp_1_var_1" } ,
133- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_1" ) , TestBucketingIdControl , TestUserId ) ) ;
135+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_1" ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
134136 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [1000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
135137 LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , "User [testUserId] is in experiment [group_experiment_1] of group [7722400015]." ) ) ;
136138 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [4000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
@@ -139,7 +141,7 @@ public void TestBucketValidExperimentInGroup()
139141 // variation 2
140142 bucketer . SetBucketValues ( new [ ] { 1500 , 7000 } ) ;
141143 Assert . AreEqual ( new Variation { Id = "7722360022" , Key = "group_exp_1_var_2" } ,
142- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_1" ) , TestBucketingIdControl , TestUserId ) ) ;
144+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_1" ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
143145 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [1500] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
144146 LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , "User [testUserId] is in experiment [group_experiment_1] of group [7722400015]." ) ) ;
145147 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [7000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
@@ -148,20 +150,21 @@ public void TestBucketValidExperimentInGroup()
148150 // User not in experiment
149151 bucketer . SetBucketValues ( new [ ] { 5000 , 7000 } ) ;
150152 Assert . AreEqual ( new Variation { } ,
151- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_1" ) , TestBucketingIdControl , TestUserId ) ) ;
153+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_1" ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
152154 LoggerMock . Verify ( l => l . Log ( LogLevel . DEBUG , "Assigned bucket [5000] to user [testUserId] with bucketing ID [testBucketingIdControl!]." ) ) ;
153155 LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , "User [testUserId] is not in experiment [group_experiment_1] of group [7722400015]." ) ) ;
154156
155157 LoggerMock . Verify ( l => l . Log ( It . IsAny < LogLevel > ( ) , It . IsAny < string > ( ) ) , Times . Exactly ( 10 ) ) ;
158+ Assert . AreEqual ( DecisionReasons . ToReport ( ) . Count , 0 ) ;
156159 }
157160
158161 [ Test ]
159162 public void TestBucketInvalidExperiment ( )
160163 {
161164 var bucketer = new Bucketer ( LoggerMock . Object ) ;
162-
165+
163166 Assert . AreEqual ( new Variation { } ,
164- bucketer . Bucket ( Config , new Experiment ( ) , TestBucketingIdControl , TestUserId ) ) ;
167+ bucketer . Bucket ( Config , new Experiment ( ) , TestBucketingIdControl , TestUserId , DecisionReasons ) ) ;
165168
166169 LoggerMock . Verify ( l => l . Log ( It . IsAny < LogLevel > ( ) , It . IsAny < string > ( ) ) , Times . Never ) ;
167170 }
@@ -176,7 +179,8 @@ public void TestBucketWithBucketingId()
176179
177180 // make sure that the bucketing ID is used for the variation bucketing and not the user ID
178181 Assert . AreEqual ( expectedVariation ,
179- bucketer . Bucket ( Config , experiment , TestBucketingIdControl , TestUserIdBucketsToVariation ) ) ;
182+ bucketer . Bucket ( Config , experiment , TestBucketingIdControl , TestUserIdBucketsToVariation , DecisionReasons ) ) ;
183+ Assert . AreEqual ( DecisionReasons . ToReport ( ) . Count , 0 ) ;
180184 }
181185
182186 // Test for invalid experiment keys, null variation should be returned
@@ -187,7 +191,8 @@ public void TestBucketVariationInvalidExperimentsWithBucketingId()
187191 var expectedVariation = new Variation ( ) ;
188192
189193 Assert . AreEqual ( expectedVariation ,
190- bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "invalid_experiment" ) , TestBucketingIdVariation , TestUserId ) ) ;
194+ bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "invalid_experiment" ) , TestBucketingIdVariation , TestUserId , DecisionReasons ) ) ;
195+ Assert . AreEqual ( DecisionReasons . ToReport ( ) . Count , 0 ) ;
191196 }
192197
193198 // Make sure that the bucketing ID is used to bucket the user into a group and not the user ID
@@ -200,7 +205,8 @@ public void TestBucketVariationGroupedExperimentsWithBucketingId()
200205
201206 Assert . AreEqual ( expectedGroupVariation ,
202207 bucketer . Bucket ( Config , Config . GetExperimentFromKey ( "group_experiment_2" ) ,
203- TestBucketingIdGroupExp2Var2 , TestUserIdBucketsToNoGroup ) ) ;
208+ TestBucketingIdGroupExp2Var2 , TestUserIdBucketsToNoGroup , DecisionReasons ) ) ;
209+ Assert . AreEqual ( DecisionReasons . ToReport ( ) . Count , 0 ) ;
204210 }
205211
206212 // Make sure that user gets bucketed into the rollout rule.
@@ -213,7 +219,8 @@ public void TestBucketRolloutRule()
213219 var expectedVariation = Config . GetVariationFromId ( rolloutRule . Key , "177773" ) ;
214220
215221 Assert . True ( TestData . CompareObjects ( expectedVariation ,
216- bucketer . Bucket ( Config , rolloutRule , "testBucketingId" , TestUserId ) ) ) ;
222+ bucketer . Bucket ( Config , rolloutRule , "testBucketingId" , TestUserId , DecisionReasons ) ) ) ;
223+ Assert . AreEqual ( DecisionReasons . ToReport ( ) . Count , 0 ) ;
217224 }
218225 }
219- }
226+ }
0 commit comments