Browse Source

Implemented settingmanager's GetAll

pull/204/head
Halil İbrahim Kalkan 9 years ago
parent
commit
387dcae2e2
  1. 5
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingDefinitionManager.cs
  2. 6
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionContext.cs
  3. 6
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionManager.cs
  4. 50
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs
  5. 9
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_Tests.cs
  6. 24
      test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_GetValue_Tests.cs

5
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<SettingDefinition> GetAll();
}
}

6
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<SettingDefinition> GetAll()
{
return Settings.Values.ToImmutableList();
}
public virtual void Add(params SettingDefinition[] definitions)
{
if (definitions.IsNullOrEmpty())

6
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<SettingDefinition> GetAll()
{
return SettingDefinitions.Value.Values.ToImmutableList();
}
public virtual SettingDefinition GetOrNull(string name)
{
return SettingDefinitions.Value.GetOrDefault(name);

50
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<List<SettingValue>> GetAllAsync()
public virtual async Task<List<SettingValue>> GetAllAsync()
{
throw new System.NotImplementedException();
var settingValues = new Dictionary<string, SettingValue>();
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<List<SettingValue>> GetAllAsync(string entityType, string entityId, bool fallback = true)
public virtual async Task<List<SettingValue>> GetAllAsync(string entityType, string entityId, bool fallback = true)
{
throw new System.NotImplementedException();
Check.NotNull(entityType, nameof(entityType));
var settingValues = new Dictionary<string, SettingValue>();
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)

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

24
test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Based_Tests.cs → 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<ISettingManager>();
}
protected override void AfterAddApplication(IServiceCollection services)
{
ICurrentUser currentUser = Substitute.For<ICurrentUser>();
var currentUser = Substitute.For<ICurrentUser>();
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");
}
}
}
Loading…
Cancel
Save