public void TestDefaultDecideOptions() { var flagKey = "multi_variate_feature"; var variablesExpected = Optimizely.GetAllFeatureVariables(flagKey, UserID); var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.DISABLE_DECISION_EVENT }; var optimizely = new Optimizely(TestData.Datafile, EventDispatcherMock.Object, LoggerMock.Object, ErrorHandlerMock.Object, defaultDecideOptions: decideOptions); var user = optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); var decision = user.Decide(flagKey); EventDispatcherMock.Verify(dispatcher => dispatcher.DispatchEvent(It.IsAny <LogEvent>()), Times.Never); Assert.AreEqual(decision.VariationKey, "Gred"); Assert.False(decision.Enabled); Assert.AreEqual(decision.Variables.ToDictionary(), variablesExpected.ToDictionary()); Assert.AreEqual(decision.RuleKey, "test_experiment_multivariate"); Assert.AreEqual(decision.FlagKey, flagKey); Assert.AreNotEqual(decision.UserContext, user); Assert.IsTrue(TestData.CompareObjects(decision.UserContext, user)); }
public void TestDecideOptionsByPassUPS() { var userProfileServiceMock = new Mock <UserProfileService>(); var flagKey = "string_single_variable_feature"; var experimentId = "122235"; var userId = "testUser3"; var variationKey = "control"; var fbVariationId = "122237"; var fbVariationKey = "variation"; var userProfile = new UserProfile(userId, new Dictionary <string, Decision> { { experimentId, new Decision(fbVariationId) } }); userProfileServiceMock.Setup(_ => _.Lookup(userId)).Returns(userProfile.ToMap()); var optimizely = new Optimizely(TestData.Datafile, EventDispatcherMock.Object, LoggerMock.Object, ErrorHandlerMock.Object, userProfileServiceMock.Object); var user = optimizely.CreateUserContext(userId); var projectConfig = DatafileProjectConfig.Create(TestData.Datafile, LoggerMock.Object, ErrorHandlerMock.Object); var variationUserProfile = user.Decide(flagKey); Assert.AreEqual(fbVariationKey, variationUserProfile.VariationKey); var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.IGNORE_USER_PROFILE_SERVICE }; variationUserProfile = user.Decide(flagKey, decideOptions); Assert.AreEqual(variationKey, variationUserProfile.VariationKey); }
public void DecideIncludeReasonsDecideOptions() { var flagKey = "invalid_key"; var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); var decision = user.Decide(flagKey); Assert.True(decision.Reasons.Length == 1); Assert.AreEqual(decision.Reasons[0], DecisionMessage.Reason(DecisionMessage.FLAG_KEY_INVALID, flagKey)); var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.INCLUDE_REASONS }; decision = user.Decide(flagKey, decideOptions); Assert.True(decision.Reasons.Length == 1); Assert.AreEqual(decision.Reasons[0], DecisionMessage.Reason(DecisionMessage.FLAG_KEY_INVALID, flagKey)); flagKey = "multi_variate_feature"; decision = user.Decide(flagKey); Assert.True(decision.Reasons.Length == 0); Assert.AreEqual(decision.VariationKey, "Gred"); Assert.False(decision.Enabled); Assert.AreEqual(decision.RuleKey, "test_experiment_multivariate"); Assert.AreEqual(decision.FlagKey, flagKey); Assert.AreNotEqual(decision.UserContext, user); Assert.IsTrue(TestData.CompareObjects(decision.UserContext, user)); Assert.True(decision.Reasons.IsNullOrEmpty()); decision = user.Decide(flagKey, decideOptions); Assert.True(decision.Reasons.Length > 0); Assert.AreEqual("User [testUserID] is in variation [Gred] of experiment [test_experiment_multivariate].", decision.Reasons[1]); Assert.AreEqual("The user \"testUserID\" is bucketed into experiment \"test_experiment_multivariate\" of feature \"multi_variate_feature\".", decision.Reasons[2]); }
public void DecideAllEnabledFlagsDefaultDecideOptionsPlusApiOptions() { var flagKey1 = "string_single_variable_feature"; var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.ENABLED_FLAGS_ONLY }; var optimizely = new Optimizely(TestData.Datafile, EventDispatcherMock.Object, LoggerMock.Object, ErrorHandlerMock.Object, defaultDecideOptions: decideOptions); var user = optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.EXCLUDE_VARIABLES }; var decisions = user.DecideAll(decideOptions); Assert.True(decisions.Count == 1); var expectedOptlyJson = new Dictionary <string, object>(); OptimizelyDecision expDecision1 = new OptimizelyDecision( "control", true, new OptimizelyJSON(expectedOptlyJson, ErrorHandlerMock.Object, LoggerMock.Object), "test_experiment_with_feature_rollout", flagKey1, user, new string[] { }); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey1], expDecision1)); }
public void DecideAllEnabledFlagsDefaultDecideOptions() { var flagKey1 = "string_single_variable_feature"; var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.ENABLED_FLAGS_ONLY }; var optimizely = new Optimizely(TestData.Datafile, EventDispatcherMock.Object, LoggerMock.Object, ErrorHandlerMock.Object, defaultDecideOptions: decideOptions); var variablesExpected1 = Optimizely.GetAllFeatureVariables(flagKey1, UserID); var user = optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); var decisions = user.DecideAll(); Assert.True(decisions.Count == 1); OptimizelyDecision expDecision1 = new OptimizelyDecision( "control", true, variablesExpected1, "test_experiment_with_feature_rollout", flagKey1, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey1], expDecision1)); }
public void TestNewDecisionReasonWithIncludeReasons() { var decisionReasons = new DecisionReasons(); var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.INCLUDE_REASONS }; decisionReasons.AddError(DecisionMessage.Reason(DecisionMessage.FLAG_KEY_INVALID, "invalid_key")); Assert.AreEqual(decisionReasons.ToReport(decideOptions.Contains(OptimizelyDecideOption.INCLUDE_REASONS))[0], "No flag was found for key \"invalid_key\"."); decisionReasons.AddError(DecisionMessage.Reason(DecisionMessage.VARIABLE_VALUE_INVALID, "invalid_key")); Assert.AreEqual(decisionReasons.ToReport(decideOptions.Contains(OptimizelyDecideOption.INCLUDE_REASONS))[1], "Variable value for key \"invalid_key\" is invalid or wrong type."); decisionReasons.AddInfo("Some info message."); Assert.AreEqual(decisionReasons.ToReport(decideOptions.Contains(OptimizelyDecideOption.INCLUDE_REASONS))[2], "Some info message."); }
public void TestDecideOptionsByPassUPSNeverCallsSaveVariation() { var userProfileServiceMock = new Mock <UserProfileService>(); var flagKey = "string_single_variable_feature"; var userId = "testUser3"; var variationKey = "control"; var optimizely = new Optimizely(TestData.Datafile, EventDispatcherMock.Object, LoggerMock.Object, ErrorHandlerMock.Object, userProfileServiceMock.Object); var user = optimizely.CreateUserContext(userId); var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.IGNORE_USER_PROFILE_SERVICE }; var variationUserProfile = user.Decide(flagKey, decideOptions); userProfileServiceMock.Verify(l => l.Save(It.IsAny <Dictionary <string, object> >()), Times.Never); Assert.AreEqual(variationKey, variationUserProfile.VariationKey); }
public void DecideExcludeVariablesDecideOptions() { var flagKey = "multi_variate_feature"; var variablesExpected = new Dictionary <string, object>(); var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); var decideOptions = new OptimizelyDecideOption[] { OptimizelyDecideOption.EXCLUDE_VARIABLES }; var decision = user.Decide(flagKey, decideOptions); Assert.AreEqual(decision.VariationKey, "Gred"); Assert.False(decision.Enabled); Assert.AreEqual(decision.Variables.ToDictionary(), variablesExpected); Assert.AreEqual(decision.RuleKey, "test_experiment_multivariate"); Assert.AreEqual(decision.FlagKey, flagKey); Assert.AreNotEqual(decision.UserContext, user); Assert.IsTrue(TestData.CompareObjects(decision.UserContext, user)); Assert.True(decision.Reasons.IsNullOrEmpty()); }