@@ -35,9 +35,7 @@ public class DecisionServiceTest
35
35
private Mock < UserProfileService > UserProfileServiceMock ;
36
36
private Mock < Bucketer > BucketerMock ;
37
37
private Mock < DecisionService > DecisionServiceMock ;
38
-
39
- private ProjectConfig NoAudienceProjectConfig ;
40
- private ProjectConfig ValidProjectConfig ;
38
+
41
39
private ProjectConfig ProjectConfig ;
42
40
private Experiment WhitelistedExperiment ;
43
41
private Variation WhitelistedVariation ;
@@ -54,13 +52,11 @@ public void SetUp()
54
52
UserProfileServiceMock = new Mock < UserProfileService > ( ) ;
55
53
BucketerMock = new Mock < Bucketer > ( LoggerMock . Object ) ;
56
54
57
- ValidProjectConfig = ProjectConfig . Create ( TestData . ValidDataFileV3 , LoggerMock . Object , ErrorHandlerMock . Object ) ;
58
- NoAudienceProjectConfig = ProjectConfig . Create ( TestData . NoAudienceProjectConfigV3 , LoggerMock . Object , ErrorHandlerMock . Object ) ;
59
- WhitelistedExperiment = ValidProjectConfig . ExperimentIdMap [ "223" ] ;
60
- WhitelistedVariation = WhitelistedExperiment . VariationKeyToVariationMap [ "vtag1" ] ;
61
55
ProjectConfig = ProjectConfig . Create ( TestData . Datafile , LoggerMock . Object , ErrorHandlerMock . Object ) ;
56
+ WhitelistedExperiment = ProjectConfig . ExperimentIdMap [ "224" ] ;
57
+ WhitelistedVariation = WhitelistedExperiment . VariationKeyToVariationMap [ "vtag5" ] ;
58
+
62
59
DecisionService = new DecisionService ( new Bucketer ( LoggerMock . Object ) , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
63
-
64
60
DecisionServiceMock = new Mock < DecisionService > ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) { CallBase = true } ;
65
61
66
62
VariationWithKeyControl = ProjectConfig . GetVariationFromKey ( "test_experiment" , "control" ) ;
@@ -70,17 +66,16 @@ public void SetUp()
70
66
[ Test ]
71
67
public void TestGetVariationForcedVariationPrecedesAudienceEval ( )
72
68
{
73
-
74
- DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ValidProjectConfig , null , LoggerMock . Object ) ;
75
- Experiment experiment = ValidProjectConfig . Experiments [ 0 ] ;
69
+ DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
70
+ Experiment experiment = ProjectConfig . Experiments [ 8 ] ;
76
71
Variation expectedVariation = experiment . Variations [ 0 ] ;
77
72
78
73
// user excluded without audiences and whitelisting
79
74
Assert . IsNull ( decisionService . GetVariation ( experiment , GenericUserId , new UserAttributes ( ) ) ) ;
80
75
81
76
var actualVariation = decisionService . GetVariation ( experiment , WhitelistedUserId , new UserAttributes ( ) ) ;
82
77
83
- LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , string . Format ( "User \" {0}\" is forced in variation \" vtag1 \" ." , WhitelistedUserId ) ) , Times . Once ) ;
78
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , string . Format ( "User \" {0}\" is forced in variation \" vtag5 \" ." , WhitelistedUserId ) ) , Times . Once ) ;
84
79
// no attributes provided for a experiment that has an audience
85
80
Assert . IsTrue ( TestData . CompareObjects ( actualVariation , expectedVariation ) ) ;
86
81
BucketerMock . Verify ( _ => _ . Bucket ( It . IsAny < ProjectConfig > ( ) , It . IsAny < Experiment > ( ) , It . IsAny < string > ( ) , It . IsAny < string > ( ) ) , Times . Never ) ;
@@ -89,7 +84,7 @@ public void TestGetVariationForcedVariationPrecedesAudienceEval()
89
84
[ Test ]
90
85
public void TestGetVariationEvaluatesUserProfileBeforeAudienceTargeting ( )
91
86
{
92
- Experiment experiment = ValidProjectConfig . Experiments [ 0 ] ;
87
+ Experiment experiment = ProjectConfig . Experiments [ 8 ] ;
93
88
Variation variation = experiment . Variations [ 0 ] ;
94
89
95
90
Decision decision = new Decision ( variation . Id ) ;
@@ -100,7 +95,7 @@ public void TestGetVariationEvaluatesUserProfileBeforeAudienceTargeting()
100
95
101
96
UserProfileServiceMock . Setup ( up => up . Lookup ( WhitelistedUserId ) ) . Returns ( userProfile . ToMap ( ) ) ;
102
97
103
- DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ValidProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
98
+ DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
104
99
105
100
decisionService . GetVariation ( experiment , GenericUserId , new UserAttributes ( ) ) ;
106
101
@@ -116,7 +111,7 @@ public void TestGetVariationEvaluatesUserProfileBeforeAudienceTargeting()
116
111
[ Test ]
117
112
public void TestGetForcedVariationReturnsForcedVariation ( )
118
113
{
119
- DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ValidProjectConfig , null , LoggerMock . Object ) ;
114
+ DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
120
115
121
116
Assert . IsTrue ( TestData . CompareObjects ( WhitelistedVariation , decisionService . GetWhitelistedVariation ( WhitelistedExperiment , WhitelistedUserId ) ) ) ;
122
117
LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , string . Format ( "User \" {0}\" is forced in variation \" {1}\" ." ,
@@ -131,7 +126,7 @@ public void TestGetForcedVariationWithInvalidVariation()
131
126
string userId = "testUser1" ;
132
127
string invalidVariationKey = "invalidVarKey" ;
133
128
134
- DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ValidProjectConfig , null , LoggerMock . Object ) ;
129
+ DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
135
130
136
131
var variations = new Variation [ ]
137
132
{
@@ -171,15 +166,15 @@ public void TestGetForcedVariationWithInvalidVariation()
171
166
public void TestGetForcedVariationReturnsNullWhenUserIsNotWhitelisted ( )
172
167
{
173
168
Bucketer bucketer = new Bucketer ( LoggerMock . Object ) ;
174
- DecisionService decisionService = new DecisionService ( bucketer , ErrorHandlerMock . Object , ValidProjectConfig , null , LoggerMock . Object ) ;
169
+ DecisionService decisionService = new DecisionService ( bucketer , ErrorHandlerMock . Object , ProjectConfig , null , LoggerMock . Object ) ;
175
170
176
171
Assert . IsNull ( decisionService . GetWhitelistedVariation ( WhitelistedExperiment , GenericUserId ) ) ;
177
172
}
178
173
179
174
[ Test ]
180
175
public void TestBucketReturnsVariationStoredInUserProfile ( )
181
176
{
182
- Experiment experiment = NoAudienceProjectConfig . Experiments [ 0 ] ;
177
+ Experiment experiment = ProjectConfig . Experiments [ 6 ] ;
183
178
Variation variation = experiment . Variations [ 0 ] ;
184
179
Decision decision = new Decision ( variation . Id ) ;
185
180
@@ -191,7 +186,7 @@ public void TestBucketReturnsVariationStoredInUserProfile()
191
186
UserProfileServiceMock . Setup ( _ => _ . Lookup ( UserProfileId ) ) . Returns ( userProfile . ToMap ( ) ) ;
192
187
193
188
194
- DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , NoAudienceProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
189
+ DecisionService decisionService = new DecisionService ( BucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
195
190
196
191
Assert . IsTrue ( TestData . CompareObjects ( variation , decisionService . GetVariation ( experiment , UserProfileId , new UserAttributes ( ) ) ) ) ;
197
192
@@ -205,7 +200,7 @@ public void TestBucketReturnsVariationStoredInUserProfile()
205
200
[ Test ]
206
201
public void TestGetStoredVariationLogsWhenLookupReturnsNull ( )
207
202
{
208
- Experiment experiment = NoAudienceProjectConfig . Experiments [ 0 ] ;
203
+ Experiment experiment = ProjectConfig . Experiments [ 6 ] ;
209
204
210
205
UserProfileService userProfileService = UserProfileServiceMock . Object ;
211
206
UserProfile userProfile = new UserProfile ( UserProfileId , new Dictionary < string , Decision > ( ) ) ;
@@ -214,7 +209,7 @@ public void TestGetStoredVariationLogsWhenLookupReturnsNull()
214
209
UserProfileServiceMock . Setup ( _ => _ . Lookup ( UserProfileId ) ) . Returns ( userProfile . ToMap ( ) ) ;
215
210
216
211
DecisionService decisionService = new DecisionService ( bucketer ,
217
- ErrorHandlerMock . Object , NoAudienceProjectConfig , userProfileService , LoggerMock . Object ) ;
212
+ ErrorHandlerMock . Object , ProjectConfig , userProfileService , LoggerMock . Object ) ;
218
213
219
214
Assert . IsNull ( decisionService . GetStoredVariation ( experiment , userProfile ) ) ;
220
215
@@ -225,7 +220,7 @@ public void TestGetStoredVariationLogsWhenLookupReturnsNull()
225
220
[ Test ]
226
221
public void TestGetStoredVariationReturnsNullWhenVariationIsNoLongerInConfig ( )
227
222
{
228
- Experiment experiment = NoAudienceProjectConfig . Experiments [ 0 ] ;
223
+ Experiment experiment = ProjectConfig . Experiments [ 6 ] ;
229
224
string storedVariationId = "missingVariation" ;
230
225
Decision storedDecision = new Decision ( storedVariationId ) ;
231
226
@@ -239,7 +234,7 @@ public void TestGetStoredVariationReturnsNullWhenVariationIsNoLongerInConfig()
239
234
240
235
UserProfileServiceMock . Setup ( up => up . Lookup ( UserProfileId ) ) . Returns ( storedUserProfile . ToMap ( ) ) ;
241
236
242
- DecisionService decisionService = new DecisionService ( bucketer , ErrorHandlerMock . Object , NoAudienceProjectConfig ,
237
+ DecisionService decisionService = new DecisionService ( bucketer , ErrorHandlerMock . Object , ProjectConfig ,
243
238
UserProfileServiceMock . Object , LoggerMock . Object ) ;
244
239
Assert . IsNull ( decisionService . GetStoredVariation ( experiment , storedUserProfile ) ) ;
245
240
LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , string . Format ( "User \" {0}\" was previously bucketed into variation with ID \" {1}\" for experiment \" {2}\" , but no matching variation was found for that user. We will re-bucket the user."
@@ -249,7 +244,7 @@ public void TestGetStoredVariationReturnsNullWhenVariationIsNoLongerInConfig()
249
244
[ Test ]
250
245
public void TestGetVariationSavesBucketedVariationIntoUserProfile ( )
251
246
{
252
- Experiment experiment = NoAudienceProjectConfig . Experiments [ 0 ] ;
247
+ Experiment experiment = ProjectConfig . Experiments [ 6 ] ;
253
248
Variation variation = experiment . Variations [ 0 ] ;
254
249
255
250
Decision decision = new Decision ( variation . Id ) ;
@@ -265,9 +260,9 @@ public void TestGetVariationSavesBucketedVariationIntoUserProfile()
265
260
} ) ;
266
261
267
262
var mockBucketer = new Mock < Bucketer > ( LoggerMock . Object ) ;
268
- mockBucketer . Setup ( m => m . Bucket ( ValidProjectConfig , experiment , UserProfileId , UserProfileId ) ) . Returns ( variation ) ;
263
+ mockBucketer . Setup ( m => m . Bucket ( ProjectConfig , experiment , UserProfileId , UserProfileId ) ) . Returns ( variation ) ;
269
264
270
- DecisionService decisionService = new DecisionService ( mockBucketer . Object , ErrorHandlerMock . Object , ValidProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
265
+ DecisionService decisionService = new DecisionService ( mockBucketer . Object , ErrorHandlerMock . Object , ProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
271
266
272
267
Assert . IsTrue ( TestData . CompareObjects ( variation , decisionService . GetVariation ( experiment , UserProfileId , new UserAttributes ( ) ) ) ) ;
273
268
@@ -279,7 +274,7 @@ public void TestGetVariationSavesBucketedVariationIntoUserProfile()
279
274
[ Test ]
280
275
public void TestBucketLogsCorrectlyWhenUserProfileFailsToSave ( )
281
276
{
282
- Experiment experiment = NoAudienceProjectConfig . Experiments [ 0 ] ;
277
+ Experiment experiment = ProjectConfig . Experiments [ 6 ] ;
283
278
Variation variation = experiment . Variations [ 0 ] ;
284
279
Decision decision = new Decision ( variation . Id ) ;
285
280
Bucketer bucketer = new Bucketer ( LoggerMock . Object ) ;
@@ -294,7 +289,7 @@ public void TestBucketLogsCorrectlyWhenUserProfileFailsToSave()
294
289
UserProfile saveUserProfile = new UserProfile ( UserProfileId , new Dictionary < string , Decision > ( ) ) ;
295
290
296
291
DecisionService decisionService = new DecisionService ( bucketer ,
297
- ErrorHandlerMock . Object , NoAudienceProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
292
+ ErrorHandlerMock . Object , ProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
298
293
299
294
decisionService . SaveVariation ( experiment , variation , saveUserProfile ) ;
300
295
@@ -307,7 +302,7 @@ public void TestBucketLogsCorrectlyWhenUserProfileFailsToSave()
307
302
[ Test ]
308
303
public void TestGetVariationSavesANewUserProfile ( )
309
304
{
310
- Experiment experiment = NoAudienceProjectConfig . Experiments [ 0 ] ;
305
+ Experiment experiment = ProjectConfig . Experiments [ 6 ] ;
311
306
Variation variation = experiment . Variations [ 0 ] ;
312
307
Decision decision = new Decision ( variation . Id ) ;
313
308
@@ -317,13 +312,13 @@ public void TestGetVariationSavesANewUserProfile()
317
312
} ) ;
318
313
319
314
var mockBucketer = new Mock < Bucketer > ( LoggerMock . Object ) ;
320
- mockBucketer . Setup ( m => m . Bucket ( NoAudienceProjectConfig , experiment , UserProfileId , UserProfileId ) ) . Returns ( variation ) ;
315
+ mockBucketer . Setup ( m => m . Bucket ( ProjectConfig , experiment , UserProfileId , UserProfileId ) ) . Returns ( variation ) ;
321
316
322
317
Dictionary < string , object > userProfile = null ;
323
318
324
319
UserProfileServiceMock . Setup ( up => up . Lookup ( UserProfileId ) ) . Returns ( userProfile ) ;
325
320
326
- DecisionService decisionService = new DecisionService ( mockBucketer . Object , ErrorHandlerMock . Object , NoAudienceProjectConfig ,
321
+ DecisionService decisionService = new DecisionService ( mockBucketer . Object , ErrorHandlerMock . Object , ProjectConfig ,
327
322
UserProfileServiceMock . Object , LoggerMock . Object ) ;
328
323
329
324
Assert . IsTrue ( TestData . CompareObjects ( variation , decisionService . GetVariation ( experiment , UserProfileId , new UserAttributes ( ) ) ) ) ;
@@ -441,7 +436,7 @@ public void TestGetVariationWithBucketingId()
441
436
} ) ;
442
437
443
438
UserProfileServiceMock . Setup ( up => up . Lookup ( userId ) ) . Returns ( storedUserProfile . ToMap ( ) ) ;
444
- DecisionService decisionService = new DecisionService ( bucketerMock . Object , ErrorHandlerMock . Object , ValidProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
439
+ DecisionService decisionService = new DecisionService ( bucketerMock . Object , ErrorHandlerMock . Object , ProjectConfig , UserProfileServiceMock . Object , LoggerMock . Object ) ;
445
440
446
441
actualVariation = optlyObject . GetVariation ( experimentKey , userId , userAttributesWithBucketingId ) ;
447
442
Assert . IsTrue ( TestData . CompareObjects ( VariationWithKeyControl , actualVariation ) , string . Format ( "Variation \" {0}\" does not match expected user profile variation \" {1}\" ." , actualVariation ? . Key , variationKeyControl ) ) ;
0 commit comments