Exemple #1
0
        public void TestGetOptimizelyConfigSDKAndEnvironmentKeyDefault()
        {
            var datafileProjectConfig   = DatafileProjectConfig.Create(TestData.DuplicateRuleKeysDatafile, new NoOpLogger(), new ErrorHandler.NoOpErrorHandler());
            var optimizelyConfigService = new OptimizelyConfigService(datafileProjectConfig);
            var optimizelyConfig        = optimizelyConfigService.GetOptimizelyConfig();

            Assert.AreEqual(optimizelyConfig.SDKKey, "");
            Assert.AreEqual(optimizelyConfig.EnvironmentKey, "");
        }
Exemple #2
0
        public void TestGetOptimizelyConfigWithDuplicateExperimentKeys()
        {
            var datafileProjectConfig   = DatafileProjectConfig.Create(TestData.DuplicateExpKeysDatafile, new NoOpLogger(), new ErrorHandler.NoOpErrorHandler());
            var optimizelyConfigService = new OptimizelyConfigService(datafileProjectConfig);
            var optimizelyConfig        = optimizelyConfigService.GetOptimizelyConfig();

            Assert.AreEqual(optimizelyConfig.ExperimentsMap.Count, 1);

            var experimentMapFlag1 = optimizelyConfig.FeaturesMap["flag1"].ExperimentsMap; //9300000007569
            var experimentMapFlag2 = optimizelyConfig.FeaturesMap["flag2"].ExperimentsMap; // 9300000007573

            Assert.AreEqual(experimentMapFlag1["targeted_delivery"].Id, "9300000007569");
            Assert.AreEqual(experimentMapFlag2["targeted_delivery"].Id, "9300000007573");
        }
Exemple #3
0
        public void TestGetOptimizelyConfigWithDuplicateRuleKeys()
        {
            var datafileProjectConfig   = DatafileProjectConfig.Create(TestData.DuplicateRuleKeysDatafile, new NoOpLogger(), new ErrorHandler.NoOpErrorHandler());
            var optimizelyConfigService = new OptimizelyConfigService(datafileProjectConfig);
            var optimizelyConfig        = optimizelyConfigService.GetOptimizelyConfig();

            Assert.AreEqual(optimizelyConfig.ExperimentsMap.Count, 0);

            var rolloutFlag1 = optimizelyConfig.FeaturesMap["flag_1"].DeliveryRules[0]; // 9300000004977,
            var rolloutFlag2 = optimizelyConfig.FeaturesMap["flag_2"].DeliveryRules[0]; // 9300000004979
            var rolloutFlag3 = optimizelyConfig.FeaturesMap["flag_3"].DeliveryRules[0]; // 9300000004981

            Assert.AreEqual(rolloutFlag1.Id, "9300000004977");
            Assert.AreEqual(rolloutFlag1.Key, "targeted_delivery");
            Assert.AreEqual(rolloutFlag2.Id, "9300000004979");
            Assert.AreEqual(rolloutFlag2.Key, "targeted_delivery");
            Assert.AreEqual(rolloutFlag3.Id, "9300000004981");
            Assert.AreEqual(rolloutFlag3.Key, "targeted_delivery");
        }
