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);
        }
Exemplo n.º 5
0
 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));
        }