@ -217,7 +217,118 @@ public class FeatureManager_Tests : FeatureManagementDomainTestBase
{
{
await _f eatureManager . SetAsync ( TestFeatureDefinitionProvider . EmailSupport , "true" , "UndefinedProvider" , "Test" ) ;
await _f eatureManager . SetAsync ( TestFeatureDefinitionProvider . EmailSupport , "true" , "UndefinedProvider" , "Test" ) ;
} ) ;
} ) ;
exception . Message . ShouldBe ( "Unknown feature value provider: UndefinedProvider" ) ;
exception . Message . ShouldBe ( "Unknown feature value provider: UndefinedProvider" ) ;
}
}
[Fact]
public async Task Set_Should_Throw_Exception_If_Provider_Not_In_AllowedProviders ( )
{
var exception = await Assert . ThrowsAsync < AbpException > ( async ( ) = >
{
await _f eatureManager . SetAsync (
TestFeatureDefinitionProvider . TenantOnlyFeature ,
"true" ,
EditionFeatureValueProvider . ProviderName ,
TestEditionIds . Enterprise . ToString ( ) ) ;
} ) ;
exception . Message . ShouldContain ( TestFeatureDefinitionProvider . TenantOnlyFeature ) ;
exception . Message . ShouldContain ( EditionFeatureValueProvider . ProviderName ) ;
}
[Fact]
public async Task Set_Should_Allow_Setting_For_Provider_In_AllowedProviders ( )
{
var tenantId = Guid . NewGuid ( ) ;
await _f eatureManager . SetAsync (
TestFeatureDefinitionProvider . TenantOnlyFeature ,
"true" ,
TenantFeatureValueProvider . ProviderName ,
tenantId . ToString ( ) ) ;
( await _f eatureManager . GetOrNullForTenantAsync (
TestFeatureDefinitionProvider . TenantOnlyFeature ,
tenantId ) ) . ShouldBe ( "true" ) ;
}
[Fact]
public async Task GetAllWithProvider_Should_Not_Return_Features_With_Disallowed_Provider ( )
{
var editionFeatures = await _f eatureManager . GetAllWithProviderAsync (
EditionFeatureValueProvider . ProviderName ,
TestEditionIds . Enterprise . ToString ( ) ) ;
editionFeatures . ShouldNotContain ( x = > x . Name = = TestFeatureDefinitionProvider . TenantOnlyFeature ) ;
var tenantId = Guid . NewGuid ( ) ;
await _f eatureManager . SetForTenantAsync (
tenantId ,
TestFeatureDefinitionProvider . TenantOnlyFeature ,
"true" ) ;
var tenantFeatures = await _f eatureManager . GetAllWithProviderAsync (
TenantFeatureValueProvider . ProviderName ,
tenantId . ToString ( ) ) ;
tenantFeatures . ShouldContain ( x = >
x . Name = = TestFeatureDefinitionProvider . TenantOnlyFeature & & x . Value = = "true" ) ;
}
[Fact]
public async Task GetOrNullWithProvider_Should_Not_Read_From_Disallowed_Provider ( )
{
var editionId = TestEditionIds . Enterprise . ToString ( ) ;
await _f eatureValueRepository . InsertAsync ( new FeatureValue (
Guid . NewGuid ( ) ,
TestFeatureDefinitionProvider . TenantOnlyFeature ,
"true" ,
EditionFeatureValueProvider . ProviderName ,
editionId ) ) ;
var value = await _f eatureManager . GetOrNullWithProviderAsync (
TestFeatureDefinitionProvider . TenantOnlyFeature ,
EditionFeatureValueProvider . ProviderName ,
editionId ) ;
value . Value . ShouldBeNull ( ) ;
}
[Fact]
public async Task GetOrNullForEdition_Should_Read_Value_For_Edition_Only_Feature ( )
{
var editionId = Guid . NewGuid ( ) ;
await _f eatureManager . SetForEditionAsync (
editionId ,
TestFeatureDefinitionProvider . EditionOnlyFeature ,
"true" ) ;
( await _f eatureManager . GetOrNullForEditionAsync (
TestFeatureDefinitionProvider . EditionOnlyFeature ,
editionId ) ) . ShouldBe ( "true" ) ;
}
[Fact]
public async Task Set_Should_Not_Clear_Tenant_Value_Due_To_Stale_Disallowed_Provider_Fallback ( )
{
var tenantId = Guid . NewGuid ( ) ;
await _f eatureValueRepository . InsertAsync ( new FeatureValue (
Guid . NewGuid ( ) ,
TestFeatureDefinitionProvider . TenantOnlyFeature ,
"true" ,
EditionFeatureValueProvider . ProviderName ,
null ) ) ;
await _f eatureManager . SetForTenantAsync (
tenantId ,
TestFeatureDefinitionProvider . TenantOnlyFeature ,
"true" ) ;
( await _f eatureManager . GetOrNullForTenantAsync (
TestFeatureDefinitionProvider . TenantOnlyFeature ,
tenantId ) ) . ShouldBe ( "true" ) ;
}
}
}