public void DoIt()
        {
            IFeatureConfiguration features = new FeatureConfiguration
            {
                new BooleanToggle("Feature1", true),
                new DateRangeToggle(
                    "Feature2",
                    true,
                    DateTime.Now.AddDays(-2),
                    DateTime.Now.AddDays(3)),
                new EstablishedFeatureToggle("establishedFeature")
            };

            var mainFeature = new BooleanToggle("mainFeature", true);
            var subFeature1 = new BooleanToggle("subFeature1", true);
            var subFeature2 = new BooleanToggle("subFeature2", true);

            var dependency1 = new DependencyToggle(subFeature1, mainFeature);
            var dependency2 = new DependencyToggle(subFeature2, mainFeature);

            features.Add(dependency1);
            features.Add(dependency2);

            features.Add(new EstablishedFeatureToggle("establishedFeature"));

            Console.WriteLine(features.WhatDoIHave());
        }
        public void DoIt()
        {
            IFeatureConfiguration features = new FeatureConfiguration
                {
                    new BooleanToggle("Feature1", true),
                    new DateRangeToggle(
                        "Feature2",
                        true,
                        DateTime.Now.AddDays(-2),
                        DateTime.Now.AddDays(3)),
                    new EstablishedFeatureToggle("establishedFeature")
                };

            var mainFeature = new BooleanToggle("mainFeature", true);
            var subFeature1 = new BooleanToggle("subFeature1", true);
            var subFeature2 = new BooleanToggle("subFeature2", true);

            var dependency1 = new DependencyToggle(subFeature1, mainFeature);
            var dependency2 = new DependencyToggle(subFeature2, mainFeature);
            features.Add(dependency1);
            features.Add(dependency2);

            features.Add(new EstablishedFeatureToggle("establishedFeature"));

            Console.WriteLine(features.WhatDoIHave());
        }
示例#3
0
        public void Freeze_Freezes_Toggle()
        {
            var toggle = new BooleanToggle(TestName, true);

            toggle.Freeze();
            Assert.IsTrue(toggle.IsFrozen);
        }
        public void AddDependency_Throws_If_Object_Is_Frozen()
        {
            var toggle = new DependencyToggle(new BooleanToggle(ToggleName, true));
            toggle.Freeze();

            var dependency = new BooleanToggle("a", true);
            Assert.Throws<ToggleFrozenException>(() => toggle.AddDependency(dependency));
        }
示例#5
0
        public void ToString_Outputs_Object_State()
        {
            var    toggle = new BooleanToggle(TestName, true);
            string output = toggle.ToString();

            StringAssert.Contains(TestName, output);
            StringAssert.Contains(bool.TrueString, output);
        }
示例#6
0
        public void Construction_Sets_Enabled()
        {
            var toggle = new BooleanToggle(TestName, true);

            Assert.IsTrue(toggle.IsEnabled());

            toggle = new BooleanToggle(TestName, false);
            Assert.IsFalse(toggle.IsEnabled());
        }
        public void AddDependency_Throws_If_Object_Is_Frozen()
        {
            var toggle = new DependencyToggle(new BooleanToggle(ToggleName, true));

            toggle.Freeze();

            var dependency = new BooleanToggle("a", true);

            Assert.Throws <ToggleFrozenException>(() => toggle.AddDependency(dependency));
        }
        public void Can_Find_Feature_Toggle_By_Name()
        {
            const string toggleName = "testName";

            var toggle = new BooleanToggle(toggleName, true);

            var featureConfiguration = new FeatureConfiguration { toggle };

            var locator = new LocateByNameStrategy(featureConfiguration, toggleName);
            Assert.AreSame(toggle, locator.Locate());
        }
示例#9
0
        public void Add_Adds_Feature_By_Name()
        {
            var configuration = new FeatureConfiguration();
            var expected      = new BooleanToggle(TestFeatureName, true);

            configuration.Add(expected);

            var actual = configuration.Get(TestFeatureName);

            Assert.AreSame(expected, actual);
        }
        public void Add_Adds_Feature_By_Name()
        {
            var configuration = new FeatureConfiguration();
            var expected = new BooleanToggle(TestFeatureName, true);

            configuration.Add(expected);

            var actual = configuration.Get(TestFeatureName);

            Assert.AreSame(expected, actual);
        }
        public void Can_Add_Dependencies_To_Toggle()
        {
            var toggle = new DependencyToggle(new BooleanToggle(ToggleName, true));

            Assert.IsFalse(toggle.Dependencies.Any());

            var dependency = new BooleanToggle("a", true);

            toggle.AddDependency(dependency);

            Assert.IsTrue(toggle.Dependencies.Any());
            Assert.AreSame(toggle.Dependencies.Single(), dependency);
        }
        public void Add_Replaces_Feature_With_Name()
        {
            var configuration = new FeatureConfiguration();

            var original = new BooleanToggle(TestFeatureName, false);
            var expected = new BooleanToggle(TestFeatureName, true);

            configuration.Add(original);
            configuration.Add(expected);

            var actual = configuration.Get(TestFeatureName);

            Assert.AreSame(expected, actual);
        }
        public void AssertConfigurationIsValid_Returns_False_For_Non_Circular_Dpendency()
        {
            var toggle1 = new DependencyToggle(new BooleanToggle(ToggleName, true));
            var toggle2 = new DependencyToggle(new BooleanToggle(ToggleName, true));
            var toggle3 = new DependencyToggle(new BooleanToggle(ToggleName, true));
            var toggle4 = new BooleanToggle(ToggleName, true);

            toggle1.AddDependency(toggle2);
            toggle2.AddDependency(toggle3);
            toggle2.AddDependency(toggle4);
            toggle3.AddDependency(toggle4);

            Assert.DoesNotThrow(toggle1.AssertConfigurationIsValid);
        }
