From 387dcae2e21cfb00212184a18aa5256b981827f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 7 Feb 2018 18:04:56 +0300 Subject: [PATCH] Implemented settingmanager's GetAll --- .../Abp/Settings/ISettingDefinitionManager.cs | 5 +- .../Abp/Settings/SettingDefinitionContext.cs | 6 +++ .../Abp/Settings/SettingDefinitionManager.cs | 6 +++ .../Volo/Abp/Settings/SettingManager.cs | 50 +++++++++++++++++-- .../Volo/Abp/Settings/SettingManager_Tests.cs | 9 ++++ ... => SettingManager_User_GetValue_Tests.cs} | 24 +++++++-- 6 files changed, 92 insertions(+), 8 deletions(-) rename test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/{SettingManager_User_Based_Tests.cs => SettingManager_User_GetValue_Tests.cs} (75%) diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs index e8795e283b..176f5b314c 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs @@ -1,4 +1,5 @@ -using JetBrains.Annotations; +using System.Collections.Generic; +using JetBrains.Annotations; namespace Volo.Abp.Settings { @@ -6,5 +7,7 @@ namespace Volo.Abp.Settings { [NotNull] SettingDefinition Get([NotNull] string name); + + IReadOnlyList GetAll(); } } \ No newline at end of file diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionContext.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionContext.cs index 9ab4369b57..f7d993945e 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionContext.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionContext.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Collections.Immutable; namespace Volo.Abp.Settings { @@ -16,6 +17,11 @@ namespace Volo.Abp.Settings return Settings.GetOrDefault(name); } + public virtual IReadOnlyList GetAll() + { + return Settings.Values.ToImmutableList(); + } + public virtual void Add(params SettingDefinition[] definitions) { if (definitions.IsNullOrEmpty()) diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionManager.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionManager.cs index ec6660a870..4615d1c147 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionManager.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -42,6 +43,11 @@ namespace Volo.Abp.Settings return settingDefinition; } + public IReadOnlyList GetAll() + { + return SettingDefinitions.Value.Values.ToImmutableList(); + } + public virtual SettingDefinition GetOrNull(string name) { return SettingDefinitions.Value.GetOrDefault(name); diff --git a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs index f67c1bba00..dd315e48f9 100644 --- a/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs +++ b/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -83,14 +84,55 @@ namespace Volo.Abp.Settings return null; } - public virtual Task> GetAllAsync() + public virtual async Task> GetAllAsync() { - throw new System.NotImplementedException(); + var settingValues = new Dictionary(); + var settingDefinitions = SettingDefinitionManager.GetAll(); + + foreach (var provider in Providers.Value) + { + foreach (var setting in settingDefinitions) + { + var value = await provider.GetOrNullAsync(setting, null); + if (value != null) + { + settingValues[setting.Name] = new SettingValue(setting.Name, value); + } + } + } + + return settingValues.Values.ToList(); } - public virtual Task> GetAllAsync(string entityType, string entityId, bool fallback = true) + public virtual async Task> GetAllAsync(string entityType, string entityId, bool fallback = true) { - throw new System.NotImplementedException(); + Check.NotNull(entityType, nameof(entityType)); + + var settingValues = new Dictionary(); + var settingDefinitions = SettingDefinitionManager.GetAll(); + var providers = Enumerable.Reverse(Providers.Value) + .SkipWhile(c => c.EntityType != entityType); + + if (!fallback) + { + providers = providers.TakeWhile(c => c.EntityType == entityType); + } + + providers = providers.Reverse(); + + foreach (var provider in providers) + { + foreach (var setting in settingDefinitions) + { + var value = await provider.GetOrNullAsync(setting, entityId); + if (value != null) + { + settingValues[setting.Name] = new SettingValue(setting.Name, value); + } + } + } + + return settingValues.Values.ToList(); } public virtual Task SetAsync(string name, string value, bool forceToSet = false) diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs index 1196910994..b690fe3895 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs @@ -33,5 +33,14 @@ namespace Volo.Abp.Settings { (await _settingManager.GetOrNullAsync("MySetting1")).ShouldBe("42"); } + + [Fact] + public async Task Should_Get_All_Base_Store_Values() + { + var settingValues = await _settingManager.GetAllAsync(); + settingValues.ShouldContain(sv => sv.Name == "MySetting1" && sv.Value == "42"); + settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "default-store-value"); + settingValues.ShouldContain(sv => sv.Name == "SettingNotSetInStore" && sv.Value == "default-value"); + } } } diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Based_Tests.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_GetValue_Tests.cs similarity index 75% rename from test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Based_Tests.cs rename to test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_GetValue_Tests.cs index 6c3cc49e0a..650e242d9f 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Based_Tests.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_GetValue_Tests.cs @@ -8,19 +8,20 @@ using Xunit; namespace Volo.Abp.Settings { - public class SettingManager_User_Based_Tests: AbpSettingsTestBase + public class SettingManager_User_GetValue_Tests: AbpSettingsTestBase { private Guid _currentUserId; + private readonly ISettingManager _settingManager; - public SettingManager_User_Based_Tests() + public SettingManager_User_GetValue_Tests() { _settingManager = GetRequiredService(); } protected override void AfterAddApplication(IServiceCollection services) { - ICurrentUser currentUser = Substitute.For(); + var currentUser = Substitute.For(); currentUser.Id.Returns(ci => _currentUserId); services.AddSingleton(currentUser); } @@ -84,5 +85,22 @@ namespace Volo.Abp.Settings _currentUserId = Guid.NewGuid(); (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2", fallback: false)).ShouldBeNull(); } + + [Fact] + public async Task Should_Get_All_From_Store_For_Given_User() + { + var settingValues = await _settingManager.GetAllForUserAsync(AbpIdentityTestDataBuilder.User1Id); + settingValues.ShouldContain(sv => sv.Name == "MySetting1" && sv.Value == "42"); + settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value"); + settingValues.ShouldContain(sv => sv.Name == "SettingNotSetInStore" && sv.Value == "default-value"); + } + + [Fact] + public async Task Should_Get_All_From_Store_For_Given_User_Without_Fallback() + { + var settingValues = await _settingManager.GetAllForUserAsync(AbpIdentityTestDataBuilder.User1Id, fallback: false); + settingValues.Count.ShouldBe(1); + settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value"); + } } } \ No newline at end of file