16
16
17
17
using System ;
18
18
using System . Collections . Generic ;
19
+ using System . Linq ;
19
20
using Castle . Core . Internal ;
20
21
using Moq ;
21
22
using NUnit . Framework ;
@@ -61,7 +62,7 @@ public void SetUp()
61
62
LoggerMock . Object , ErrorHandlerMock . Object ) ;
62
63
}
63
64
64
- private Mock < UserProfileService > makeUserProfileServiceMock ( )
65
+ private Mock < UserProfileService > MakeUserProfileServiceMock ( )
65
66
{
66
67
var projectConfig = DatafileProjectConfig . Create ( TestData . Datafile , LoggerMock . Object ,
67
68
ErrorHandlerMock . Object ) ;
@@ -425,13 +426,20 @@ public void DecideWhenConfigIsNull()
425
426
}
426
427
427
428
[ Test ]
428
- public void DecideWithUspShouldOnlyLookupSaveOnce ( )
429
+ public void DecideWithUpsShouldOnlyLookupSaveOnce ( )
429
430
{
430
431
var flagKeyFromTestDataJson = "double_single_variable_feature" ;
431
- var userProfileServiceMock = makeUserProfileServiceMock ( ) ;
432
+ var userProfileServiceMock = MakeUserProfileServiceMock ( ) ;
433
+ var saveArgsCollector = new List < Dictionary < string , object > > ( ) ;
434
+ userProfileServiceMock . Setup ( up => up . Save ( Capture . In ( saveArgsCollector ) ) ) ;
432
435
var optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object ,
433
436
LoggerMock . Object , ErrorHandlerMock . Object , userProfileServiceMock . Object ) ;
434
437
var user = optimizely . CreateUserContext ( UserID ) ;
438
+ var expectedUserProfile = new UserProfile ( UserID , new Dictionary < string , Decision >
439
+ {
440
+ { "224" , new Decision ( "280" ) } ,
441
+ { "122238" , new Decision ( "122240" ) } ,
442
+ } ) ;
435
443
436
444
_ = user . Decide ( flagKeyFromTestDataJson ) ;
437
445
@@ -445,20 +453,28 @@ public void DecideWithUspShouldOnlyLookupSaveOnce()
445
453
userProfileServiceMock . Verify ( l => l . Lookup ( UserID ) , Times . Once ) ;
446
454
userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) ,
447
455
Times . Once ) ;
456
+ Assert . AreEqual ( saveArgsCollector . First ( ) , expectedUserProfile . ToMap ( ) ) ;
448
457
}
449
458
450
459
#endregion Decide
451
460
452
461
#region DecideForKeys
453
462
454
463
[ Test ]
455
- public void DecideForKeysWithUspShouldOnlyLookupSaveOnceWithMultipleFlags ( )
464
+ public void DecideForKeysWithUpsShouldOnlyLookupSaveOnceWithMultipleFlags ( )
456
465
{
457
466
var flagKeys = new [ ] { "double_single_variable_feature" , "boolean_feature" } ;
458
- var userProfileServiceMock = makeUserProfileServiceMock ( ) ;
467
+ var userProfileServiceMock = MakeUserProfileServiceMock ( ) ;
468
+ var saveArgsCollector = new List < Dictionary < string , object > > ( ) ;
469
+ userProfileServiceMock . Setup ( up => up . Save ( Capture . In ( saveArgsCollector ) ) ) ;
459
470
var optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object ,
460
471
LoggerMock . Object , ErrorHandlerMock . Object , userProfileServiceMock . Object ) ;
461
472
var userContext = optimizely . CreateUserContext ( UserID ) ;
473
+ var expectedUserProfile = new UserProfile ( UserID , new Dictionary < string , Decision >
474
+ {
475
+ { "224" , new Decision ( "280" ) } ,
476
+ { "122238" , new Decision ( "122240" ) } ,
477
+ } ) ;
462
478
463
479
_ = userContext . DecideForKeys ( flagKeys ) ;
464
480
@@ -472,6 +488,7 @@ public void DecideForKeysWithUspShouldOnlyLookupSaveOnceWithMultipleFlags()
472
488
userProfileServiceMock . Verify ( l => l . Lookup ( UserID ) , Times . Once ) ;
473
489
userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) ,
474
490
Times . Once ) ;
491
+ Assert . AreEqual ( saveArgsCollector . First ( ) , expectedUserProfile . ToMap ( ) ) ;
475
492
}
476
493
477
494
[ Test ]
@@ -507,14 +524,23 @@ public void DecideForKeysWithOneFlag()
507
524
#endregion DecideForKeys
508
525
509
526
#region DecideAll
510
-
527
+
511
528
[ Test ]
512
- public void DecideAllWithUspShouldOnlyLookupSaveOnce ( )
529
+ public void DecideAllWithUpsShouldOnlyLookupSaveOnce ( )
513
530
{
514
- var userProfileServiceMock = makeUserProfileServiceMock ( ) ;
531
+ var userProfileServiceMock = MakeUserProfileServiceMock ( ) ;
532
+ var saveArgsCollector = new List < Dictionary < string , object > > ( ) ;
533
+ userProfileServiceMock . Setup ( up => up . Save ( Capture . In ( saveArgsCollector ) ) ) ;
515
534
var optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object ,
516
535
LoggerMock . Object , ErrorHandlerMock . Object , userProfileServiceMock . Object ) ;
517
536
var user = optimizely . CreateUserContext ( UserID ) ;
537
+ var expectedUserProfile = new UserProfile ( UserID , new Dictionary < string , Decision >
538
+ {
539
+ { "224" , new Decision ( "280" ) } ,
540
+ { "122238" , new Decision ( "122240" ) } ,
541
+ { "122241" , new Decision ( "122242" ) } ,
542
+ { "122235" , new Decision ( "122236" ) } ,
543
+ } ) ;
518
544
519
545
_ = user . DecideAll ( ) ;
520
546
@@ -526,8 +552,8 @@ public void DecideAllWithUspShouldOnlyLookupSaveOnce()
526
552
l => l . Log ( LogLevel . ERROR , "The UserProfileService returned an invalid map." ) ,
527
553
Times . Never ) ;
528
554
userProfileServiceMock . Verify ( l => l . Lookup ( UserID ) , Times . Once ) ;
529
- userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) ,
530
- Times . Once ) ;
555
+ userProfileServiceMock . Verify ( l => l . Save ( It . IsAny < Dictionary < string , object > > ( ) ) , Times . Once ) ;
556
+ Assert . AreEqual ( saveArgsCollector . First ( ) , expectedUserProfile . ToMap ( ) ) ;
531
557
}
532
558
533
559
[ Test ]
0 commit comments