示例#14
0
        public void IsEnabled_Returns_False_For_Enabled_Features()
        {
            var configuration = new FeatureConfiguration();

            const bool expected = false;

            var feature = new BooleanToggle(TestFeatureName, expected);

            configuration.Add(feature);

            var actual = configuration.IsEnabled(TestFeatureName);

            Assert.AreEqual(expected, actual);
        }
示例#15
0
        public void Can_Find_Feature_Toggle_By_Name()
        {
            const string toggleName = "testName";

            var toggle = new BooleanToggle(toggleName, true);

            var featureConfiguration = new FeatureConfiguration {
                toggle
            };

            var locator = new LocateByNameStrategy(featureConfiguration, toggleName);

            Assert.AreSame(toggle, locator.Locate());
        }
        public void AssertConfigurationIsValid_Returns_False_For_Non_Circular_Dpendency()
        {
            var toggle1 = new DependencyToggle(new BooleanToggle(ToggleName, true));
            var toggle2 = new DependencyToggle(new BooleanToggle(ToggleName, true));
            var toggle3 = new DependencyToggle(new BooleanToggle(ToggleName, true));
            var toggle4 = new BooleanToggle(ToggleName, true);

            toggle1.AddDependency(toggle2);
            toggle2.AddDependency(toggle3);
            toggle2.AddDependency(toggle4);
            toggle3.AddDependency(toggle4);

            Assert.DoesNotThrow(toggle1.AssertConfigurationIsValid);
        }
示例#17
0
        public void Add_Replaces_Feature_With_Name()
        {
            var configuration = new FeatureConfiguration();

            var original = new BooleanToggle(TestFeatureName, false);
            var expected = new BooleanToggle(TestFeatureName, true);

            configuration.Add(original);
            configuration.Add(expected);

            var actual = configuration.Get(TestFeatureName);

            Assert.AreSame(expected, actual);
        }
示例#18
0
        public void Clear_Clears_Features_From_Configuration()
        {
            var configuration = new FeatureConfiguration();

            const bool expected = false;

            var feature = new BooleanToggle(TestFeatureName, expected);

            configuration.Add(feature);

            configuration.Clear();

            Assert.IsNull(configuration.Get(TestFeatureName));
            Assert.AreEqual(0, configuration.Count);
        }
示例#19
0
        public void Can_Enumerate_Over_Feature_Toggles()
        {
            var configuration = new FeatureConfiguration();

            var f1 = new BooleanToggle("f1", true);

            configuration.Add(f1);

            var f2 = new BooleanToggle("f2", true);

            configuration.Add(f2);

            Assert.IsTrue(configuration.Any(x => x == f1));
            Assert.IsTrue(configuration.Any(x => x == f2));
        }
示例#20
0
        public void Can_Enumerate_Over_Feature_Toggles_Via_Base_IEnumerable_Interface()
        {
            var configuration = new FeatureConfiguration();

            var f1 = new BooleanToggle("f1", true);

            configuration.Add(f1);

            var f2 = new BooleanToggle("f2", true);

            configuration.Add(f2);

            IEnumerable baseConfiguration = configuration;
            var         enumerator        = baseConfiguration.GetEnumerator();

            Assert.IsTrue(enumerator.MoveNext());
        }
示例#21
0
        public void WhatDoIHave_Returns_Diagnostic_String_On_Feature_Toggle_Instances()
        {
            var configuration = new FeatureConfiguration();

            var f1 = new BooleanToggle("f1", true);

            configuration.Add(f1);

            var f2 = new BooleanToggle("f2", false);

            configuration.Add(f2);

            string diagnostics = configuration.WhatDoIHave();

            StringAssert.Contains("f1", diagnostics);
            StringAssert.Contains(bool.TrueString, diagnostics);

            StringAssert.Contains("f2", diagnostics);
            StringAssert.Contains(bool.FalseString, diagnostics);
        }
示例#22
0
        private IFeatureToggle ConvertToFeatureToggle(ToggleConfig config)
        {
            IFeatureToggle toggle;

            if (config.IsEstablished)
            {
                toggle = new EstablishedFeatureToggle(config.Name);
            }
            else if ((config.FromDate != null) || (config.ToDate != null))
            {
                toggle = new DateRangeToggle(config.Name, config.Enabled, config.FromDate, config.ToDate);
            }
            else
            {
                toggle = new BooleanToggle(config.Name, config.Enabled);
            }

            return(string.IsNullOrEmpty(config.Dependencies)
                ? toggle
                : new DependencyToggle(toggle));
        }
