mirror of https://github.com/abpframework/abp.git
44 changed files with 1344 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||
# abp-settingmanagement |
|||
Setting management module for ABP framework. |
|||
@ -0,0 +1,81 @@ |
|||
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00 |
|||
# Visual Studio 15 |
|||
VisualStudioVersion = 15.0.27428.1 |
|||
MinimumVisualStudioVersion = 10.0.40219.1 |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.SettingManagement.Domain.Shared", "src\Volo.Abp.SettingManagement.Domain.Shared\Volo.Abp.SettingManagement.Domain.Shared.csproj", "{3A607A96-8248-4027-9A96-44145A84B210}" |
|||
EndProject |
|||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F1BE945B-F0CF-4712-BC2B-9AF8C02059EA}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.SettingManagement.Domain", "src\Volo.Abp.SettingManagement.Domain\Volo.Abp.SettingManagement.Domain.csproj", "{5236093A-E52E-4D50-89B3-09591D35C2FA}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.SettingManagement.EntityFrameworkCore", "src\Volo.Abp.SettingManagement.EntityFrameworkCore\Volo.Abp.SettingManagement.EntityFrameworkCore.csproj", "{10A31B5C-B772-4F78-94A9-FE49A15D068D}" |
|||
EndProject |
|||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7E8D2943-ADE7-4C89-8048-0780CE07E0E0}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.SettingManagement.Tests", "test\Volo.Abp.SettingManagement.Tests\Volo.Abp.SettingManagement.Tests.csproj", "{E8335ADC-D09E-4B74-8190-45A9FAF962CA}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.MongoDB", "src\Volo.Abp.SettingManagement.MongoDB\Volo.Abp.SettingManagement.MongoDB.csproj", "{7615D255-FB8F-49F0-81C0-F2E69F7F0CB7}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.TestBase", "test\Volo.Abp.SettingManagement.TestBase\Volo.Abp.SettingManagement.TestBase.csproj", "{D4A2DCB2-FA6A-43DC-9469-B6CDAA7EB489}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.EntityFrameworkCore.Tests", "test\Volo.Abp.SettingManagement.EntityFrameworkCore.Tests\Volo.Abp.SettingManagement.EntityFrameworkCore.Tests.csproj", "{AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.MongoDB.Tests", "test\Volo.Abp.SettingManagement.MongoDB.Tests\Volo.Abp.SettingManagement.MongoDB.Tests.csproj", "{DF76DE74-1029-4FEA-8ADF-3C5636944757}" |
|||
EndProject |
|||
Global |
|||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|||
Debug|Any CPU = Debug|Any CPU |
|||
Release|Any CPU = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|||
{3A607A96-8248-4027-9A96-44145A84B210}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{3A607A96-8248-4027-9A96-44145A84B210}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{3A607A96-8248-4027-9A96-44145A84B210}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{3A607A96-8248-4027-9A96-44145A84B210}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{5236093A-E52E-4D50-89B3-09591D35C2FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{5236093A-E52E-4D50-89B3-09591D35C2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{5236093A-E52E-4D50-89B3-09591D35C2FA}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{5236093A-E52E-4D50-89B3-09591D35C2FA}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{10A31B5C-B772-4F78-94A9-FE49A15D068D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{10A31B5C-B772-4F78-94A9-FE49A15D068D}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{10A31B5C-B772-4F78-94A9-FE49A15D068D}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{10A31B5C-B772-4F78-94A9-FE49A15D068D}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{E8335ADC-D09E-4B74-8190-45A9FAF962CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{E8335ADC-D09E-4B74-8190-45A9FAF962CA}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{E8335ADC-D09E-4B74-8190-45A9FAF962CA}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{E8335ADC-D09E-4B74-8190-45A9FAF962CA}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{7615D255-FB8F-49F0-81C0-F2E69F7F0CB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{7615D255-FB8F-49F0-81C0-F2E69F7F0CB7}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{7615D255-FB8F-49F0-81C0-F2E69F7F0CB7}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{7615D255-FB8F-49F0-81C0-F2E69F7F0CB7}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{D4A2DCB2-FA6A-43DC-9469-B6CDAA7EB489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{D4A2DCB2-FA6A-43DC-9469-B6CDAA7EB489}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{D4A2DCB2-FA6A-43DC-9469-B6CDAA7EB489}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{D4A2DCB2-FA6A-43DC-9469-B6CDAA7EB489}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{DF76DE74-1029-4FEA-8ADF-3C5636944757}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{DF76DE74-1029-4FEA-8ADF-3C5636944757}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{DF76DE74-1029-4FEA-8ADF-3C5636944757}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{DF76DE74-1029-4FEA-8ADF-3C5636944757}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(SolutionProperties) = preSolution |
|||
HideSolutionNode = FALSE |
|||
EndGlobalSection |
|||
GlobalSection(NestedProjects) = preSolution |
|||
{3A607A96-8248-4027-9A96-44145A84B210} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} |
|||
{5236093A-E52E-4D50-89B3-09591D35C2FA} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} |
|||
{10A31B5C-B772-4F78-94A9-FE49A15D068D} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} |
|||
{E8335ADC-D09E-4B74-8190-45A9FAF962CA} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} |
|||
{7615D255-FB8F-49F0-81C0-F2E69F7F0CB7} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} |
|||
{D4A2DCB2-FA6A-43DC-9469-B6CDAA7EB489} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} |
|||
{AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} |
|||
{DF76DE74-1029-4FEA-8ADF-3C5636944757} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} |
|||
EndGlobalSection |
|||
GlobalSection(ExtensibilityGlobals) = postSolution |
|||
SolutionGuid = {24B3A486-E7CA-4AA5-B76F-27D351A97E59} |
|||
EndGlobalSection |
|||
EndGlobal |
|||
@ -0,0 +1,16 @@ |
|||
<Project> |
|||
<PropertyGroup> |
|||
<LangVersion>latest</LangVersion> |
|||
<Version>0.3.0</Version> |
|||
<NoWarn>$(NoWarn);CS1591</NoWarn> |
|||
<PackageIconUrl>http://www.aspnetboilerplate.com/images/abp_nupkg.png</PackageIconUrl> |
|||
<PackageProjectUrl>http://abp.io</PackageProjectUrl> |
|||
<RepositoryType>git</RepositoryType> |
|||
<RepositoryUrl>https://github.com/volosoft/abp/</RepositoryUrl> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.1" PrivateAssets="All" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,20 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.Domain.Shared</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.Domain.Shared</PackageId> |
|||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.Core\Volo.Abp.Core.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,13 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class AbpSettingManagementDomainSharedModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.AddAssemblyOf<AbpSettingManagementDomainSharedModule>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public static class SettingConsts |
|||
{ |
|||
public const int MaxNameLength = 128; |
|||
public const int MaxValueLength = 2048; |
|||
public const int MaxProviderNameLength = 64; |
|||
public const int MaxProviderKeyLength = 64; |
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.Domain</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.Domain</PackageId> |
|||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.SettingManagement.Domain.Shared\Volo.Abp.SettingManagement.Domain.Shared.csproj" /> |
|||
|
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.Ddd.Domain\Volo.Abp.Ddd.Domain.csproj" /> |
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.Settings\Volo.Abp.Settings.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,9 @@ |
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public static class AbpSettingManagementConsts |
|||
{ |
|||
public const string DefaultDbTablePrefix = "Abp"; |
|||
|
|||
public const string DefaultDbSchema = null; |
|||
} |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Domain; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Settings; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
[DependsOn(typeof(AbpSettingsModule))] |
|||
[DependsOn(typeof(AbpDddDomainModule))] |
|||
[DependsOn(typeof(AbpSettingManagementDomainSharedModule))] |
|||
public class AbpSettingManagementDomainModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.AddAssemblyOf<AbpSettingManagementDomainModule>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Domain.Repositories; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public interface ISettingRepository : IBasicRepository<Setting, Guid> |
|||
{ |
|||
Task<Setting> FindAsync(string name, string providerName, string providerKey); |
|||
|
|||
Task<List<Setting>> GetListAsync(string providerName, string providerKey); |
|||
} |
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
using System; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Domain.Entities; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class Setting : Entity<Guid> |
|||
{ |
|||
[NotNull] |
|||
public virtual string Name { get; protected set; } |
|||
|
|||
[NotNull] |
|||
public virtual string Value { get; internal set; } |
|||
|
|||
[CanBeNull] |
|||
public virtual string ProviderName { get; protected set; } |
|||
|
|||
[CanBeNull] |
|||
public virtual string ProviderKey { get; protected set; } |
|||
|
|||
protected Setting() |
|||
{ |
|||
|
|||
} |
|||
|
|||
public Setting( |
|||
Guid id, |
|||
[NotNull] string name, |
|||
[NotNull] string value, |
|||
[CanBeNull] string providerName = null, |
|||
[CanBeNull] string providerKey = null) |
|||
{ |
|||
Check.NotNull(name, nameof(name)); |
|||
Check.NotNull(value, nameof(value)); |
|||
|
|||
Id = id; |
|||
Name = name; |
|||
Value = value; |
|||
ProviderName = providerName; |
|||
ProviderKey = providerKey; |
|||
} |
|||
|
|||
public override string ToString() |
|||
{ |
|||
return $"{base.ToString()}, Name = {Name}, Value = {Value}, ProviderName = {ProviderName}, ProviderKey = {ProviderKey}"; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,57 @@ |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Guids; |
|||
using Volo.Abp.Settings; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingStore : ISettingStore, ITransientDependency |
|||
{ |
|||
private readonly ISettingRepository _settingRepository; |
|||
private readonly IGuidGenerator _guidGenerator; |
|||
|
|||
public SettingStore(ISettingRepository settingRepository, IGuidGenerator guidGenerator) |
|||
{ |
|||
_settingRepository = settingRepository; |
|||
_guidGenerator = guidGenerator; |
|||
} |
|||
|
|||
public async Task<string> GetOrNullAsync(string name, string providerName, string providerKey) |
|||
{ |
|||
var setting = await _settingRepository.FindAsync(name, providerName, providerKey); |
|||
return setting?.Value; |
|||
} |
|||
|
|||
public async Task SetAsync(string name, string value, string providerName, string providerKey) |
|||
{ |
|||
var setting = await _settingRepository.FindAsync(name, providerName, providerKey); |
|||
if (setting == null) |
|||
{ |
|||
setting = new Setting(_guidGenerator.Create(), name, value, providerName, providerKey); |
|||
await _settingRepository.InsertAsync(setting); |
|||
} |
|||
else |
|||
{ |
|||
setting.Value = value; |
|||
await _settingRepository.UpdateAsync(setting); |
|||
} |
|||
} |
|||
|
|||
public async Task<List<SettingValue>> GetListAsync(string providerName, string providerKey) |
|||
{ |
|||
var settings = await _settingRepository.GetListAsync(providerName, providerKey); |
|||
return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList(); |
|||
} |
|||
|
|||
public async Task DeleteAsync(string name, string providerName, string providerKey) |
|||
{ |
|||
var setting = await _settingRepository.FindAsync(name, providerName, providerKey); |
|||
if (setting != null) |
|||
{ |
|||
await _settingRepository.DeleteAsync(setting); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.EntityFrameworkCore</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.EntityFrameworkCore</PackageId> |
|||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.SettingManagement.Domain\Volo.Abp.SettingManagement.Domain.csproj" /> |
|||
|
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.EntityFrameworkCore\Volo.Abp.EntityFrameworkCore.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,29 @@ |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
|
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
[ConnectionStringName("AbpSettingManagement")] |
|||
public class AbpSettingManagementDbContext : AbpDbContext<AbpSettingManagementDbContext>, ISettingManagementDbContext |
|||
{ |
|||
public static string TablePrefix { get; set; } = AbpSettingManagementConsts.DefaultDbTablePrefix; |
|||
|
|||
public static string Schema { get; set; } = AbpSettingManagementConsts.DefaultDbSchema; |
|||
|
|||
public DbSet<Setting> Settings { get; set; } |
|||
|
|||
public AbpSettingManagementDbContext(DbContextOptions<AbpSettingManagementDbContext> options) |
|||
: base(options) |
|||
{ |
|||
|
|||
} |
|||
|
|||
protected override void OnModelCreating(ModelBuilder builder) |
|||
{ |
|||
base.OnModelCreating(builder); |
|||
|
|||
builder.ConfigureSettingManagement(TablePrefix, Schema); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,33 @@ |
|||
using JetBrains.Annotations; |
|||
using Microsoft.EntityFrameworkCore; |
|||
|
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
public static class AbpSettingManagementDbContextModelBuilderExtensions |
|||
{ |
|||
public static void ConfigureSettingManagement( |
|||
[NotNull] this ModelBuilder builder, |
|||
[CanBeNull] string tablePrefix = AbpSettingManagementConsts.DefaultDbTablePrefix, |
|||
[CanBeNull] string schema = AbpSettingManagementConsts.DefaultDbSchema) |
|||
{ |
|||
Check.NotNull(builder, nameof(builder)); |
|||
|
|||
if (tablePrefix == null) |
|||
{ |
|||
tablePrefix = ""; |
|||
} |
|||
|
|||
builder.Entity<Setting>(b => |
|||
{ |
|||
b.ToTable(tablePrefix + "Settings", schema); |
|||
|
|||
b.Property(x => x.Name).HasMaxLength(SettingConsts.MaxNameLength).IsRequired(); |
|||
b.Property(x => x.Value).HasMaxLength(SettingConsts.MaxValueLength).IsRequired(); |
|||
b.Property(x => x.ProviderName).HasMaxLength(SettingConsts.MaxProviderNameLength); |
|||
b.Property(x => x.ProviderKey).HasMaxLength(SettingConsts.MaxProviderKeyLength); |
|||
|
|||
b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
[DependsOn(typeof(AbpSettingManagementDomainModule))] |
|||
[DependsOn(typeof(AbpEntityFrameworkCoreModule))] |
|||
public class AbpSettingManagementEntityFrameworkCoreModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.AddAbpDbContext<AbpSettingManagementDbContext>(options => |
|||
{ |
|||
options.AddDefaultRepositories<ISettingManagementDbContext>(); |
|||
|
|||
options.AddRepository<Setting, EfCoreSettingRepository>(); |
|||
}); |
|||
|
|||
services.AddAssemblyOf<AbpSettingManagementEntityFrameworkCoreModule>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
|
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
public class EfCoreSettingRepository : EfCoreRepository<ISettingManagementDbContext, Setting, Guid>, ISettingRepository |
|||
{ |
|||
public EfCoreSettingRepository(IDbContextProvider<ISettingManagementDbContext> dbContextProvider) |
|||
: base(dbContextProvider) |
|||
{ |
|||
} |
|||
|
|||
public async Task<Setting> FindAsync(string name, string providerName, string providerKey) |
|||
{ |
|||
return await DbSet |
|||
.FirstOrDefaultAsync( |
|||
s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey |
|||
); |
|||
} |
|||
|
|||
public async Task<List<Setting>> GetListAsync(string providerName, string providerKey) |
|||
{ |
|||
return await DbSet |
|||
.Where( |
|||
s => s.ProviderName == providerName && s.ProviderKey == providerKey |
|||
).ToListAsync(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
|
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
[ConnectionStringName("AbpSettingManagement")] |
|||
public interface ISettingManagementDbContext : IEfCoreDbContext |
|||
{ |
|||
DbSet<Setting> Settings { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.MongoDB</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.MongoDB</PackageId> |
|||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Volo.Abp.SettingManagement.Domain\Volo.Abp.SettingManagement.Domain.csproj" /> |
|||
|
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.MongoDB\Volo.Abp.MongoDB.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,21 @@ |
|||
using MongoDB.Bson.Serialization; |
|||
using Volo.Abp.Threading; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
public static class AbpSettingManagementBsonClassMap |
|||
{ |
|||
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); |
|||
|
|||
public static void Configure() |
|||
{ |
|||
OneTimeRunner.Run(() => |
|||
{ |
|||
BsonClassMap.RegisterClassMap<Setting>(map => |
|||
{ |
|||
map.AutoMap(); |
|||
}); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using Volo.Abp.MongoDB; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
public static class AbpSettingManagementMongoDbContextExtensions |
|||
{ |
|||
public static void ConfigureSettingManagement( |
|||
this IMongoModelBuilder builder, |
|||
Action<MongoModelBuilderConfigurationOptions> optionsAction = null) |
|||
{ |
|||
Check.NotNull(builder, nameof(builder)); |
|||
|
|||
var options = new SettingManagementMongoModelBuilderConfigurationOptions(); |
|||
|
|||
optionsAction?.Invoke(options); |
|||
|
|||
builder.Entity<Setting>(b => |
|||
{ |
|||
b.CollectionName = options.CollectionPrefix + "Settings"; |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.MongoDB; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpSettingManagementDomainModule), |
|||
typeof(AbpMongoDbModule) |
|||
)] |
|||
public class AbpSettingManagementMongoDbModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
AbpSettingManagementBsonClassMap.Configure(); |
|||
|
|||
services.AddMongoDbContext<SettingManagementMongoDbContext>(options => |
|||
{ |
|||
options.AddDefaultRepositories<ISettingManagementMongoDbContext>(); |
|||
|
|||
options.AddRepository<Setting, MongoSettingRepository>(); |
|||
}); |
|||
|
|||
services.AddAssemblyOf<AbpSettingManagementMongoDbModule>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
using MongoDB.Driver; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.MongoDB; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
[ConnectionStringName("AbpSettingManagement")] |
|||
public interface ISettingManagementMongoDbContext : IAbpMongoDbContext |
|||
{ |
|||
IMongoCollection<Setting> Settings { get; } |
|||
} |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using MongoDB.Driver; |
|||
using MongoDB.Driver.Linq; |
|||
using Volo.Abp.Domain.Repositories.MongoDB; |
|||
using Volo.Abp.MongoDB; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
public class MongoSettingRepository : MongoDbRepository<ISettingManagementMongoDbContext, Setting, Guid>, ISettingRepository |
|||
{ |
|||
public MongoSettingRepository(IMongoDbContextProvider<ISettingManagementMongoDbContext> dbContextProvider) |
|||
: base(dbContextProvider) |
|||
{ |
|||
|
|||
} |
|||
|
|||
public async Task<Setting> FindAsync(string name, string providerName, string providerKey) |
|||
{ |
|||
return await GetMongoQueryable().FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); |
|||
} |
|||
|
|||
public async Task<List<Setting>> GetListAsync(string providerName, string providerKey) |
|||
{ |
|||
return await GetMongoQueryable().Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using MongoDB.Driver; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.MongoDB; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
[ConnectionStringName("AbpSettingManagement")] |
|||
public class SettingManagementMongoDbContext : AbpMongoDbContext, ISettingManagementMongoDbContext |
|||
{ |
|||
public static string CollectionPrefix { get; set; } = AbpSettingManagementConsts.DefaultDbTablePrefix; |
|||
|
|||
public IMongoCollection<Setting> Settings => Collection<Setting>(); |
|||
|
|||
protected override void CreateModel(IMongoModelBuilder modelBuilder) |
|||
{ |
|||
base.CreateModel(modelBuilder); |
|||
|
|||
modelBuilder.ConfigureSettingManagement(options => |
|||
{ |
|||
options.CollectionPrefix = CollectionPrefix; |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.MongoDB; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
public class SettingManagementMongoModelBuilderConfigurationOptions : MongoModelBuilderConfigurationOptions |
|||
{ |
|||
public SettingManagementMongoModelBuilderConfigurationOptions([NotNull] string tablePrefix = AbpSettingManagementConsts.DefaultDbTablePrefix) |
|||
: base(tablePrefix) |
|||
{ |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netcoreapp2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.EntityFrameworkCore.Tests</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.EntityFrameworkCore.Tests</PackageId> |
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\src\Volo.Abp.SettingManagement.EntityFrameworkCore\Volo.Abp.SettingManagement.EntityFrameworkCore.csproj" /> |
|||
<ProjectReference Include="..\Volo.Abp.SettingManagement.TestBase\Volo.Abp.SettingManagement.TestBase.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" /> |
|||
<PackageReference Include="Microsoft.Data.Sqlite" Version="2.1.0" /> |
|||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.0" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,44 @@ |
|||
using Microsoft.Data.Sqlite; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Microsoft.EntityFrameworkCore.Infrastructure; |
|||
using Microsoft.EntityFrameworkCore.Storage; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpSettingManagementTestBaseModule), |
|||
typeof(AbpSettingManagementEntityFrameworkCoreModule) |
|||
)] |
|||
public class AbpSettingManagementEntityFrameworkCoreTestModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
var sqliteConnection = CreateDatabaseAndGetConnection(); |
|||
|
|||
services.Configure<AbpDbContextOptions>(options => |
|||
{ |
|||
options.Configure(context => |
|||
{ |
|||
context.DbContextOptions.UseSqlite(sqliteConnection); |
|||
}); |
|||
}); |
|||
|
|||
services.AddAssemblyOf<AbpSettingManagementEntityFrameworkCoreTestModule>(); |
|||
} |
|||
|
|||
private static SqliteConnection CreateDatabaseAndGetConnection() |
|||
{ |
|||
var connection = new SqliteConnection("Data Source=:memory:"); |
|||
connection.Open(); |
|||
|
|||
new AbpSettingManagementDbContext( |
|||
new DbContextOptionsBuilder<AbpSettingManagementDbContext>().UseSqlite(connection).Options |
|||
).GetService<IRelationalDatabaseCreator>().CreateTables(); |
|||
|
|||
return connection; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace Volo.Abp.SettingManagement.EntityFrameworkCore |
|||
{ |
|||
public class SettingRepository_Tests : SettingRepository_Tests<AbpSettingManagementEntityFrameworkCoreTestModule> |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netcoreapp2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.MongoDB.Tests</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.MongoDB.Tests</PackageId> |
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\src\Volo.Abp.SettingManagement.MongoDB\Volo.Abp.SettingManagement.MongoDB.csproj" /> |
|||
<ProjectReference Include="..\Volo.Abp.SettingManagement.TestBase\Volo.Abp.SettingManagement.TestBase.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" /> |
|||
<PackageReference Include="Mongo2Go" Version="2.2.1" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,33 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Mongo2Go; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpSettingManagementMongoDbModule), |
|||
typeof(AbpSettingManagementTestBaseModule) |
|||
)] |
|||
public class AbpSettingManagementMongoDbTestModule : AbpModule |
|||
{ |
|||
private MongoDbRunner _mongoDbRunner; |
|||
|
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
_mongoDbRunner = MongoDbRunner.Start(); |
|||
|
|||
services.Configure<DbConnectionOptions>(options => |
|||
{ |
|||
options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString; |
|||
}); |
|||
|
|||
services.AddAssemblyOf<AbpSettingManagementMongoDbTestModule>(); |
|||
} |
|||
|
|||
public override void OnApplicationShutdown(ApplicationShutdownContext context) |
|||
{ |
|||
_mongoDbRunner.Dispose(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace Volo.Abp.SettingManagement.MongoDB |
|||
{ |
|||
public class SettingRepository_Tests : SettingRepository_Tests<AbpSettingManagementMongoDbTestModule> |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netcoreapp2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.TestBase</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.TestBase</PackageId> |
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" /> |
|||
<ProjectReference Include="..\..\..\abp\src\Volo.Abp.TestBase\Volo.Abp.TestBase.csproj" /> |
|||
<ProjectReference Include="..\..\src\Volo.Abp.SettingManagement.Domain\Volo.Abp.SettingManagement.Domain.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" /> |
|||
<PackageReference Include="NSubstitute" Version="3.1.0" /> |
|||
<PackageReference Include="Shouldly" Version="3.0.0" /> |
|||
<PackageReference Include="xunit" Version="2.3.1" /> |
|||
<PackageReference Include="xunit.extensibility.execution" Version="2.3.1" /> |
|||
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,39 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Autofac; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Settings; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpAutofacModule), |
|||
typeof(AbpTestBaseModule), |
|||
typeof(AbpSettingManagementDomainModule))] |
|||
public class AbpSettingManagementTestBaseModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.Configure<SettingOptions>(options => |
|||
{ |
|||
options.DefinitionProviders.Add<TestSettingDefinitionProvider>(); |
|||
}); |
|||
|
|||
services.AddAssemblyOf<AbpSettingManagementTestBaseModule>(); |
|||
} |
|||
|
|||
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
|||
{ |
|||
SeedTestData(context); |
|||
} |
|||
|
|||
private static void SeedTestData(ApplicationInitializationContext context) |
|||
{ |
|||
using (var scope = context.ServiceProvider.CreateScope()) |
|||
{ |
|||
scope.ServiceProvider |
|||
.GetRequiredService<SettingTestDataBuilder>() |
|||
.Build(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingManagementTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule> |
|||
where TStartupModule : IAbpModule |
|||
{ |
|||
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) |
|||
{ |
|||
options.UseAutofac(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,53 @@ |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Settings; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public abstract class SettingRepository_Tests<TStartupModule> : SettingManagementTestBase<TStartupModule> |
|||
where TStartupModule : IAbpModule |
|||
{ |
|||
protected ISettingRepository SettingRepository { get; } |
|||
protected SettingTestData TestData { get; } |
|||
|
|||
protected SettingRepository_Tests() |
|||
{ |
|||
SettingRepository = GetRequiredService<ISettingRepository>(); |
|||
TestData = GetRequiredService<SettingTestData>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task FindAsync() |
|||
{ |
|||
(await SettingRepository.FindAsync( |
|||
"MySetting1", |
|||
GlobalSettingValueProvider.ProviderName, |
|||
null |
|||
)).Value.ShouldBe("42"); |
|||
|
|||
(await SettingRepository.FindAsync( |
|||
"MySetting2", |
|||
"User", |
|||
TestData.User1Id.ToString() |
|||
)).Value.ShouldBe("user1-store-value"); |
|||
|
|||
(await SettingRepository.FindAsync( |
|||
"Undefined-Setting", |
|||
GlobalSettingValueProvider.ProviderName, |
|||
null |
|||
)).ShouldBeNull(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task GetListAsync() |
|||
{ |
|||
var settings = await SettingRepository.GetListAsync(GlobalSettingValueProvider.ProviderName, null); |
|||
settings.Any().ShouldBeTrue(); |
|||
settings.ShouldContain(s => s.Name == "MySetting1" && s.Value == "42"); |
|||
settings.ShouldContain(s => s.Name == "MySetting2" && s.Value == "default-store-value"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
using System; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingTestData : ISingletonDependency |
|||
{ |
|||
public Guid User1Id { get; } = Guid.NewGuid(); |
|||
public Guid User2Id { get; } = Guid.NewGuid(); |
|||
} |
|||
} |
|||
@ -0,0 +1,83 @@ |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Guids; |
|||
using Volo.Abp.Settings; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingTestDataBuilder : ITransientDependency |
|||
{ |
|||
private readonly ISettingRepository _settingRepository; |
|||
private readonly IGuidGenerator _guidGenerator; |
|||
private readonly SettingTestData _testData; |
|||
|
|||
public SettingTestDataBuilder( |
|||
ISettingRepository settingRepository, |
|||
IGuidGenerator guidGenerator, |
|||
SettingTestData testData) |
|||
{ |
|||
_settingRepository = settingRepository; |
|||
_guidGenerator = guidGenerator; |
|||
_testData = testData; |
|||
} |
|||
|
|||
public void Build() |
|||
{ |
|||
_settingRepository.InsertAsync( |
|||
new Setting( |
|||
_guidGenerator.Create(), |
|||
"MySetting1", |
|||
"42", |
|||
GlobalSettingValueProvider.ProviderName |
|||
) |
|||
); |
|||
|
|||
_settingRepository.InsertAsync( |
|||
new Setting( |
|||
_guidGenerator.Create(), |
|||
"MySetting2", |
|||
"default-store-value", |
|||
GlobalSettingValueProvider.ProviderName |
|||
) |
|||
); |
|||
|
|||
_settingRepository.InsertAsync( |
|||
new Setting( |
|||
_guidGenerator.Create(), |
|||
"MySetting2", |
|||
"user1-store-value", |
|||
"User", |
|||
_testData.User1Id.ToString() |
|||
) |
|||
); |
|||
|
|||
_settingRepository.InsertAsync( |
|||
new Setting( |
|||
_guidGenerator.Create(), |
|||
"MySetting2", |
|||
"user2-store-value", |
|||
"User", |
|||
_testData.User2Id.ToString() |
|||
) |
|||
); |
|||
|
|||
_settingRepository.InsertAsync( |
|||
new Setting( |
|||
_guidGenerator.Create(), |
|||
"MySettingWithoutInherit", |
|||
"default-store-value", |
|||
GlobalSettingValueProvider.ProviderName |
|||
) |
|||
); |
|||
|
|||
_settingRepository.InsertAsync( |
|||
new Setting( |
|||
_guidGenerator.Create(), |
|||
"MySettingWithoutInherit", |
|||
"user1-store-value", |
|||
"User", |
|||
_testData.User1Id.ToString() |
|||
) |
|||
); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
using Volo.Abp.Settings; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class TestSettingDefinitionProvider : SettingDefinitionProvider |
|||
{ |
|||
public override void Define(ISettingDefinitionContext context) |
|||
{ |
|||
context.Add(new SettingDefinition("MySetting1")); |
|||
context.Add(new SettingDefinition("MySetting2")); |
|||
context.Add(new SettingDefinition("MySettingWithoutInherit", isInherited: false)); |
|||
context.Add(new SettingDefinition("SettingNotSetInStore", defaultValue: "default-value")); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netcoreapp2.0</TargetFramework> |
|||
<AssemblyName>Volo.Abp.SettingManagement.Tests</AssemblyName> |
|||
<PackageId>Volo.Abp.SettingManagement.Tests</PackageId> |
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
|||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
|
|||
<ProjectReference Include="..\..\..\abp-users\src\Volo.Abp.Users.Abstractions\Volo.Abp.Users.Abstractions.csproj" /> |
|||
|
|||
<ProjectReference Include="..\Volo.Abp.SettingManagement.EntityFrameworkCore.Tests\Volo.Abp.SettingManagement.EntityFrameworkCore.Tests.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,18 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpSettingManagementEntityFrameworkCoreTestModule), |
|||
typeof(AbpUsersAbstractionModule))] |
|||
public class AbpSettingManagementTestModule : AbpModule //TODO: Rename to Volo.Abp.SettingManagement.Domain.Tests..?
|
|||
{ |
|||
public override void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.AddAssemblyOf<AbpSettingManagementTestModule>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,56 @@ |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.Settings; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingManager_Basic_Tests : SettingsTestBase |
|||
{ |
|||
private readonly ISettingManager _settingManager; |
|||
|
|||
public SettingManager_Basic_Tests() |
|||
{ |
|||
_settingManager = GetRequiredService<ISettingManager>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Throw_Exception_When_Try_To_Get_An_Undefined_Setting() |
|||
{ |
|||
await Assert.ThrowsAsync<AbpException>( |
|||
async () => await _settingManager.GetOrNullAsync("UndefinedSetting") |
|||
); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Get_Default_Value_If_Not_Set_In_Store() |
|||
{ |
|||
var value = await _settingManager.GetOrNullAsync("SettingNotSetInStore"); |
|||
value.ShouldBe("default-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Get_Base_Store_Value() |
|||
{ |
|||
(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"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Set_Global_Value() |
|||
{ |
|||
await _settingManager.SetGlobalAsync("MySetting1", "43"); |
|||
|
|||
(await _settingManager.GetOrNullGlobalAsync("MySetting1")).ShouldBe("43"); |
|||
(await _settingManager.GetOrNullAsync("MySetting1")).ShouldBe("43"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,188 @@ |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using NSubstitute; |
|||
using Shouldly; |
|||
using Volo.Abp.Settings; |
|||
using Volo.Abp.Users; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingManager_User_Tests: SettingsTestBase |
|||
{ |
|||
private Guid? _currentUserId; |
|||
|
|||
private readonly ISettingManager _settingManager; |
|||
private readonly SettingTestData _testData; |
|||
|
|||
public SettingManager_User_Tests() |
|||
{ |
|||
_settingManager = GetRequiredService<ISettingManager>(); |
|||
_testData = GetRequiredService<SettingTestData>(); |
|||
} |
|||
|
|||
protected override void AfterAddApplication(IServiceCollection services) |
|||
{ |
|||
var currentUser = Substitute.For<ICurrentUser>(); |
|||
currentUser.Id.Returns(ci => _currentUserId); |
|||
services.AddSingleton(currentUser); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Get_From_Store_For_Given_User() |
|||
{ |
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)).ShouldBe("user1-store-value"); |
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User2Id)).ShouldBe("user2-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Given_User() |
|||
{ |
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", Guid.NewGuid())).ShouldBe("default-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Not_Fallback_To_Default_Store_Value_When_No_Value_For_Given_User_But_Specified_Fallback_As_False() |
|||
{ |
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", Guid.NewGuid(), fallback: false)).ShouldBeNull(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Get_From_Store_For_Current_User() |
|||
{ |
|||
_currentUserId = _testData.User1Id; |
|||
(await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("user1-store-value"); |
|||
|
|||
_currentUserId = _testData.User2Id; |
|||
(await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("user2-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User() |
|||
{ |
|||
_currentUserId = Guid.NewGuid(); |
|||
(await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Get_From_Store_For_Current_User_With_GetOrNullForCurrentUserAsync() |
|||
{ |
|||
_currentUserId = _testData.User1Id; |
|||
(await _settingManager.GetOrNullForCurrentUserAsync("MySetting2")).ShouldBe("user1-store-value"); |
|||
|
|||
_currentUserId = _testData.User2Id; |
|||
(await _settingManager.GetOrNullForCurrentUserAsync("MySetting2")).ShouldBe("user2-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User_With_GetOrNullForCurrentUserAsync() |
|||
{ |
|||
_currentUserId = Guid.NewGuid(); |
|||
(await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Not_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User_But_Specified_Fallback_As_False() |
|||
{ |
|||
_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(_testData.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(_testData.User1Id, fallback: false); |
|||
settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value"); |
|||
settingValues.ShouldContain(sv => sv.Name == "MySettingWithoutInherit" && sv.Value == "user1-store-value"); |
|||
settingValues.ShouldNotContain(sv => sv.Name == "MySetting1"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Delete_Setting_Record_When_Set_To_Null() |
|||
{ |
|||
await _settingManager.SetForUserAsync(_testData.User1Id, "MySetting2", null); |
|||
|
|||
GetSettingsFromDbContext( |
|||
UserSettingValueProvider.ProviderName, |
|||
_testData.User1Id.ToString(), |
|||
"MySetting2" |
|||
).Count.ShouldBe(0); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Change_User_Setting() |
|||
{ |
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) |
|||
.ShouldBe("user1-store-value"); |
|||
|
|||
await _settingManager.SetForUserAsync(_testData.User1Id, "MySetting2", "user1-new-store-value"); |
|||
|
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) |
|||
.ShouldBe("user1-new-store-value"); |
|||
|
|||
GetSettingsFromDbContext( |
|||
UserSettingValueProvider.ProviderName, |
|||
_testData.User1Id.ToString(), |
|||
"MySetting2" |
|||
).Single().Value.ShouldBe("user1-new-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Delete_Setting_Record_When_Set_To_Fallback_Value() |
|||
{ |
|||
await _settingManager.SetForUserAsync( |
|||
_testData.User1Id, |
|||
"MySetting2", |
|||
"default-store-value" |
|||
); |
|||
|
|||
GetSettingsFromDbContext( |
|||
UserSettingValueProvider.ProviderName, |
|||
_testData.User1Id.ToString(), |
|||
"MySetting2" |
|||
).Count.ShouldBe(0); |
|||
|
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) |
|||
.ShouldBe("default-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Not_Delete_Setting_Record_When_Set_To_Fallback_Value_If_Forced() |
|||
{ |
|||
await _settingManager.SetForUserAsync( |
|||
_testData.User1Id, |
|||
"MySetting2", |
|||
"default-store-value", |
|||
forceToSet: true |
|||
); |
|||
|
|||
GetSettingsFromDbContext( |
|||
UserSettingValueProvider.ProviderName, |
|||
_testData.User1Id.ToString(), |
|||
"MySetting2" |
|||
).Single().Value.ShouldBe("default-store-value"); |
|||
|
|||
(await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) |
|||
.ShouldBe("default-store-value"); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Get_For_Given_User_For_Non_Inherited_Setting() |
|||
{ |
|||
(await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id)).ShouldBe("user1-store-value"); |
|||
(await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User2Id)).ShouldBeNull(); //Does not inherit!
|
|||
(await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit")).ShouldBe("default-store-value"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
|||
|
|||
namespace Volo.Abp.SettingManagement |
|||
{ |
|||
public class SettingsTestBase : SettingManagementTestBase<AbpSettingManagementTestModule> |
|||
{ |
|||
protected virtual void UsingDbContext(Action<ISettingManagementDbContext> action) |
|||
{ |
|||
using (var dbContext = GetRequiredService<ISettingManagementDbContext>()) |
|||
{ |
|||
action.Invoke(dbContext); |
|||
} |
|||
} |
|||
|
|||
protected virtual T UsingDbContext<T>(Func<ISettingManagementDbContext, T> action) |
|||
{ |
|||
using (var dbContext = GetRequiredService<ISettingManagementDbContext>()) |
|||
{ |
|||
return action.Invoke(dbContext); |
|||
} |
|||
} |
|||
|
|||
protected List<Setting> GetSettingsFromDbContext(string entityType, string entityId, string name) |
|||
{ |
|||
return UsingDbContext(context => |
|||
context.Settings.Where( |
|||
s => |
|||
s.ProviderName == entityType && |
|||
s.ProviderKey == entityId && |
|||
s.Name == name |
|||
).ToList() |
|||
); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue