diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs index 93618e39c7..0eb447e5c6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -76,15 +76,15 @@ namespace Volo.Abp.FeatureManagement Check.NotNull(providerName, nameof(providerName)); var featureDefinitions = FeatureDefinitionManager.GetAll(); - var providers = Enumerable.Reverse(Providers) - .SkipWhile(c => c.Name != providerName); + var providers = Enumerable.Reverse(Providers).SkipWhile(c => c.Name != providerName); if (!fallback) { providers = providers.TakeWhile(c => c.Name == providerName); } - if (!providers.Any()) + var providersList = providers.ToList(); + if (!providersList.Any()) { return new List(); } @@ -94,7 +94,7 @@ namespace Volo.Abp.FeatureManagement foreach (var feature in featureDefinitions) { var featureNameValueWithGrantedProvider = new FeatureNameValueWithGrantedProvider(feature.Name, null); - foreach (var provider in providers) + foreach (var provider in providersList) { string pk = null; if (provider.Compatible(providerName)) diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs index fab724d604..232673c233 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs @@ -20,15 +20,7 @@ namespace Volo.Abp.FeatureManagement _featureChecker = GetRequiredService(); _currentTenant = GetRequiredService(); } - [Fact] - public async Task Should_Get_A_Correct_FeatureValue_By_GetAllWithProviderAsync() - { - (await _featureManager.GetAllWithProviderAsync( - EditionFeatureValueProvider.ProviderName, - TestEditionIds.Enterprise.ToString() - )).FirstOrDefault(x=>x.Name== TestFeatureDefinitionProvider.ProjectCount) - .Value.ShouldBe("3"); - } + [Fact] public async Task Should_Get_A_FeatureValue_For_A_Provider() { @@ -120,5 +112,47 @@ namespace Volo.Abp.FeatureManagement (await _featureChecker.IsEnabledAsync(TestFeatureDefinitionProvider.SocialLogins)).ShouldBeTrue(); } } + + + [Fact] + public async Task Should_Get_FeatureValues_With_Provider_For_A_Provider() + { + var featureNameValueWithGrantedProviders = await _featureManager.GetAllWithProviderAsync( + EditionFeatureValueProvider.ProviderName, + TestEditionIds.Enterprise.ToString() + ); + + featureNameValueWithGrantedProviders.ShouldContain(x => + x.Name == TestFeatureDefinitionProvider.SocialLogins + && x.Value == true.ToString().ToLowerInvariant() && + x.Provider.Name == EditionFeatureValueProvider.ProviderName); + + featureNameValueWithGrantedProviders.ShouldContain(x => + x.Name == TestFeatureDefinitionProvider.EmailSupport && + x.Value == true.ToString().ToLowerInvariant() && + x.Provider.Name == EditionFeatureValueProvider.ProviderName); + + //Default Value + featureNameValueWithGrantedProviders.ShouldContain(x => + x.Name == TestFeatureDefinitionProvider.DailyAnalysis && + x.Value == false.ToString().ToLowerInvariant() && + x.Provider.Name == DefaultValueFeatureValueProvider.ProviderName); + + featureNameValueWithGrantedProviders.ShouldContain(x => + x.Name == TestFeatureDefinitionProvider.UserCount && + x.Value == "20" && + x.Provider.Name == EditionFeatureValueProvider.ProviderName); + + featureNameValueWithGrantedProviders.ShouldContain(x => + x.Name == TestFeatureDefinitionProvider.ProjectCount && + x.Value == "3" && + x.Provider.Name == EditionFeatureValueProvider.ProviderName); + + featureNameValueWithGrantedProviders.ShouldContain(x => + x.Name == TestFeatureDefinitionProvider.BackupCount && + x.Value == "5" && + x.Provider.Name == EditionFeatureValueProvider.ProviderName); + } + } } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs index db606b2582..6cc50f7378 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs @@ -41,7 +41,7 @@ namespace Volo.Abp.FeatureManagement } [Fact] - public async Task FindAAllsync() + public async Task FindAllAsync() { var featureValues = await Repository.FindAllAsync( TestFeatureDefinitionProvider.ProjectCount,