Exemple #4
0
        public void TestGetOptimizelyConfigService()
        {
            var datafileProjectConfig = DatafileProjectConfig.Create(TestData.TypedAudienceDatafile, new NoOpLogger(), new ErrorHandler.NoOpErrorHandler());
            IDictionary <string, OptimizelyExperiment> experimentsMap = new Dictionary <string, OptimizelyExperiment>
            {
                {
                    "feat_with_var_test", new OptimizelyExperiment(
                        id: "11564051718",
                        key: "feat_with_var_test",
                        audiences: "",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "variation_2", new OptimizelyVariation(
                                id: "11617170975",
                                key: "variation_2",
                                featureEnabled: true,
                                variablesMap: new Dictionary <string, OptimizelyVariable>
                            {
                                {
                                    "x", new OptimizelyVariable(
                                        id: "11535264366",
                                        key: "x",
                                        type: "string",
                                        value: "xyz")
                                }
                            })
                        }
                    }
                        )
                },
                {
                    "typed_audience_experiment", new OptimizelyExperiment(
                        id: "1323241597",
                        key: "typed_audience_experiment",
                        audiences: "",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "A", new OptimizelyVariation(
                                id: "1423767503",
                                key: "A",
                                featureEnabled: null,
                                variablesMap: new Dictionary <string, OptimizelyVariable> ())
                        }
                    }
                        )
                },
                {
                    "audience_combinations_experiment", new OptimizelyExperiment(
                        id: "1323241598",
                        key: "audience_combinations_experiment",
                        audiences: "(\"exactString\" OR \"substringString\") AND (\"exists\" OR \"exactNumber\" OR \"gtNumber\" OR \"ltNumber\" OR \"exactBoolean\")",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "A", new OptimizelyVariation(
                                id: "1423767504",
                                key: "A",
                                featureEnabled: null,
                                variablesMap: new Dictionary <string, OptimizelyVariable> ())
                        }
                    }
                        )
                },
                {
                    "feat2_with_var_test", new OptimizelyExperiment(
                        id: "1323241599",
                        key: "feat2_with_var_test",
                        audiences: "(\"exactString\" OR \"substringString\") AND (\"exists\" OR \"exactNumber\" OR \"gtNumber\" OR \"ltNumber\" OR \"exactBoolean\")",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "variation_2", new OptimizelyVariation(
                                id: "1423767505",
                                key: "variation_2",
                                featureEnabled: true,
                                variablesMap: new Dictionary <string, OptimizelyVariable>
                            {
                                {
                                    "z", new OptimizelyVariable(
                                        id: "11535264367",
                                        key: "z",
                                        type: "integer",
                                        value: "150")
                                }
                            })
                        }
                    }
                        )
                }
            };

            var featuresMap = new Dictionary <string, OptimizelyFeature>
            {
                {
                    "feat_no_vars", new OptimizelyFeature(
                        id: "11477755619",
                        key: "feat_no_vars",
                        experimentRules: new List <OptimizelyExperiment>(),
                        deliveryRules: new List <OptimizelyExperiment>()
                    {
                        new OptimizelyExperiment(
                            id: "11488548027",
                            key: "feat_no_vars_rule",
                            audiences: "",
                            variationsMap: new Dictionary <string, OptimizelyVariation>
                        {
                            {
                                "11557362669", new OptimizelyVariation(
                                    id: "11557362669",
                                    key: "11557362669",
                                    featureEnabled: true,
                                    variablesMap: new Dictionary <string, OptimizelyVariable>())
                            }
                        }
                            )
                    },
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>(),
                        variablesMap: new Dictionary <string, OptimizelyVariable>())
                },
                {
                    "feat_with_var", new OptimizelyFeature(
                        id: "11567102051",
                        key: "feat_with_var",
                        experimentRules: new List <OptimizelyExperiment>()
                    {
                        new OptimizelyExperiment(
                            id: "11564051718",
                            key: "feat_with_var_test",
                            audiences: "",
                            variationsMap: new Dictionary <string, OptimizelyVariation>
                        {
                            {
                                "variation_2", new OptimizelyVariation(
                                    id: "11617170975",
                                    key: "variation_2",
                                    featureEnabled: true,
                                    variablesMap: new Dictionary <string, OptimizelyVariable>
                                {
                                    {
                                        "x", new OptimizelyVariable(
                                            id: "11535264366",
                                            key: "x",
                                            type: "string",
                                            value: "xyz")
                                    }
                                })
                            }
                        }
                            )
                    },
                        deliveryRules: new List <OptimizelyExperiment>()
                    {
                        new OptimizelyExperiment(
                            id: "11630490911",
                            key: "feat_with_var_rule",
                            audiences: "",
                            variationsMap: new Dictionary <string, OptimizelyVariation>
                        {
                            {
                                "11475708558", new OptimizelyVariation(
                                    id: "11475708558",
                                    key: "11475708558",
                                    featureEnabled: false,
                                    variablesMap: new Dictionary <string, OptimizelyVariable>()
                                {
                                    { "x", new OptimizelyVariable("11535264366", "x", "string", "x") }
                                })
                            }
                        }
                            )
                    },
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>
                    {
                        {
                            "feat_with_var_test", new OptimizelyExperiment(
                                id: "11564051718",
                                key: "feat_with_var_test",
                                audiences: "",
                                variationsMap: new Dictionary <string, OptimizelyVariation>
                            {
                                {
                                    "variation_2", new OptimizelyVariation(
                                        id: "11617170975",
                                        key: "variation_2",
                                        featureEnabled: true,
                                        variablesMap: new Dictionary <string, OptimizelyVariable>
                                    {
                                        {
                                            "x", new OptimizelyVariable(
                                                id: "11535264366",
                                                key: "x",
                                                type: "string",
                                                value: "xyz")
                                        }
                                    })
                                }
                            }
                                )
                        }
                    },
                        variablesMap: new Dictionary <string, OptimizelyVariable>
                    {
                        {
                            "x", new OptimizelyVariable(id: "11535264366", key: "x", type: "string", value: "x")
                        }
                    })
                },
                {
                    "feat2", new OptimizelyFeature(
                        id: "11567102052",
                        key: "feat2",
                        deliveryRules: new List <OptimizelyExperiment>()
                    {
                        new OptimizelyExperiment(
                            id: "11488548028",
                            key: "11488548028",
                            audiences: "(\"exactString\" OR \"substringString\") AND (\"exists\" OR \"exactNumber\" OR \"gtNumber\" OR \"ltNumber\" OR \"exactBoolean\")",
                            variationsMap: new Dictionary <string, OptimizelyVariation>
                        {
                            {
                                "11557362670", new OptimizelyVariation(
                                    id: "11557362670",
                                    key: "11557362670",
                                    featureEnabled: true,
                                    variablesMap: new Dictionary <string, OptimizelyVariable>()
                                    )
                            }
                        }
                            )
                    },
                        experimentRules: new List <OptimizelyExperiment>(),
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>(),
                        variablesMap: new Dictionary <string, OptimizelyVariable>())
                },
                {
                    "feat2_with_var", new OptimizelyFeature(
                        id: "11567102053",
                        key: "feat2_with_var",
                        deliveryRules: new List <OptimizelyExperiment>()
                    {
                        new OptimizelyExperiment(
                            id: "11630490912",
                            key: "11630490912",
                            audiences: "",
                            variationsMap: new Dictionary <string, OptimizelyVariation>
                        {
                            {
                                "11475708559", new OptimizelyVariation(
                                    id: "11475708559",
                                    key: "11475708559",
                                    featureEnabled: false,
                                    variablesMap: new Dictionary <string, OptimizelyVariable>()
                                {
                                    {
                                        "z", new OptimizelyVariable(
                                            id: "11535264367",
                                            key: "z",
                                            type: "integer",
                                            value: "10")
                                    }
                                })
                            }
                        }
                            )
                    },
                        experimentRules: new List <OptimizelyExperiment>()
                    {
                        new OptimizelyExperiment(
                            id: "1323241599",
                            key: "feat2_with_var_test",
                            audiences: "(\"exactString\" OR \"substringString\") AND (\"exists\" OR \"exactNumber\" OR \"gtNumber\" OR \"ltNumber\" OR \"exactBoolean\")",
                            variationsMap: new Dictionary <string, OptimizelyVariation>
                        {
                            {
                                "variation_2", new OptimizelyVariation(
                                    id: "1423767505",
                                    key: "variation_2",
                                    featureEnabled: true,
                                    variablesMap: new Dictionary <string, OptimizelyVariable>
                                {
                                    {
                                        "z", new OptimizelyVariable(
                                            id: "11535264367",
                                            key: "z",
                                            type: "integer",
                                            value: "150")
                                    }
                                })
                            }
                        }
                            )
                    },
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>
                    {
                        {
                            "feat2_with_var_test", new OptimizelyExperiment(
                                id: "1323241599",
                                key: "feat2_with_var_test",
                                audiences: "(\"exactString\" OR \"substringString\") AND (\"exists\" OR \"exactNumber\" OR \"gtNumber\" OR \"ltNumber\" OR \"exactBoolean\")",
                                variationsMap: new Dictionary <string, OptimizelyVariation>
                            {
                                {
                                    "variation_2", new OptimizelyVariation(
                                        id: "1423767505",
                                        key: "variation_2",
                                        featureEnabled: true,
                                        variablesMap: new Dictionary <string, OptimizelyVariable>
                                    {
                                        {
                                            "z", new OptimizelyVariable(
                                                id: "11535264367",
                                                key: "z",
                                                type: "integer",
                                                value: "150")
                                        }
                                    })
                                }
                            }
                                )
                        }
                    },
                        variablesMap: new Dictionary <string, OptimizelyVariable>
                    {
                        {
                            "z", new OptimizelyVariable(id: "11535264367", key: "z", type: "integer", value: "10")
                        }
                    })
                }
            };

            OptimizelyConfig optimizelyConfig         = new OptimizelyConfigService(datafileProjectConfig).GetOptimizelyConfig();
            OptimizelyConfig expectedOptimizelyConfig = new OptimizelyConfig(datafileProjectConfig.Revision,
                                                                             datafileProjectConfig.SDKKey,
                                                                             datafileProjectConfig.EnvironmentKey,
                                                                             attributes: new OptimizelyAttribute[]
            {
                new OptimizelyAttribute
                {
                    Id = "594015", Key = "house"
                },
                new OptimizelyAttribute
                {
                    Id = "594016", Key = "lasers"
                },
                new OptimizelyAttribute
                {
                    Id = "594017", Key = "should_do_it"
                },
                new OptimizelyAttribute
                {
                    Id = "594018", Key = "favorite_ice_cream"
                }
            },
                                                                             audiences: new OptimizelyAudience[]
            {
                new OptimizelyAudience("0", "$$dummy", "{\"type\": \"custom_attribute\", \"name\": \"$opt_dummy_attribute\", \"value\": \"impossible_value\"}"),
                new OptimizelyAudience("3468206643", "exactBoolean", "[\"and\",[\"or\",[\"or\",{\"name\":\"should_do_it\",\"type\":\"custom_attribute\",\"match\":\"exact\",\"value\":true}]]]"),
                new OptimizelyAudience("3468206646", "exactNumber", "[\"and\",[\"or\",[\"or\",{\"name\":\"lasers\",\"type\":\"custom_attribute\",\"match\":\"exact\",\"value\":45.5}]]]"),
                new OptimizelyAudience("3468206642", "exactString", "[\"and\", [\"or\", [\"or\", {\"name\": \"house\", \"type\": \"custom_attribute\", \"value\": \"Gryffindor\"}]]]"),
                new OptimizelyAudience("3988293899", "exists", "[\"and\",[\"or\",[\"or\",{\"name\":\"favorite_ice_cream\",\"type\":\"custom_attribute\",\"match\":\"exists\"}]]]"),
                new OptimizelyAudience("3468206647", "gtNumber", "[\"and\",[\"or\",[\"or\",{\"name\":\"lasers\",\"type\":\"custom_attribute\",\"match\":\"gt\",\"value\":70}]]]"),
                new OptimizelyAudience("3468206644", "ltNumber", "[\"and\",[\"or\",[\"or\",{\"name\":\"lasers\",\"type\":\"custom_attribute\",\"match\":\"lt\",\"value\":1.0}]]]"),
                new OptimizelyAudience("3468206645", "notChrome", "[\"and\", [\"or\", [\"not\", [\"or\", {\"name\": \"browser_type\", \"type\": \"custom_attribute\", \"value\":\"Chrome\"}]]]]"),
                new OptimizelyAudience("3468206648", "notExist", "[\"not\",{\"name\":\"input_value\",\"type\":\"custom_attribute\",\"match\":\"exists\"}]"),
                new OptimizelyAudience("3988293898", "substringString", "[\"and\",[\"or\",[\"or\",{\"name\":\"house\",\"type\":\"custom_attribute\",\"match\":\"substring\",\"value\":\"Slytherin\"}]]]"),
            },
                                                                             events: new OptimizelyEvent[]
            {
                new OptimizelyEvent()
                {
                    Id = "594089", Key = "item_bought", ExperimentIds = new string[] { "11564051718", "1323241597" }
                },
                new OptimizelyEvent()
                {
                    Id = "594090", Key = "user_signed_up", ExperimentIds = new string[] { "1323241598", "1323241599" }
                }
            },
                                                                             experimentsMap: experimentsMap,
                                                                             featuresMap: featuresMap,
                                                                             datafile: TestData.TypedAudienceDatafile);

            Assertions.AreEqual(expectedOptimizelyConfig, optimizelyConfig);
        }
