Example #1
0
        public IFeatureManifest <TFeatureEnum> CreateFeatureManifest()
        {
            FeatureSetting <TFeatureEnum, TTenantEnum>[] featureSettings = _featureSettingsRepository.GetFeatureSettings();
            var manifest = new FeatureManifest <TFeatureEnum>();

            foreach (var setting in featureSettings)
            {
                FeatureVisibilityMode featureVisibilityMode = _httpContext.Request.Cookies[FeaturePreviewCookieName].IsNotNull()
                                                                                ? FeatureVisibilityMode.Preview
                                                                                : FeatureVisibilityMode.Normal;

                bool isAvailable = _featureSettingService
                                   .AllDependenciesAreSatisfiedForTheFeatureSetting(setting,
                                                                                    new Tuple
                                                                                    <FeatureVisibilityMode, TTenantEnum,
                                                                                     DateTime>(
                                                                                        featureVisibilityMode,
                                                                                        _tenancyContext.CurrentTenant,
                                                                                        _clock.Now));

                manifest.Add(setting.Feature,
                             new FeatureDescriptor <TFeatureEnum>(setting.Feature)
                {
                    Dependencies =
                        setting.Dependencies,
                    IsAvailable =
                        isAvailable,
                    Settings =
                        setting.Settings,
                });
            }

            return(manifest);
        }
		public void Setting_WhenInvokedAgainstFeatureNotAvailable_ThrowsException() {
			//arrange
			var featureManifest = new FeatureManifest<Feature> {
				{
					Feature.TestFeatureA,
					new FeatureDescriptor<Feature>(
						Feature.TestFeatureA) {
							IsAvailable =
								false,
							Settings =
								new Dictionary
									<string,
										dynamic> {
											{
												"SettingName"
												,
												"SettingValue"
												}
										}
						}
					}
			};

			//assert
			Assert.Throws<FeatureNotAvailableException>(() => Feature.TestFeatureA.Setting(
				FeatureSettingNames.TestFeature1.ExampleSettingName, featureManifest));
		}
			IsAvailable_WhenInvokedAgainstAnEstablishedFeature_ThrowsAnException_BecauseEstablishedFeaturesCannotBeAnythingOtherThanEnabled
			() {
			//arrange
			const string desiredSettingValue = "*****@*****.**";
			var featureManifest = new FeatureManifest<Feature> {
				{
					Feature.TestFeatureA,
					new FeatureDescriptor<Feature>(
						Feature.TestFeatureA) {
							IsEstablished =
								true,
							Settings =
								new Dictionary
									<string,
										dynamic> {
											{
												"ExampleSettingName"
												,
												desiredSettingValue
												}
										}
						}
					}
			};

			//act / assert
			Assert.Throws
				<EstablishedFeatureAvailabilityCheckException<Feature>>
				(() => Feature.TestFeatureA.IsAvailable(featureManifest));
		}
        public void Setting_WhenInvoked_ReturnsTheValueAssociatedWithThatSetting()
        {
            //arrange
            const string desiredSettingValue = "*****@*****.**";
            var          featureManifest     = new FeatureManifest <Feature> {
                {
                    Feature.TestFeatureE,
                    new FeatureDescriptor <Feature>(
                        Feature.TestFeatureE)
                    {
                        IsAvailable =
                            true,
                        Settings =
                            new Dictionary
                            <string,
                             dynamic> {
                            {
                                "ExampleSettingName"
                                ,
                                desiredSettingValue
                            }
                        }
                    }
                }
            };

            //act
            dynamic actualSettingValue =
                Feature.TestFeatureE.Setting(
                    FeatureSettingNames.TestFeature1.ExampleSettingName, featureManifest);

            //assert
            Assert.That(actualSettingValue == desiredSettingValue);
        }
        public void Setting_WhenInvokedAgainstFeatureNotAvailable_ThrowsException()
        {
            //arrange
            var featureManifest = new FeatureManifest <Feature> {
                {
                    Feature.TestFeatureA,
                    new FeatureDescriptor <Feature>(
                        Feature.TestFeatureA)
                    {
                        IsAvailable =
                            false,
                        Settings =
                            new Dictionary
                            <string,
                             dynamic> {
                            {
                                "SettingName"
                                ,
                                "SettingValue"
                            }
                        }
                    }
                }
            };

            //assert
            Assert.Throws <FeatureNotAvailableException>(() => Feature.TestFeatureA.Setting(
                                                             FeatureSettingNames.TestFeature1.ExampleSettingName, featureManifest));
        }
        IsAvailable_WhenInvokedAgainstAnEstablishedFeature_ThrowsAnException_BecauseEstablishedFeaturesCannotBeAnythingOtherThanEnabled
            ()
        {
            //arrange
            const string desiredSettingValue = "*****@*****.**";
            var          featureManifest     = new FeatureManifest <Feature> {
                {
                    Feature.TestFeatureA,
                    new FeatureDescriptor <Feature>(
                        Feature.TestFeatureA)
                    {
                        IsEstablished =
                            true,
                        Settings =
                            new Dictionary
                            <string,
                             dynamic> {
                            {
                                "ExampleSettingName"
                                ,
                                desiredSettingValue
                            }
                        }
                    }
                }
            };

            //act / assert
            Assert.Throws
            <EstablishedFeatureAvailabilityCheckException <Feature> >
                (() => Feature.TestFeatureA.IsAvailable(featureManifest));
        }
		public void IsEnabledInFeatureManifest_ReturnsTrue_WhenFeatureIsAvailable() {
			var m = new FeatureManifest<Feature> {
				{
					Feature.TestFeatureA,
					new FeatureDescriptor<Feature>(Feature.TestFeatureA)
					{IsAvailable = true,}
					}
			};

			Assert.That(Feature.TestFeatureA.IsAvailable(m));
		}