示例#23
0
        public void Initialize_From_Source_Initializes_From_Custom_Reader()
        {
            var reader = new Mock <IConfigurationReader>();

            var feature1 = new BooleanToggle("f1", true);
            var feature2 = new BooleanToggle("f2", true);

            var features = new[]
            {
                feature1, feature2
            };

            reader.Setup(x => x.GetFeatures()).Returns(features);

            var configuration = new FeatureConfiguration();

            configuration.Initialize(x => x.FromSource(reader.Object));

            Assert.AreSame(feature1, configuration.Get("f1"));
            Assert.AreSame(feature2, configuration.Get("f2"));

            reader.VerifyAll();
        }
        public void Clear_Clears_Features_From_Configuration()
        {
            var configuration = new FeatureConfiguration();

            const bool expected = false;

            var feature = new BooleanToggle(TestFeatureName, expected);
            configuration.Add(feature);

            configuration.Clear();

            Assert.IsNull(configuration.Get(TestFeatureName));
            Assert.AreEqual(0, configuration.Count);
        }
示例#25
0
        public void Construction_Sets_Name()
        {
            var toggle = new BooleanToggle(TestName, true);

            Assert.AreEqual(TestName, toggle.Name);
        }
示例#26
0
        public void Feature_Is_Unfrozen_By_Default()
        {
            var toggle = new BooleanToggle(TestName, true);

            Assert.IsFalse(toggle.IsFrozen);
        }
        public void Can_Enumerate_Over_Feature_Toggles_Via_Base_IEnumerable_Interface()
        {
            var configuration = new FeatureConfiguration();

            var f1 = new BooleanToggle("f1", true);
            configuration.Add(f1);

            var f2 = new BooleanToggle("f2", true);
            configuration.Add(f2);

            IEnumerable baseConfiguration = configuration;
            var enumerator = baseConfiguration.GetEnumerator();

            Assert.IsTrue(enumerator.MoveNext());
        }
        public void Initialize_From_Source_Initializes_From_Custom_Reader()
        {
            var reader = new Mock<IConfigurationReader>();

            var feature1 = new BooleanToggle("f1", true);
            var feature2 = new BooleanToggle("f2", true);

            var features = new[]
                {
                    feature1, feature2
                };

            reader.Setup(x => x.GetFeatures()).Returns(features);

            var configuration = new FeatureConfiguration();
            configuration.Initialize(x => x.FromSource(reader.Object));

            Assert.AreSame(feature1, configuration.Get("f1"));
            Assert.AreSame(feature2, configuration.Get("f2"));

            reader.VerifyAll();
        }
        private IFeatureToggle ConvertToFeatureToggle(ToggleConfig config)
        {
            IFeatureToggle toggle;

            if (config.IsEstablished)
            {
                toggle = new EstablishedFeatureToggle(config.Name);
            }
            else if ((config.FromDate != null) || (config.ToDate != null))
            {
                toggle = new DateRangeToggle(config.Name, config.Enabled, config.FromDate, config.ToDate);
            }
            else
            {
                toggle = new BooleanToggle(config.Name, config.Enabled);
            }

            return string.IsNullOrEmpty(config.Dependencies)
                ? toggle
                : new DependencyToggle(toggle);
        }
        public void IsEnabled_Returns_True_For_Enabled_Features()
        {
            var configuration = new FeatureConfiguration();

            const bool expected = true;

            var feature = new BooleanToggle(TestFeatureName, expected);
            configuration.Add(feature);

            var actual = configuration.IsEnabled(TestFeatureName);

            Assert.AreEqual(expected, actual);
        }
        public void WhatDoIHave_Returns_Diagnostic_String_On_Feature_Toggle_Instances()
        {
            var configuration = new FeatureConfiguration();

            var f1 = new BooleanToggle("f1", true);
            configuration.Add(f1);

            var f2 = new BooleanToggle("f2", false);
            configuration.Add(f2);

            string diagnostics = configuration.WhatDoIHave();

            StringAssert.Contains("f1", diagnostics);
            StringAssert.Contains(bool.TrueString, diagnostics);

            StringAssert.Contains("f2", diagnostics);
            StringAssert.Contains(bool.FalseString, diagnostics);
        }
        public void Can_Enumerate_Over_Feature_Toggles()
        {
            var configuration = new FeatureConfiguration();

            var f1 = new BooleanToggle("f1", true);
            configuration.Add(f1);

            var f2 = new BooleanToggle("f2", true);
            configuration.Add(f2);

            Assert.IsTrue(configuration.Any(x => x == f1));
            Assert.IsTrue(configuration.Any(x => x == f2));
        }
        public void Can_Add_Dependencies_To_Toggle()
        {
            var toggle = new DependencyToggle(new BooleanToggle(ToggleName, true));

            Assert.IsFalse(toggle.Dependencies.Any());

            var dependency = new BooleanToggle("a", true);
            toggle.AddDependency(dependency);

            Assert.IsTrue(toggle.Dependencies.Any());
            Assert.AreSame(toggle.Dependencies.Single(), dependency);
        }