Exemple #5
0
        public void TestGetOptimizelyConfigServiceNullConfig()
        {
            OptimizelyConfig optimizelyConfig = new OptimizelyConfigService(null).GetOptimizelyConfig();

            Assert.IsNull(optimizelyConfig);
        }
Exemple #6
0
        public void TestGetOptimizelyConfigService()
        {
            var datafileProjectConfig = DatafileProjectConfig.Create(TestData.TypedAudienceDatafile, new NoOpLogger(), new ErrorHandler.NoOpErrorHandler());
            IDictionary <string, OptimizelyExperiment> experimentsMap = new Dictionary <string, OptimizelyExperiment>
            {
                {
                    "feat_with_var_test", new OptimizelyExperiment(
                        id: "11564051718",
                        key: "feat_with_var_test",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "variation_2", new OptimizelyVariation(
                                id: "11617170975",
                                key: "variation_2",
                                featureEnabled: true,
                                variablesMap: new Dictionary <string, OptimizelyVariable>
                            {
                                {
                                    "x", new OptimizelyVariable(
                                        id: "11535264366",
                                        key: "x",
                                        type: "string",
                                        value: "xyz")
                                }
                            })
                        }
                    }
                        )
                },
                {
                    "typed_audience_experiment", new OptimizelyExperiment(
                        id: "1323241597",
                        key: "typed_audience_experiment",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "A", new OptimizelyVariation(
                                id: "1423767503",
                                key: "A",
                                featureEnabled: null,
                                variablesMap: new Dictionary <string, OptimizelyVariable> ())
                        }
                    }
                        )
                },
                {
                    "audience_combinations_experiment", new OptimizelyExperiment(
                        id: "1323241598",
                        key: "audience_combinations_experiment",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "A", new OptimizelyVariation(
                                id: "1423767504",
                                key: "A",
                                featureEnabled: null,
                                variablesMap: new Dictionary <string, OptimizelyVariable> ())
                        }
                    }
                        )
                },
                {
                    "feat2_with_var_test", new OptimizelyExperiment(
                        id: "1323241599",
                        key: "feat2_with_var_test",
                        variationsMap: new Dictionary <string, OptimizelyVariation>
                    {
                        {
                            "variation_2", new OptimizelyVariation(
                                id: "1423767505",
                                key: "variation_2",
                                featureEnabled: true,
                                variablesMap: new Dictionary <string, OptimizelyVariable>
                            {
                                {
                                    "z", new OptimizelyVariable(
                                        id: "11535264367",
                                        key: "z",
                                        type: "integer",
                                        value: "150")
                                }
                            })
                        }
                    }
                        )
                }
            };


            var featuresMap = new Dictionary <string, OptimizelyFeature>
            {
                {
                    "feat_no_vars", new OptimizelyFeature(
                        id: "11477755619",
                        key: "feat_no_vars",
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>(),
                        variablesMap: new Dictionary <string, OptimizelyVariable>())
                },
                {
                    "feat_with_var", new OptimizelyFeature(
                        id: "11567102051",
                        key: "feat_with_var",
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>
                    {
                        {
                            "feat_with_var_test", new OptimizelyExperiment(
                                id: "11564051718",
                                key: "feat_with_var_test",
                                variationsMap: new Dictionary <string, OptimizelyVariation>
                            {
                                {
                                    "variation_2", new OptimizelyVariation(
                                        id: "11617170975",
                                        key: "variation_2",
                                        featureEnabled: true,
                                        variablesMap: new Dictionary <string, OptimizelyVariable>
                                    {
                                        {
                                            "x", new OptimizelyVariable(
                                                id: "11535264366",
                                                key: "x",
                                                type: "string",
                                                value: "xyz")
                                        }
                                    })
                                }
                            }
                                )
                        }
                    },
                        variablesMap: new Dictionary <string, OptimizelyVariable>
                    {
                        {
                            "x", new OptimizelyVariable(id: "11535264366", key: "x", type: "string", value: "x")
                        }
                    })
                },
                {
                    "feat2", new OptimizelyFeature(
                        id: "11567102052",
                        key: "feat2",
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>(),
                        variablesMap: new Dictionary <string, OptimizelyVariable>())
                },
                {
                    "feat2_with_var", new OptimizelyFeature(
                        id: "11567102053",
                        key: "feat2_with_var",
                        experimentsMap: new Dictionary <string, OptimizelyExperiment>
                    {
                        {
                            "feat2_with_var_test", new OptimizelyExperiment(
                                id: "1323241599",
                                key: "feat2_with_var_test",
                                variationsMap: new Dictionary <string, OptimizelyVariation>
                            {
                                {
                                    "variation_2", new OptimizelyVariation(
                                        id: "1423767505",
                                        key: "variation_2",
                                        featureEnabled: true,
                                        variablesMap: new Dictionary <string, OptimizelyVariable>
                                    {
                                        {
                                            "z", new OptimizelyVariable(
                                                id: "11535264367",
                                                key: "z",
                                                type: "integer",
                                                value: "150")
                                        }
                                    })
                                }
                            }
                                )
                        }
                    },
                        variablesMap: new Dictionary <string, OptimizelyVariable>
                    {
                        {
                            "z", new OptimizelyVariable(id: "11535264367", key: "z", type: "integer", value: "10")
                        }
                    })
                }
            };

            OptimizelyConfig optimizelyConfig         = new OptimizelyConfigService(datafileProjectConfig).GetOptimizelyConfig();
            OptimizelyConfig expectedOptimizelyConfig = new OptimizelyConfig(datafileProjectConfig.Revision, experimentsMap, featuresMap);

            Assert.IsTrue(TestData.CompareObjects(optimizelyConfig, expectedOptimizelyConfig));
        }