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)); }
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); }