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 DecideForKeysWithOneFlag() { var flagKey = "multi_variate_feature"; var flagKeys = new string[] { flagKey }; var variablesExpected = Optimizely.GetAllFeatureVariables(flagKey, UserID); var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); var decisions = user.DecideForKeys(flagKeys); Assert.True(decisions.Count == 1); var decision = decisions[flagKey]; OptimizelyDecision expDecision = new OptimizelyDecision( "Gred", false, variablesExpected, "test_experiment_multivariate", flagKey, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decision, expDecision)); }
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 TestNewDecision() { var variableMap = new Dictionary <string, object>() { { "strField", "john doe" }, { "intField", 12 }, { "objectField", new Dictionary <string, object> () { { "inner_field_int", 3 } } } }; var optimizelyJSONUsingMap = new OptimizelyJSON(variableMap, ErrorHandlerMock.Object, LoggerMock.Object); string expectedStringObj = "{\"strField\":\"john doe\",\"intField\":12,\"objectField\":{\"inner_field_int\":3}}"; var optimizelyDecision = new OptimizelyDecision("var_key", true, optimizelyJSONUsingMap, "experiment", "feature_key", null, new string[0]); Assert.AreEqual(optimizelyDecision.VariationKey, "var_key"); Assert.AreEqual(optimizelyDecision.FlagKey, "feature_key"); Assert.AreEqual(optimizelyDecision.Variables.ToString(), expectedStringObj); Assert.AreEqual(optimizelyDecision.Reasons, new List <string>()); Assert.AreEqual(optimizelyDecision.RuleKey, "experiment"); Assert.True(optimizelyDecision.Enabled); }
public static void AreEqual(OptimizelyDecision expected, OptimizelyDecision actual) { Assert.AreEqual(expected.Enabled, actual.Enabled); Assert.AreEqual(expected.FlagKey, actual.FlagKey); AreEquivalent(expected.Reasons, actual.Reasons); Assert.AreEqual(expected.RuleKey, actual.RuleKey); AreEqual(expected.UserContext, actual.UserContext); Assert.AreEqual(expected.VariationKey, actual.VariationKey); }
public void DecideAllTwoFlag() { var flagKey1 = "multi_variate_feature"; var flagKey2 = "string_single_variable_feature"; var flagKeys = new string[] { flagKey1, flagKey2 }; var variablesExpected1 = Optimizely.GetAllFeatureVariables(flagKey1, UserID); var variablesExpected2 = Optimizely.GetAllFeatureVariables(flagKey2, UserID); var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); // Mocking objects. NotificationCallbackMock.Setup(nc => nc.TestDecisionCallback(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <UserAttributes>(), It.IsAny <Dictionary <string, object> >())); Optimizely.NotificationCenter.AddNotification(NotificationCenter.NotificationType.Decision, NotificationCallbackMock.Object.TestDecisionCallback); var decisions = user.DecideForKeys(flagKeys); var userAttributes = new UserAttributes { { "browser_type", "chrome" } }; Assert.True(decisions.Count == 2); NotificationCallbackMock.Verify(nc => nc.TestDecisionCallback(DecisionNotificationTypes.FLAG, UserID, userAttributes, It.IsAny <Dictionary <string, object> >()), Times.Exactly(2)); OptimizelyDecision expDecision1 = new OptimizelyDecision( "Gred", false, variablesExpected1, "test_experiment_multivariate", flagKey1, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey1], expDecision1)); OptimizelyDecision expDecision2 = new OptimizelyDecision( "control", true, variablesExpected2, "test_experiment_with_feature_rollout", flagKey2, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey2], expDecision2)); }
public void TestNewErrorDecision() { var optimizelyDecision = OptimizelyDecision.NewErrorDecision("var_key", null, "some error message", ErrorHandlerMock.Object, LoggerMock.Object); Assert.IsNull(optimizelyDecision.VariationKey); Assert.AreEqual(optimizelyDecision.FlagKey, "var_key"); Assert.AreEqual(optimizelyDecision.Variables.ToDictionary(), new Dictionary <string, object>()); Assert.AreEqual(optimizelyDecision.Reasons, new List <string>() { "some error message" }); Assert.IsNull(optimizelyDecision.RuleKey); Assert.False(optimizelyDecision.Enabled); }
public void DecideWhenConfigIsNull() { Optimizely optimizely = new Optimizely(TestData.UnsupportedVersionDatafile, EventDispatcherMock.Object, LoggerMock.Object, ErrorHandlerMock.Object); var flagKey = "multi_variate_feature"; var decisionExpected = OptimizelyDecision.NewErrorDecision( flagKey, new OptimizelyUserContext(optimizely, UserID, new UserAttributes(), ErrorHandlerMock.Object, LoggerMock.Object), DecisionMessage.SDK_NOT_READY, ErrorHandlerMock.Object, LoggerMock.Object); var user = optimizely.CreateUserContext(UserID); var decision = user.Decide(flagKey); Assert.IsTrue(TestData.CompareObjects(decision, decisionExpected)); }
public void DecideInvalidFlagKey() { var flagKey = "invalid_feature"; var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); var decisionExpected = OptimizelyDecision.NewErrorDecision( flagKey, user, DecisionMessage.Reason(DecisionMessage.FLAG_KEY_INVALID, flagKey), ErrorHandlerMock.Object, LoggerMock.Object); var decision = user.Decide(flagKey); Assert.IsTrue(TestData.CompareObjects(decision, decisionExpected)); }
public void DecideAllAllFlags() { var flagKey1 = "boolean_feature"; var flagKey2 = "double_single_variable_feature"; var flagKey3 = "integer_single_variable_feature"; var flagKey4 = "boolean_single_variable_feature"; var flagKey5 = "string_single_variable_feature"; var flagKey6 = "multi_variate_feature"; var flagKey7 = "mutex_group_feature"; var flagKey8 = "empty_feature"; var flagKey9 = "no_rollout_experiment_feature"; var flagKey10 = "unsupported_variabletype"; var variablesExpected1 = Optimizely.GetAllFeatureVariables(flagKey1, UserID); var variablesExpected2 = Optimizely.GetAllFeatureVariables(flagKey2, UserID); var variablesExpected3 = Optimizely.GetAllFeatureVariables(flagKey3, UserID); var variablesExpected4 = Optimizely.GetAllFeatureVariables(flagKey4, UserID); var variablesExpected5 = Optimizely.GetAllFeatureVariables(flagKey5, UserID); var variablesExpected6 = Optimizely.GetAllFeatureVariables(flagKey6, UserID); var variablesExpected7 = Optimizely.GetAllFeatureVariables(flagKey7, UserID); var variablesExpected8 = Optimizely.GetAllFeatureVariables(flagKey8, UserID); var variablesExpected9 = Optimizely.GetAllFeatureVariables(flagKey9, UserID); var variablesExpected10 = Optimizely.GetAllFeatureVariables(flagKey10, UserID); var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); // Mocking objects. NotificationCallbackMock.Setup(nc => nc.TestDecisionCallback(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <UserAttributes>(), It.IsAny <Dictionary <string, object> >())); Optimizely.NotificationCenter.AddNotification(NotificationCenter.NotificationType.Decision, NotificationCallbackMock.Object.TestDecisionCallback); var decisions = user.DecideAll(); var userAttributes = new UserAttributes { { "browser_type", "chrome" } }; Assert.True(decisions.Count == 10); NotificationCallbackMock.Verify(nc => nc.TestDecisionCallback(DecisionNotificationTypes.FLAG, UserID, userAttributes, It.IsAny <Dictionary <string, object> >()), Times.Exactly(10)); OptimizelyDecision expDecision1 = new OptimizelyDecision( null, false, variablesExpected1, null, flagKey1, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey1], expDecision1)); OptimizelyDecision expDecision2 = new OptimizelyDecision( "variation", false, variablesExpected2, "test_experiment_double_feature", flagKey2, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey2], expDecision2)); OptimizelyDecision expDecision3 = new OptimizelyDecision( "control", false, variablesExpected3, "test_experiment_integer_feature", flagKey3, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey3], expDecision3)); OptimizelyDecision expDecision4 = new OptimizelyDecision( "188881", false, variablesExpected4, "188880", flagKey4, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey4], expDecision4)); OptimizelyDecision expDecision5 = new OptimizelyDecision( "control", true, variablesExpected5, "test_experiment_with_feature_rollout", flagKey5, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey5], expDecision5)); OptimizelyDecision expDecision6 = new OptimizelyDecision( "Gred", false, variablesExpected6, "test_experiment_multivariate", flagKey6, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey6], expDecision6)); OptimizelyDecision expDecision7 = new OptimizelyDecision( null, false, variablesExpected7, null, flagKey7, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey7], expDecision7)); OptimizelyDecision expDecision8 = new OptimizelyDecision( null, false, variablesExpected8, null, flagKey8, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey8], expDecision8)); OptimizelyDecision expDecision9 = new OptimizelyDecision( null, false, variablesExpected9, null, flagKey9, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey9], expDecision9)); OptimizelyDecision expDecision10 = new OptimizelyDecision( null, false, variablesExpected10, null, flagKey10, user, new string[0]); Assert.IsTrue(TestData.CompareObjects(decisions[flagKey10], expDecision10)); }