diff --git a/Volo.Abp.sln b/Volo.Abp.sln index b8e408ed89..4969f315ae 100644 --- a/Volo.Abp.sln +++ b/Volo.Abp.sln @@ -268,6 +268,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.Domain EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.EntityFrameworkCore", "src\Volo.Abp.Permissions.EntityFrameworkCore\Volo.Abp.Permissions.EntityFrameworkCore.csproj", "{2300E155-2621-4FCF-BD44-B61BA5A92B82}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Permissions.Tests", "test\Volo.Abp.Permissions.Tests\Volo.Abp.Permissions.Tests.csproj", "{7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -698,6 +700,10 @@ Global {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Debug|Any CPU.Build.0 = Debug|Any CPU {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Release|Any CPU.ActiveCfg = Release|Any CPU {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Release|Any CPU.Build.0 = Release|Any CPU + {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -828,6 +834,7 @@ Global {D77E0662-8404-43C5-9C46-6289EA207A40} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} {E4D0326C-515D-46FA-AF7E-1AC32155BD03} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} {2300E155-2621-4FCF-BD44-B61BA5A92B82} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} + {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647} = {37087D1B-3693-4E96-983D-A69F210BDE53} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/test/Volo.Abp.Permissions.Tests/Volo.Abp.Permissions.Tests.csproj b/test/Volo.Abp.Permissions.Tests/Volo.Abp.Permissions.Tests.csproj new file mode 100644 index 0000000000..3de3b2ada0 --- /dev/null +++ b/test/Volo.Abp.Permissions.Tests/Volo.Abp.Permissions.Tests.csproj @@ -0,0 +1,25 @@ + + + + netcoreapp2.0 + Volo.Abp.Permissions.Tests + Volo.Abp.Permissions.Tests + true + false + false + false + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestBase.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestBase.cs new file mode 100644 index 0000000000..d6c5ea2d4f --- /dev/null +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestBase.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Volo.Abp.Permissions.EntityFrameworkCore; +using Volo.Abp.Session; +using Volo.Abp.TestBase; + +namespace Volo.Abp.Permissions +{ + public class AbpPermissionTestBase : AbpIntegratedTest + { + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + + protected virtual void UsingDbContext(Action action) + { + using (var dbContext = GetRequiredService()) + { + action.Invoke(dbContext); + } + } + + protected virtual T UsingDbContext(Func action) + { + using (var dbContext = GetRequiredService()) + { + return action.Invoke(dbContext); + } + } + + protected List GetSettingsFromDbContext(string entityType, string entityId, string name) + { + return UsingDbContext(context => + context.PermissionGrants.Where( + s => + s.ProviderName == UserSettingValueProvider.ProviderName && + s.ProviderKey == AbpPermissionTestDataBuilder.User1Id.ToString() && + s.Name == "MySetting2" + ).ToList() + ); + } + } +} diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestDataBuilder.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestDataBuilder.cs new file mode 100644 index 0000000000..4556b19a12 --- /dev/null +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestDataBuilder.cs @@ -0,0 +1,26 @@ +using System; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; + +namespace Volo.Abp.Permissions +{ + public class AbpPermissionTestDataBuilder : ITransientDependency + { + public static Guid User1Id = Guid.NewGuid(); + public static Guid User2Id = Guid.NewGuid(); + + private readonly IPermissionGrantRepository _permissionGrantRepository; + private readonly IGuidGenerator _guidGenerator; + + public AbpPermissionTestDataBuilder(IGuidGenerator guidGenerator, IPermissionGrantRepository permissionGrantRepository) + { + _guidGenerator = guidGenerator; + _permissionGrantRepository = permissionGrantRepository; + } + + public void Build() + { + + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestModule.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestModule.cs new file mode 100644 index 0000000000..99a336fc7e --- /dev/null +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/AbpPermissionTestModule.cs @@ -0,0 +1,61 @@ +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Autofac; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Modularity; +using Volo.Abp.Permissions.EntityFrameworkCore; +using Volo.Abp.Session; +using Volo.Abp.Uow; + +namespace Volo.Abp.Permissions +{ + [DependsOn( + typeof(AbpPermissionsEntityFrameworkCoreModule), + typeof(AbpSessionModule), + typeof(AbpAutofacModule))] + public class AbpPermissionTestModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + + services.AddEntityFrameworkInMemoryDatabase(); + + var databaseName = Guid.NewGuid().ToString(); + + services.Configure(options => + { + options.Configure(context => + { + context.DbContextOptions.UseInMemoryDatabase(databaseName); + }); + }); + + services.Configure(options => + { + options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; //EF in-memory database does not support transactions + }); + + services.Configure(options => + { + options.DefinitionProviders.Add(); + }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + SeedTestData(context); + } + + private static void SeedTestData(ApplicationInitializationContext context) + { + using (var scope = context.ServiceProvider.CreateScope()) + { + scope.ServiceProvider + .GetRequiredService() + .Build(); + } + } + } +} diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs new file mode 100644 index 0000000000..619d7dee2f --- /dev/null +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_Basic_Tests.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Permissions +{ + public class PermissionManager_Basic_Tests : AbpPermissionTestBase + { + private readonly IPermissionManager _permissionManager; + + public PermissionManager_Basic_Tests() + { + _permissionManager = GetRequiredService(); + } + + [Fact] + public async Task Test1() + { + _permissionManager.ShouldNotBeNull(); + } + } +} diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/TestPermissionDefinitionProvider.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/TestPermissionDefinitionProvider.cs new file mode 100644 index 0000000000..de773c8f90 --- /dev/null +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/TestPermissionDefinitionProvider.cs @@ -0,0 +1,13 @@ +namespace Volo.Abp.Permissions +{ + public class TestPermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var myPermission1 = new PermissionDefinition("MyPermission1"); + var myPermission2 = new PermissionDefinition("MyPermission2"); + + context.Add(myPermission1, myPermission2); + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingTestDataBuilder.cs similarity index 89% rename from test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs rename to test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingTestDataBuilder.cs index 73488df1b4..b97b322bc8 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityTestDataBuilder.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingTestDataBuilder.cs @@ -5,7 +5,7 @@ using Volo.Abp.Session; namespace Volo.Abp.Settings { - public class AbpIdentityTestDataBuilder : ITransientDependency + public class AbpSettingTestDataBuilder : ITransientDependency { public static Guid User1Id = Guid.NewGuid(); public static Guid User2Id = Guid.NewGuid(); @@ -13,7 +13,7 @@ namespace Volo.Abp.Settings private readonly ISettingRepository _settingRepository; private readonly IGuidGenerator _guidGenerator; - public AbpIdentityTestDataBuilder(ISettingRepository settingRepository, IGuidGenerator guidGenerator) + public AbpSettingTestDataBuilder(ISettingRepository settingRepository, IGuidGenerator guidGenerator) { _settingRepository = settingRepository; _guidGenerator = guidGenerator; diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingsTestBase.cs similarity index 93% rename from test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs rename to test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingsTestBase.cs index d30568aca4..40f89d2796 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestBase.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingsTestBase.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.Settings context.Settings.Where( s => s.ProviderName == UserSettingValueProvider.ProviderName && - s.ProviderKey == AbpIdentityTestDataBuilder.User1Id.ToString() && + s.ProviderKey == AbpSettingTestDataBuilder.User1Id.ToString() && s.Name == "MySetting2" ).ToList() ); diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestModule.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingsTestModule.cs similarity index 96% rename from test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestModule.cs rename to test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingsTestModule.cs index a231bab412..89bfa03ee3 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpIdentityApplicationTestModule.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/AbpSettingsTestModule.cs @@ -53,7 +53,7 @@ namespace Volo.Abp.Settings using (var scope = context.ServiceProvider.CreateScope()) { scope.ServiceProvider - .GetRequiredService() + .GetRequiredService() .Build(); } } diff --git a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs index 767a10bd94..47080a973a 100644 --- a/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs +++ b/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingManager_User_Tests.cs @@ -30,8 +30,8 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Get_From_Store_For_Given_User() { - (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id)).ShouldBe("user1-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User2Id)).ShouldBe("user2-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpSettingTestDataBuilder.User1Id)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpSettingTestDataBuilder.User2Id)).ShouldBe("user2-store-value"); } [Fact] @@ -49,10 +49,10 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Get_From_Store_For_Current_User() { - _currentUserId = AbpIdentityTestDataBuilder.User1Id; + _currentUserId = AbpSettingTestDataBuilder.User1Id; (await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("user1-store-value"); - _currentUserId = AbpIdentityTestDataBuilder.User2Id; + _currentUserId = AbpSettingTestDataBuilder.User2Id; (await _settingManager.GetOrNullAsync("MySetting2")).ShouldBe("user2-store-value"); } @@ -66,10 +66,10 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Get_From_Store_For_Current_User_With_GetOrNullForCurrentUserAsync() { - _currentUserId = AbpIdentityTestDataBuilder.User1Id; + _currentUserId = AbpSettingTestDataBuilder.User1Id; (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2")).ShouldBe("user1-store-value"); - _currentUserId = AbpIdentityTestDataBuilder.User2Id; + _currentUserId = AbpSettingTestDataBuilder.User2Id; (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2")).ShouldBe("user2-store-value"); } @@ -90,7 +90,7 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Get_All_From_Store_For_Given_User() { - var settingValues = await _settingManager.GetAllForUserAsync(AbpIdentityTestDataBuilder.User1Id); + var settingValues = await _settingManager.GetAllForUserAsync(AbpSettingTestDataBuilder.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"); @@ -99,7 +99,7 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Get_All_From_Store_For_Given_User_Without_Fallback() { - var settingValues = await _settingManager.GetAllForUserAsync(AbpIdentityTestDataBuilder.User1Id, fallback: false); + var settingValues = await _settingManager.GetAllForUserAsync(AbpSettingTestDataBuilder.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"); @@ -108,11 +108,11 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Delete_Setting_Record_When_Set_To_Null() { - await _settingManager.SetForUserAsync(AbpIdentityTestDataBuilder.User1Id, "MySetting2", null); + await _settingManager.SetForUserAsync(AbpSettingTestDataBuilder.User1Id, "MySetting2", null); GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, - AbpIdentityTestDataBuilder.User1Id.ToString(), + AbpSettingTestDataBuilder.User1Id.ToString(), "MySetting2" ).Count.ShouldBe(0); } @@ -120,17 +120,17 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Change_User_Setting() { - (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpSettingTestDataBuilder.User1Id)) .ShouldBe("user1-store-value"); - await _settingManager.SetForUserAsync(AbpIdentityTestDataBuilder.User1Id, "MySetting2", "user1-new-store-value"); + await _settingManager.SetForUserAsync(AbpSettingTestDataBuilder.User1Id, "MySetting2", "user1-new-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpSettingTestDataBuilder.User1Id)) .ShouldBe("user1-new-store-value"); GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, - AbpIdentityTestDataBuilder.User1Id.ToString(), + AbpSettingTestDataBuilder.User1Id.ToString(), "MySetting2" ).Single().Value.ShouldBe("user1-new-store-value"); } @@ -139,18 +139,18 @@ namespace Volo.Abp.Settings public async Task Should_Delete_Setting_Record_When_Set_To_Fallback_Value() { await _settingManager.SetForUserAsync( - AbpIdentityTestDataBuilder.User1Id, + AbpSettingTestDataBuilder.User1Id, "MySetting2", "default-store-value" ); GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, - AbpIdentityTestDataBuilder.User1Id.ToString(), + AbpSettingTestDataBuilder.User1Id.ToString(), "MySetting2" ).Count.ShouldBe(0); - (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpSettingTestDataBuilder.User1Id)) .ShouldBe("default-store-value"); } @@ -158,7 +158,7 @@ namespace Volo.Abp.Settings public async Task Should_Not_Delete_Setting_Record_When_Set_To_Fallback_Value_If_Forced() { await _settingManager.SetForUserAsync( - AbpIdentityTestDataBuilder.User1Id, + AbpSettingTestDataBuilder.User1Id, "MySetting2", "default-store-value", forceToSet: true @@ -166,19 +166,19 @@ namespace Volo.Abp.Settings GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, - AbpIdentityTestDataBuilder.User1Id.ToString(), + AbpSettingTestDataBuilder.User1Id.ToString(), "MySetting2" ).Single().Value.ShouldBe("default-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpIdentityTestDataBuilder.User1Id)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", AbpSettingTestDataBuilder.User1Id)) .ShouldBe("default-store-value"); } [Fact] public async Task Should_Get_For_Given_User_For_Non_Inherited_Setting() { - (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", AbpIdentityTestDataBuilder.User1Id)).ShouldBe("user1-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", AbpIdentityTestDataBuilder.User2Id)).ShouldBeNull(); //Does not inherit! + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", AbpSettingTestDataBuilder.User1Id)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", AbpSettingTestDataBuilder.User2Id)).ShouldBeNull(); //Does not inherit! (await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit")).ShouldBe("default-store-value"); } }