Example #8
0
        public void IsEnabledInFeatureManifest_ReturnsTrue_WhenFeatureIsAvailable()
        {
            var m = new FeatureManifest <Feature> {
                {
                    Feature.TestFeatureA,
                    new FeatureDescriptor <Feature>(Feature.TestFeatureA)
                    {
                        IsAvailable = true,
                    }
                }
            };

            Assert.That(Feature.TestFeatureA.IsAvailable(m));
        }
        public IFeatureManifest <TFeatureEnum> CreateFeatureManifest()
        {
            FeatureSetting <TFeatureEnum, TTenantEnum>[] featureSettings = _featureSettingRepository.GetFeatureSettings();
            var manifest = new FeatureManifest <TFeatureEnum>();

            foreach (var setting in featureSettings)
            {
                var isAvailable = _featureSettingService.AllDependenciesAreSatisfiedForTheFeatureSetting(setting, new EmptyArgs());

                manifest.Add(setting.Feature,
                             new FeatureDescriptor <TFeatureEnum>(setting.Feature)
                {
                    Dependencies =
                        setting.Dependencies,
                    IsAvailable =
                        isAvailable,
                    Settings =
                        setting.Settings,
                });
            }

            return(manifest);
        }
		public void Setting_WhenInvoked_ReturnsTheValueAssociatedWithThatSetting() {
			//arrange
			const string desiredSettingValue = "*****@*****.**";
			var featureManifest = new FeatureManifest<Feature> {
				{
					Feature.TestFeatureE,
					new FeatureDescriptor<Feature>(
						Feature.TestFeatureE) {
							IsAvailable =
								true,
							Settings =
								new Dictionary
									<string,
										dynamic> {
											{
												"ExampleSettingName"
												,
												desiredSettingValue
												}
										}
						}
					}
			};

			//act
			dynamic actualSettingValue =
				Feature.TestFeatureE.Setting(
					FeatureSettingNames.TestFeature1.ExampleSettingName, featureManifest);

			//assert
			Assert.That(actualSettingValue == desiredSettingValue);
		}