Completed FeatureChecker.

pull/859/head
Halil ibrahim Kalkan 7 years ago
parent dda709bcb4
commit fcb90ff656

@ -18,6 +18,15 @@ namespace Volo.Abp.Features
AutoAddDefinitionProviders(context.Services);
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.Configure<FeatureOptions>(options =>
{
options.ValueProviders.Add<DefaultValueFeatureValueProvider>();
options.ValueProviders.Add<TenantFeatureValueProvider>();
});
}
private static void AutoAddDefinitionProviders(IServiceCollection services)
{
var definitionProviders = new List<Type>();

@ -0,0 +1,22 @@
using System.Threading.Tasks;
namespace Volo.Abp.Features
{
public class DefaultValueFeatureValueProvider : FeatureValueProvider
{
public const string ProviderName = "Default";
public override string Name => ProviderName;
public DefaultValueFeatureValueProvider(IFeatureStore settingStore)
: base(settingStore)
{
}
public override Task<string> GetOrNullAsync(FeatureDefinition setting)
{
return Task.FromResult(setting.DefaultValue);
}
}
}

@ -5,6 +5,7 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Features
{
[Dependency(TryRegister = true)]
public class NullFeatureStore : IFeatureStore, ISingletonDependency
{
public ILogger<NullFeatureStore> Logger { get; set; }

@ -5,6 +5,7 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Settings
{
[Dependency(TryRegister = true)]
public class NullSettingStore : ISettingStore, ISingletonDependency
{
public ILogger<NullSettingStore> Logger { get; set; }

@ -0,0 +1,53 @@
using Shouldly;
using System.Threading.Tasks;
using Volo.Abp.MultiTenancy;
using Xunit;
namespace Volo.Abp.Features
{
public class FeatureChecker_Tests : AbpFeaturesTestBase
{
private readonly IFeatureChecker _featureChecker;
private readonly ICurrentTenant _currentTenant;
public FeatureChecker_Tests()
{
_featureChecker = GetRequiredService<IFeatureChecker>();
_currentTenant = GetRequiredService<ICurrentTenant>();
}
[Fact]
public async Task IsEnabledAsync()
{
//Tenant is unknown
(await _featureChecker.IsEnabledAsync("BooleanTestFeature1")).ShouldBeFalse();
using (_currentTenant.Change(TestFeatureStore.Tenant1Id))
{
(await _featureChecker.IsEnabledAsync("BooleanTestFeature1")).ShouldBeTrue();
}
using (_currentTenant.Change(TestFeatureStore.Tenant2Id))
{
(await _featureChecker.IsEnabledAsync("BooleanTestFeature1")).ShouldBeFalse();
}
}
[Fact]
public async Task GetOrNullAsync()
{
//Tenant is unknown
(await _featureChecker.GetOrNullAsync("IntegerTestFeature1")).ShouldBe("1");
using (_currentTenant.Change(TestFeatureStore.Tenant1Id))
{
(await _featureChecker.GetOrNullAsync("IntegerTestFeature1")).ShouldBe("1");
}
using (_currentTenant.Change(TestFeatureStore.Tenant2Id))
{
(await _featureChecker.GetOrNullAsync("IntegerTestFeature1")).ShouldBe("34");
}
}
}
}

@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Features
{
public class TestFeatureStore : IFeatureStore, ISingletonDependency
{
public static Guid Tenant1Id = new Guid("f460fcf7-f944-469a-967b-3b2463323dfe");
public static Guid Tenant2Id = new Guid("e10428ad-4608-4c34-a304-6f82502156f2");
private readonly List<SettingRecord> _settingRecords;
public TestFeatureStore()
{
_settingRecords = new List<SettingRecord>
{
new SettingRecord("BooleanTestFeature1", TenantFeatureValueProvider.ProviderName, Tenant1Id.ToString(), "true"),
new SettingRecord("IntegerTestFeature1", TenantFeatureValueProvider.ProviderName, Tenant2Id.ToString(), "34")
};
}
public Task<string> GetOrNullAsync(string name, string providerName, string providerKey)
{
return Task.FromResult(
_settingRecords.FirstOrDefault(sr =>
sr.Name == name &&
sr.ProviderName == providerName &&
sr.ProviderKey == providerKey
)?.Value
);
}
private class SettingRecord
{
public string Name { get; }
public string ProviderName { get; }
public string ProviderKey { get; }
public string Value { get; }
public SettingRecord(string name, string providerName, string providerKey, string value)
{
Name = name;
ProviderName = providerName;
ProviderKey = providerKey;
Value = value;
}
}
}
}
Loading…
Cancel
Save