Skip to content

Commit 80e73d4

Browse files
test: add coverage
1 parent 73658f6 commit 80e73d4

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

OptimizelySDK.Tests/OptimizelyUserContextTest.cs

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,52 @@ public void DecideWhenConfigIsNull()
425425
Assert.IsTrue(TestData.CompareObjects(decision, decisionExpected));
426426
}
427427

428+
[Test]
429+
public void SeparateDecideShouldHaveSameNumberOfUpsSaveOnlyOneLookup()
430+
{
431+
var experimentFlagKeys = new[] { "double_single_variable_feature", "integer_single_variable_feature" };
432+
// var rolloutFlagKey = "boolean_single_variable_feature";
433+
var userProfileServiceMock = MakeUserProfileServiceMock();
434+
var saveArgsCollector = new List<Dictionary<string, object>>();
435+
userProfileServiceMock.Setup(up => up.Save(Capture.In(saveArgsCollector)));
436+
var optimizely = new Optimizely(TestData.Datafile, EventDispatcherMock.Object,
437+
LoggerMock.Object, ErrorHandlerMock.Object, userProfileServiceMock.Object);
438+
var user = optimizely.CreateUserContext(UserID);
439+
var expectedUserProfileExperiment1 = new UserProfile(UserID, new Dictionary<string, Decision>
440+
{
441+
{ "224", new Decision("280") },
442+
{ "122238", new Decision("122240") },
443+
});
444+
var expectedUserProfileExperiment2 = new UserProfile(UserID, new Dictionary<string, Decision>
445+
{
446+
{ "224", new Decision("280") },
447+
{ "122238", new Decision("122240") },
448+
{ "122241", new Decision("122242") },
449+
});
450+
// var expectedUserProfileRollout = new UserProfile(UserID, new Dictionary<string, Decision>
451+
// {
452+
// // expected decisions for rollout
453+
// });
454+
455+
user.Decide(experimentFlagKeys[0]);
456+
user.Decide(experimentFlagKeys[1]);
457+
// user.Decide(rolloutFlagKey); // TODO: Test UPS with rollout?
458+
459+
LoggerMock.Verify(
460+
l => l.Log(LogLevel.INFO,
461+
"We were unable to get a user profile map from the UserProfileService."),
462+
Times.Never);
463+
LoggerMock.Verify(
464+
l => l.Log(LogLevel.ERROR, "The UserProfileService returned an invalid map."),
465+
Times.Never);
466+
userProfileServiceMock.Verify(l => l.Lookup(UserID), Times.Once);
467+
userProfileServiceMock.Verify(l => l.Save(It.IsAny<Dictionary<string, object>>()),
468+
Times.Exactly(2));
469+
Assert.AreEqual(saveArgsCollector[0], expectedUserProfileExperiment1.ToMap());
470+
Assert.AreEqual(saveArgsCollector[1], expectedUserProfileExperiment2.ToMap());
471+
// Assert.AreEqual(saveArgsCollector[2], expectedUserProfileRollout.ToMap());
472+
}
473+
428474
[Test]
429475
public void DecideWithUpsShouldOnlyLookupSaveOnce()
430476
{
@@ -441,7 +487,7 @@ public void DecideWithUpsShouldOnlyLookupSaveOnce()
441487
{ "122238", new Decision("122240") },
442488
});
443489

444-
_ = user.Decide(flagKeyFromTestDataJson);
490+
user.Decide(flagKeyFromTestDataJson);
445491

446492
LoggerMock.Verify(
447493
l => l.Log(LogLevel.INFO,
@@ -476,7 +522,7 @@ public void DecideForKeysWithUpsShouldOnlyLookupSaveOnceWithMultipleFlags()
476522
{ "122238", new Decision("122240") },
477523
});
478524

479-
_ = userContext.DecideForKeys(flagKeys);
525+
userContext.DecideForKeys(flagKeys);
480526

481527
LoggerMock.Verify(
482528
l => l.Log(LogLevel.INFO,
@@ -543,7 +589,7 @@ public void DecideAllWithUpsShouldOnlyLookupSaveOnce()
543589
{ "188880", new Decision("188881") },
544590
});
545591

546-
_ = user.DecideAll();
592+
user.DecideAll();
547593

548594
LoggerMock.Verify(
549595
l => l.Log(LogLevel.INFO,

OptimizelySDK/Optimizely.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -927,13 +927,15 @@ internal OptimizelyDecision Decide(OptimizelyUserContext user,
927927
decision = flagDecisionResult.ResultObject;
928928
}
929929

930+
// TODO: Fix when the flag is a rollout instead of an experiment
931+
DecisionService.AddDecisionToUnitOfWork(userId, decision.Experiment?.Id,
932+
new Decision(decision.Variation?.Id ?? ""));
933+
930934
var featureEnabled = false;
931935

932936
if (decision?.Variation != null)
933937
{
934938
featureEnabled = decision.Variation.FeatureEnabled.GetValueOrDefault();
935-
DecisionService.AddDecisionToUnitOfWork(userId, decision.Experiment?.Id,
936-
new Decision(decision.Variation.Id));
937939
}
938940

939941
if (featureEnabled)
@@ -1077,7 +1079,7 @@ OptimizelyDecideOption[] options
10771079
decisionDictionary.Add(key, decision);
10781080
}
10791081
}
1080-
1082+
10811083
DecisionService.CommitDecisionsToUserProfileService();
10821084

10831085
return decisionDictionary;

0 commit comments

Comments
 (0)