mirror of https://github.com/abpframework/abp.git
14 changed files with 247 additions and 89 deletions
@ -0,0 +1,23 @@ |
|||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.Threading; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Data |
||||
|
{ |
||||
|
public static class DataSeedHelper |
||||
|
{ |
||||
|
public static void Seed(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
AsyncHelper.RunSync(async () => |
||||
|
{ |
||||
|
using (var scope = context.ServiceProvider.CreateScope()) |
||||
|
{ |
||||
|
await scope.ServiceProvider |
||||
|
.GetRequiredService<IDataSeeder>() |
||||
|
.SeedAsync(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,12 +1,7 @@ |
|||||
using Volo.Abp; |
namespace MyCompanyName.MyProjectName |
||||
|
|
||||
namespace MyCompanyName.MyProjectName |
|
||||
{ |
{ |
||||
public abstract class MyProjectNameApplicationTestBase : AbpIntegratedTest<MyProjectNameApplicationTestModule> |
public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase<MyProjectNameApplicationTestModule> |
||||
{ |
{ |
||||
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) |
|
||||
{ |
|
||||
options.UseAutofac(); |
|
||||
} |
|
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -1,63 +1,14 @@ |
|||||
using Microsoft.Data.Sqlite; |
using MyCompanyName.MyProjectName.EntityFrameworkCore; |
||||
using Microsoft.EntityFrameworkCore; |
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure; |
|
||||
using Microsoft.EntityFrameworkCore.Storage; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using MyCompanyName.MyProjectName.EntityFrameworkCore; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.Autofac; |
|
||||
using Volo.Abp.EntityFrameworkCore; |
|
||||
using Volo.Abp.Modularity; |
using Volo.Abp.Modularity; |
||||
|
|
||||
namespace MyCompanyName.MyProjectName |
namespace MyCompanyName.MyProjectName |
||||
{ |
{ |
||||
[DependsOn( |
[DependsOn( |
||||
typeof(MyProjectNameApplicationModule), |
typeof(MyProjectNameApplicationModule), |
||||
typeof(MyProjectNameEntityFrameworkCoreModule), |
typeof(MyProjectNameEntityFrameworkCoreTestModule) |
||||
typeof(AbpAutofacModule), |
|
||||
typeof(AbpTestBaseModule) |
|
||||
)] |
)] |
||||
public class MyProjectNameApplicationTestModule : AbpModule |
public class MyProjectNameApplicationTestModule : AbpModule |
||||
{ |
{ |
||||
private SqliteConnection _sqliteConnection; |
|
||||
|
|
||||
public override void ConfigureServices(ServiceConfigurationContext context) |
|
||||
{ |
|
||||
context.Services.AddAlwaysAllowAuthorization(); |
|
||||
|
|
||||
ConfigureInMemorySqlite(context.Services); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureInMemorySqlite(IServiceCollection services) |
|
||||
{ |
|
||||
_sqliteConnection = CreateDatabaseAndGetConnection(); |
|
||||
|
|
||||
services.Configure<AbpDbContextOptions>(options => |
|
||||
{ |
|
||||
options.Configure(context => { context.DbContextOptions.UseSqlite(_sqliteConnection); }); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
public override void OnApplicationShutdown(ApplicationShutdownContext context) |
|
||||
{ |
|
||||
_sqliteConnection.Dispose(); |
|
||||
} |
|
||||
|
|
||||
private static SqliteConnection CreateDatabaseAndGetConnection() |
|
||||
{ |
|
||||
var connection = new SqliteConnection("Data Source=:memory:"); |
|
||||
connection.Open(); |
|
||||
|
|
||||
var options = new DbContextOptionsBuilder<MyProjectNameMigrationsDbContext>() |
|
||||
.UseSqlite(connection) |
|
||||
.Options; |
|
||||
|
|
||||
using (var context = new MyProjectNameMigrationsDbContext(options)) |
|
||||
{ |
|
||||
context.GetService<IRelationalDatabaseCreator>().CreateTables(); |
|
||||
} |
|
||||
|
|
||||
return connection; |
|
||||
} |
|
||||
} |
} |
||||
} |
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Shouldly; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.Samples |
||||
|
{ |
||||
|
/* This is just an example test class. |
||||
|
* Normally, you don't test code of the modules you are using |
||||
|
* (like IIdentityUserAppService here). |
||||
|
* Only test your own application services. |
||||
|
*/ |
||||
|
public class SampleAppServiceTests : MyProjectNameApplicationTestBase |
||||
|
{ |
||||
|
private readonly IIdentityUserAppService _userAppService; |
||||
|
|
||||
|
public SampleAppServiceTests() |
||||
|
{ |
||||
|
_userAppService = ServiceProvider.GetRequiredService<IIdentityUserAppService>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Initial_Data_Should_Contain_Admin_User() |
||||
|
{ |
||||
|
//Act
|
||||
|
var result = await _userAppService.GetListAsync(new GetIdentityUsersInput()); |
||||
|
|
||||
|
//Assert
|
||||
|
result.TotalCount.ShouldBeGreaterThan(0); |
||||
|
result.Items.ShouldContain(u => u.UserName == "admin"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.EntityFrameworkCore |
||||
|
{ |
||||
|
public abstract class MyProjectNameEntityFrameworkCoreTestBase : MyProjectNameTestBase<MyProjectNameEntityFrameworkCoreTestModule> |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,57 @@ |
|||||
|
using Microsoft.Data.Sqlite; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.EntityFrameworkCore.Infrastructure; |
||||
|
using Microsoft.EntityFrameworkCore.Storage; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName.EntityFrameworkCore |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(MyProjectNameEntityFrameworkCoreModule), |
||||
|
typeof(MyProjectNameTestBaseModule) |
||||
|
)] |
||||
|
public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule |
||||
|
{ |
||||
|
private SqliteConnection _sqliteConnection; |
||||
|
|
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
ConfigureInMemorySqlite(context.Services); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureInMemorySqlite(IServiceCollection services) |
||||
|
{ |
||||
|
_sqliteConnection = CreateDatabaseAndGetConnection(); |
||||
|
|
||||
|
services.Configure<AbpDbContextOptions>(options => |
||||
|
{ |
||||
|
options.Configure(context => { context.DbContextOptions.UseSqlite(_sqliteConnection); }); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationShutdown(ApplicationShutdownContext context) |
||||
|
{ |
||||
|
_sqliteConnection.Dispose(); |
||||
|
} |
||||
|
|
||||
|
private static SqliteConnection CreateDatabaseAndGetConnection() |
||||
|
{ |
||||
|
var connection = new SqliteConnection("Data Source=:memory:"); |
||||
|
connection.Open(); |
||||
|
|
||||
|
var options = new DbContextOptionsBuilder<MyProjectNameMigrationsDbContext>() |
||||
|
.UseSqlite(connection) |
||||
|
.Options; |
||||
|
|
||||
|
using (var context = new MyProjectNameMigrationsDbContext(options)) |
||||
|
{ |
||||
|
context.GetService<IRelationalDatabaseCreator>().CreateTables(); |
||||
|
} |
||||
|
|
||||
|
return connection; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,21 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<Import Project="..\..\common.props" /> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netcoreapp2.2</TargetFramework> |
||||
|
<RootNamespace>MyCompanyName.MyProjectName</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations\MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj" /> |
||||
|
<ProjectReference Include="..\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" /> |
||||
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="2.2.4" /> |
||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.4" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,26 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<Import Project="..\..\common.props" /> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netcoreapp2.2</TargetFramework> |
||||
|
<RootNamespace>MyCompanyName.MyProjectName</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.TestBase\Volo.Abp.TestBase.csproj" /> |
||||
|
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" /> |
||||
|
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" /> |
||||
|
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" /> |
||||
|
<PackageReference Include="NSubstitute" Version="4.1.0" /> |
||||
|
<PackageReference Include="Shouldly" Version="3.0.2" /> |
||||
|
<PackageReference Include="xunit" Version="2.4.1" /> |
||||
|
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" /> |
||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,14 @@ |
|||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName |
||||
|
{ |
||||
|
public abstract class MyProjectNameTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule> |
||||
|
where TStartupModule : IAbpModule |
||||
|
{ |
||||
|
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) |
||||
|
{ |
||||
|
options.UseAutofac(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using MyCompanyName.MyProjectName.Data; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Authorization; |
||||
|
using Volo.Abp.Autofac; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace MyCompanyName.MyProjectName |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpAutofacModule), |
||||
|
typeof(AbpTestBaseModule), |
||||
|
typeof(AbpAuthorizationModule), |
||||
|
typeof(MyProjectNameDomainModule) |
||||
|
)] |
||||
|
public class MyProjectNameTestBaseModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.AddAlwaysAllowAuthorization(); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
SeedTestData(context); |
||||
|
} |
||||
|
|
||||
|
private static void SeedTestData(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
DataSeedHelper.Seed(context); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue