using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; using Volo.Abp.Modularity; using Volo.Abp.Uow; namespace DashboardDemo { /* All test classes are derived from this class, directly or indirectly. */ public abstract class DashboardDemoTestBase : AbpIntegratedTest where TStartupModule : IAbpModule { protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) { options.UseAutofac(); } protected virtual void WithUnitOfWork(Action action) { WithUnitOfWork(new AbpUnitOfWorkOptions(), action); } protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) { using (var scope = ServiceProvider.CreateScope()) { var uowManager = scope.ServiceProvider.GetRequiredService(); using (var uow = uowManager.Begin(options)) { action(); uow.Complete(); } } } protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); } protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func action) { using (var scope = ServiceProvider.CreateScope()) { var uowManager = scope.ServiceProvider.GetRequiredService(); using (var uow = uowManager.Begin(options)) { await action(); await uow.CompleteAsync(); } } } protected virtual TResult WithUnitOfWork(Func func) { return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); } protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) { using (var scope = ServiceProvider.CreateScope()) { var uowManager = scope.ServiceProvider.GetRequiredService(); using (var uow = uowManager.Begin(options)) { var result = func(); uow.Complete(); return result; } } } protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); } protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func> func) { using (var scope = ServiceProvider.CreateScope()) { var uowManager = scope.ServiceProvider.GetRequiredService(); using (var uow = uowManager.Begin(options)) { var result = await func(); await uow.CompleteAsync(); return result; } } } } }