@@ -61,6 +61,22 @@ public void SetUp()
61
61
LoggerMock . Object , ErrorHandlerMock . Object ) ;
62
62
}
63
63
64
+ private Mock < UserProfileService > makeUserProfileServiceMock ( )
65
+ {
66
+ var projectConfig = DatafileProjectConfig . Create ( TestData . Datafile , LoggerMock . Object ,
67
+ ErrorHandlerMock . Object ) ;
68
+ var experiment = projectConfig . Experiments [ 8 ] ;
69
+ var variation = experiment . Variations [ 0 ] ;
70
+ var decision = new Decision ( variation . Id ) ;
71
+ var userProfile = new UserProfile ( UserID , new Dictionary < string , Decision >
72
+ {
73
+ { experiment . Id , decision } ,
74
+ } ) ;
75
+ var userProfileServiceMock = new Mock < UserProfileService > ( ) ;
76
+ userProfileServiceMock . Setup ( up => up . Lookup ( UserID ) ) . Returns ( userProfile . ToMap ( ) ) ;
77
+ return userProfileServiceMock ;
78
+ }
79
+
64
80
[ Test ]
65
81
public void OptimizelyUserContextWithAttributes ( )
66
82
{
@@ -407,18 +423,25 @@ public void DecideWhenConfigIsNull()
407
423
408
424
Assert . IsTrue ( TestData . CompareObjects ( decision , decisionExpected ) ) ;
409
425
}
410
-
426
+
411
427
[ Test ]
412
428
public void DecideWithUspShouldOnlyLookupSaveOnce ( )
413
429
{
414
430
var flagKeyFromTestDataJson = "double_single_variable_feature" ;
415
- var userProfileServiceMock = new Mock < UserProfileService > ( ) ;
431
+ var userProfileServiceMock = makeUserProfileServiceMock ( ) ;
416
432
var optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object ,
417
433
LoggerMock . Object , ErrorHandlerMock . Object , userProfileServiceMock . Object ) ;
418
434
var user = optimizely . CreateUserContext ( UserID ) ;
419
-
435
+
420
436
_ = user . Decide ( flagKeyFromTestDataJson ) ;
421
-
437
+
438
+ LoggerMock . Verify (
439
+ l => l . Log ( LogLevel . INFO ,
440
+ "We were unable to get a user profile map from the UserProfileService." ) ,
441
+ Times . Never ) ;
442
+ LoggerMock . Verify (
443
+ l => l . Log ( LogLevel . ERROR , "The UserProfileService returned an invalid map." ) ,
444
+ Times . Never ) ;
422
445
userProfileServiceMock . Verify ( l => l . Lookup ( UserID ) , Times . Once ) ;
423
446
userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) ,
424
447
Times . Once ) ;
@@ -431,19 +454,26 @@ public void DecideWithUspShouldOnlyLookupSaveOnce()
431
454
[ Test ]
432
455
public void DecideForKeysWithUspShouldOnlyLookupSaveOnceWithMultipleFlags ( )
433
456
{
434
- var flagKeys = new [ ] { "double_single_variable_feature" , "boolean_feature" } ;
435
- var userProfileServiceMock = new Mock < UserProfileService > ( ) ;
457
+ var flagKeys = new [ ] { "double_single_variable_feature" , "boolean_feature" } ;
458
+ var userProfileServiceMock = makeUserProfileServiceMock ( ) ;
436
459
var optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object ,
437
460
LoggerMock . Object , ErrorHandlerMock . Object , userProfileServiceMock . Object ) ;
438
461
var userContext = optimizely . CreateUserContext ( UserID ) ;
439
-
462
+
440
463
_ = userContext . DecideForKeys ( flagKeys ) ;
441
-
464
+
465
+ LoggerMock . Verify (
466
+ l => l . Log ( LogLevel . INFO ,
467
+ "We were unable to get a user profile map from the UserProfileService." ) ,
468
+ Times . Never ) ;
469
+ LoggerMock . Verify (
470
+ l => l . Log ( LogLevel . ERROR , "The UserProfileService returned an invalid map." ) ,
471
+ Times . Never ) ;
442
472
userProfileServiceMock . Verify ( l => l . Lookup ( UserID ) , Times . Once ) ;
443
473
userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) ,
444
474
Times . Once ) ;
445
475
}
446
-
476
+
447
477
[ Test ]
448
478
public void DecideForKeysWithOneFlag ( )
449
479
{
@@ -473,21 +503,28 @@ public void DecideForKeysWithOneFlag()
473
503
new string [ 0 ] ) ;
474
504
Assert . IsTrue ( TestData . CompareObjects ( decision , expDecision ) ) ;
475
505
}
476
-
506
+
477
507
#endregion DecideForKeys
478
-
508
+
479
509
#region DecideAll
480
-
510
+
481
511
[ Test ]
482
512
public void DecideAllWithUspShouldOnlyLookupSaveOnce ( )
483
513
{
484
- var userProfileServiceMock = new Mock < UserProfileService > ( ) ;
514
+ var userProfileServiceMock = makeUserProfileServiceMock ( ) ;
485
515
var optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object ,
486
516
LoggerMock . Object , ErrorHandlerMock . Object , userProfileServiceMock . Object ) ;
487
517
var user = optimizely . CreateUserContext ( UserID ) ;
488
-
518
+
489
519
_ = user . DecideAll ( ) ;
490
-
520
+
521
+ LoggerMock . Verify (
522
+ l => l . Log ( LogLevel . INFO ,
523
+ "We were unable to get a user profile map from the UserProfileService." ) ,
524
+ Times . Never ) ;
525
+ LoggerMock . Verify (
526
+ l => l . Log ( LogLevel . ERROR , "The UserProfileService returned an invalid map." ) ,
527
+ Times . Never ) ;
491
528
userProfileServiceMock . Verify ( l => l . Lookup ( UserID ) , Times . Once ) ;
492
529
userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) ,
493
530
Times . Once ) ;
0 commit comments