Using `WebApplicationFactory` as web unit test base class.

Resolve #17484
pull/17497/head
maliming 2 years ago
parent c17c4c261d
commit 0329dd29c1
No known key found for this signature in database
GPG Key ID: A646B9CB645ECEA4

@ -28,6 +28,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="$(MicrosoftAspNetCorePackageVersion)" />
</ItemGroup>
</Project>

@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Volo.Abp.AspNetCore.TestBase;
public abstract class AbpAspNetCoreWebApplicationFactoryIntegratedTestBase<TProgram> : WebApplicationFactory<TProgram>
where TProgram : class
{
protected HttpClient Client { get; set; }
public IServiceProvider ServiceProvider => Services;
protected AbpAspNetCoreWebApplicationFactoryIntegratedTestBase()
{
Client = CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
ServiceProvider.GetRequiredService<ITestServerAccessor>().Server = Server;
}
protected override IHost CreateHost(IHostBuilder builder)
{
builder.ConfigureServices(ConfigureServices);
return base.CreateHost(builder);
}
public virtual T? GetService<T>()
{
return ServiceProvider!.GetService<T>();
}
public virtual T GetRequiredService<T>() where T : notnull
{
return ServiceProvider!.GetRequiredService<T>();
}
protected virtual void ConfigureServices(IServiceCollection services)
{
}
#region GetUrl
/// <summary>
/// Gets default URL for given controller type.
/// </summary>
/// <typeparam name="TController">The type of the controller.</typeparam>
protected virtual string GetUrl<TController>()
{
return "/" + typeof(TController).Name.RemovePostFix("Controller", "AppService", "ApplicationService", "IntService", "IntegrationService", "Service");
}
/// <summary>
/// Gets default URL for given controller type's given action.
/// </summary>
/// <typeparam name="TController">The type of the controller.</typeparam>
protected virtual string GetUrl<TController>(string actionName)
{
return GetUrl<TController>() + "/" + actionName;
}
/// <summary>
/// Gets default URL for given controller type's given action with query string parameters (as anonymous object).
/// </summary>
/// <typeparam name="TController">The type of the controller.</typeparam>
protected virtual string GetUrl<TController>(string actionName, object queryStringParamsAsAnonymousObject)
{
var url = GetUrl<TController>(actionName);
var dictionary = new RouteValueDictionary(queryStringParamsAsAnonymousObject);
if (dictionary.Any())
{
url += "?" + dictionary.Select(d => $"{d.Key}={d.Value}").JoinAsString("&");
}
return url;
}
#endregion
}

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Builder;
using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.App;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AppModule>();
public partial class Program
{
}

@ -1,19 +0,0 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Volo.Abp.AspNetCore.App;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AppModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -1,7 +1,7 @@
namespace Volo.Abp.AspNetCore.MultiTenancy;
public abstract class AspNetCoreMultiTenancyTestBase : AbpAspNetCoreTestBase<App.Startup>
public abstract class AspNetCoreMultiTenancyTestBase : AbpAspNetCoreTestBase<Program>
{
}

@ -24,23 +24,22 @@ public class AspNetCoreMultiTenancy_WithDomainResolver_Tests : AspNetCoreMultiTe
_options = ServiceProvider.GetRequiredService<IOptions<AbpAspNetCoreMultiTenancyOptions>>().Value;
}
protected override IHostBuilder CreateHostBuilder()
protected override void ConfigureServices(IServiceCollection services)
{
return base.CreateHostBuilder().ConfigureServices(services =>
services.Configure<AbpDefaultTenantStoreOptions>(options =>
{
services.Configure<AbpDefaultTenantStoreOptions>(options =>
options.Tenants = new[]
{
options.Tenants = new[]
{
new TenantConfiguration(_testTenantId, _testTenantName)
};
});
new TenantConfiguration(_testTenantId, _testTenantName)
};
});
services.Configure<AbpTenantResolveOptions>(options =>
{
options.AddDomainTenantResolver("{0}.abp.io:8080");
});
services.Configure<AbpTenantResolveOptions>(options =>
{
options.AddDomainTenantResolver("{0}.abp.io:8080");
});
base.ConfigureServices(services);
}
[Fact]

@ -25,18 +25,17 @@ public class AspNetCoreMultiTenancy_Without_DomainResolver_Tests : AspNetCoreMul
_options = ServiceProvider.GetRequiredService<IOptions<AbpAspNetCoreMultiTenancyOptions>>().Value;
}
protected override IHostBuilder CreateHostBuilder()
protected override void ConfigureServices(IServiceCollection services)
{
return base.CreateHostBuilder().ConfigureServices(services =>
services.Configure<AbpDefaultTenantStoreOptions>(options =>
{
services.Configure<AbpDefaultTenantStoreOptions>(options =>
options.Tenants = new[]
{
options.Tenants = new[]
{
new TenantConfiguration(_testTenantId, _testTenantName)
};
});
new TenantConfiguration(_testTenantId, _testTenantName)
};
});
base.ConfigureServices(services);
}
[Fact]

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Security.Claims;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.DependencyInjection;
@ -37,6 +38,12 @@ public class AbpAspNetCoreMvcTestModule : AbpModule
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<IMvcBuilder>(mvcBuilder =>
{
mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(typeof(AbpAspNetCoreMvcTestModule).Assembly));
mvcBuilder.PartManager.ApplicationParts.Add(new CompiledRazorAssemblyPart(typeof(AbpAspNetCoreMvcTestModule).Assembly));
});
context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
{
options.AddAssemblyResource(

@ -5,7 +5,7 @@ using Microsoft.Extensions.Hosting;
namespace Volo.Abp.AspNetCore.Mvc;
public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase<Startup>
public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase<Program>
{
protected override IHostBuilder CreateHostBuilder()
{
@ -17,8 +17,7 @@ public abstract class AspNetCoreMvcTestBase : AbpAspNetCoreTestBase<Startup>
)
);
return base.CreateHostBuilder()
.UseContentRoot(contentRootPath);
return base.CreateHostBuilder()?.UseContentRoot(contentRootPath);
}
private static string CalculateContentRootPath(string projectFileName, string contentPath)

@ -22,11 +22,11 @@ public class AuditIntegrationServiceTestController_Tests : AspNetCoreMvcTestBase
_auditingStore = ServiceProvider.GetRequiredService<IAuditingStore>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
_auditingStore = Substitute.For<IAuditingStore>();
services.Replace(ServiceDescriptor.Singleton(_auditingStore));
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]
@ -55,4 +55,4 @@ public class AuditIntegrationServiceTestController_Tests : AspNetCoreMvcTestBase
await GetResponseAsync("/integration-api/audit-test/");
await _auditingStore.DidNotReceive().SaveAsync(Arg.Any<AuditLogInfo>());
}
}
}

@ -23,11 +23,11 @@ public class AuditTestController_Tests : AspNetCoreMvcTestBase
_auditingStore = ServiceProvider.GetRequiredService<IAuditingStore>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
_auditingStore = Substitute.For<IAuditingStore>();
services.Replace(ServiceDescriptor.Singleton(_auditingStore));
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]

@ -22,11 +22,11 @@ public class AuditTestPage_Tests : AspNetCoreMvcTestBase
_auditingStore = ServiceProvider.GetRequiredService<IAuditingStore>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
_auditingStore = Substitute.For<IAuditingStore>();
services.Replace(ServiceDescriptor.Singleton(_auditingStore));
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]

@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Controllers;
public class ReplaceBuiltInController_Tests : AspNetCoreMvcTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpAspNetCoreMvcOptions>(options =>
{

@ -24,9 +24,9 @@ public class AbpAuthorizationExceptionTestController_Tests : AspNetCoreMvcTestBa
FakeRequiredService = GetRequiredService<FakeUserClaims>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
base.ConfigureServices(context, services);
base.ConfigureServices(services);
FakeExceptionSubscriber = Substitute.For<IExceptionSubscriber>();

@ -24,9 +24,9 @@ public class AbpAuthorizationExceptionTestPage_Tests : AspNetCoreMvcTestBase
_fakeRequiredService = GetRequiredService<FakeUserClaims>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
base.ConfigureServices(context, services);
base.ConfigureServices(services);
_fakeExceptionSubscriber = Substitute.For<IExceptionSubscriber>();

@ -26,9 +26,9 @@ public class ExceptionTestController_Tests : AspNetCoreMvcTestBase
FakeRequiredService = GetRequiredService<FakeUserClaims>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
base.ConfigureServices(context, services);
base.ConfigureServices(services);
_fakeExceptionSubscriber = Substitute.For<IExceptionSubscriber>();

@ -26,9 +26,9 @@ public class ExceptionTestPage_Tests : AspNetCoreMvcTestBase
_fakeRequiredService = GetRequiredService<FakeUserClaims>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
base.ConfigureServices(context, services);
base.ConfigureServices(services);
_fakeExceptionSubscriber = Substitute.For<IExceptionSubscriber>();

@ -10,14 +10,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Json;
public class JsonResultController_Tests : AspNetCoreMvcTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpJsonOptions>(options =>
{
options.OutputDateTimeFormat = "yyyy*MM*dd";
});
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]

@ -17,14 +17,14 @@ public class JsonSerializer_Tests : AspNetCoreMvcTestBase
_jsonSerializer = ServiceProvider.GetRequiredService<IJsonSerializer>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpJsonOptions>(options =>
{
options.OutputDateTimeFormat = "yyyy*MM*dd";
});
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]

@ -21,7 +21,7 @@ public class LocalizationTestController_Tests : AspNetCoreMvcTestBase
}
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpRequestLocalizationOptions>(options =>
{

@ -122,22 +122,22 @@ public abstract class ModelBindingController_Tests : AspNetCoreMvcTestBase
public class ModelBindingController_Utc_Tests : ModelBindingController_Tests
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
Kind = DateTimeKind.Utc;
services.Configure<AbpClockOptions>(x => x.Kind = Kind);
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
}
public class ModelBindingController_Local_Tests : ModelBindingController_Tests
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
Kind = DateTimeKind.Local;
services.Configure<AbpClockOptions>(x => x.Kind = Kind);
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
}

@ -0,0 +1,48 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity.PlugIns;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AbpAspNetCoreMvcTestModule>(options =>
{
var hostEnvironment = options.Services.GetHostingEnvironment();
var currentDirectory = hostEnvironment.ContentRootPath;
var plugDllInPath = "";
for (var i = 0; i < 10; i++)
{
var parentDirectory = new DirectoryInfo(currentDirectory).Parent;
if (parentDirectory == null)
{
break;
}
if (parentDirectory.Name == "test")
{
#if DEBUG
plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Debug", "net7.0");
#else
plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Release", "net7.0");
#endif
break;
}
currentDirectory = parentDirectory.FullName;
}
if (plugDllInPath.IsNullOrWhiteSpace())
{
throw new AbpException("Could not find the plug DLL path!");
}
options.PlugInSources.AddFolder(plugDllInPath);
});
public partial class Program
{
}

@ -10,7 +10,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Security.Headers;
public class SecurityHeadersTestController_Tests : AspNetCoreMvcTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpSecurityHeadersOptions>(options =>
{
@ -18,7 +18,7 @@ public class SecurityHeadersTestController_Tests : AspNetCoreMvcTestBase
options.Headers["Referrer-Policy"] = "no-referrer";
});
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]

@ -1,56 +0,0 @@
using System;
using System.IO;
using System.Linq;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.Modularity.PlugIns;
namespace Volo.Abp.AspNetCore.Mvc;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpAspNetCoreMvcTestModule>(options =>
{
var hostEnvironment = services.GetHostingEnvironment();
var currentDirectory = hostEnvironment.ContentRootPath;
var plugDllInPath = "";
for (var i = 0; i < 10; i++)
{
var parentDirectory = new DirectoryInfo(currentDirectory).Parent;
if (parentDirectory == null)
{
break;
}
if (parentDirectory.Name == "test")
{
#if DEBUG
plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Debug", "net7.0");
#else
plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Release", "net7.0");
#endif
break;
}
currentDirectory = parentDirectory.FullName;
}
if (plugDllInPath.IsNullOrWhiteSpace())
{
throw new AbpException("Could not find the plug DLL path!");
}
options.PlugInSources.AddFolder(plugDllInPath);
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -14,7 +14,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow;
public class UnitOfWorkMiddleware_Exception_Rollback_Tests : AspNetCoreMvcTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Replace(ServiceDescriptor.Transient<IUnitOfWork, TestUnitOfWork>());
}

@ -14,7 +14,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow;
public class UnitOfWorkPageFilter_Exception_Rollback_Tests : AspNetCoreMvcTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Replace(ServiceDescriptor.Transient<IUnitOfWork, TestUnitOfWork>());
}

@ -118,14 +118,14 @@ public class ValidationTestController_Tests : AspNetCoreMvcTestBase
public class DisableAutoModelValidationTestController_Tests : AspNetCoreMvcTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpAspNetCoreMvcOptions>(options =>
{
options.AutoModelValidation = false;
});
base.ConfigureServices(context, services);
base.ConfigureServices(services);
}
[Fact]

@ -2,7 +2,7 @@
namespace Volo.Abp.AspNetCore.Mvc.UI;
public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreIntegratedTestBase<Startup>
public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreIntegratedTestBase<Program>
{
}

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Builder;
using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.Mvc.UI;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AbpAspNetCoreMvcUiTestModule>();
public partial class Program
{
}

@ -1,20 +0,0 @@
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Volo.Abp.AspNetCore.Mvc.UI;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpAspNetCoreMvcUiTestModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -1,25 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Builder;
using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AbpAspNetCoreMvcUiThemeSharedTestModule>();
public class Program
public partial class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

@ -1,5 +1,5 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
public class AbpAspNetCoreMvcUiThemeSharedTestBase : AbpAspNetCoreTestBase<Startup>
public class AbpAspNetCoreMvcUiThemeSharedTestBase : AbpAspNetCoreTestBase<Program>
{
}

@ -11,8 +11,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.
)]
public class AbpAspNetCoreMvcUiThemeSharedTestModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
}
}

@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.
public class PageToolbar_Tests : AbpAspNetCoreMvcUiThemeSharedTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpPageToolbarOptions>(options =>
{

@ -1,18 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Logging;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpAspNetCoreMvcUiThemeSharedTestModule>();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.Volo.Abp.AspNetCore.Mvc.
public class Toolbar_Tests : AbpAspNetCoreMvcUiThemeSharedTestBase
{
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Configure<AbpToolbarOptions>(options =>
{
@ -35,7 +35,7 @@ public class Toolbar_Tests : AbpAspNetCoreMvcUiThemeSharedTestBase
var claimsPrincipal = new ClaimsPrincipal(identity);
var principalAccessor = Substitute.For<ICurrentPrincipalAccessor>();
principalAccessor.Principal.Returns(ci => claimsPrincipal);
Thread.CurrentPrincipal = claimsPrincipal;
services.Replace(ServiceDescriptor.Singleton<ICurrentPrincipalAccessor>(principalAccessor));
var themeManager = Substitute.For<IThemeManager>();
themeManager.CurrentTheme.Returns(x => null);

@ -1,5 +1,5 @@
namespace Volo.Abp.AspNetCore.Mvc.Versioning;
public abstract class AspNetCoreMvcVersioningTestBase : AbpAspNetCoreTestBase<Startup>
public abstract class AspNetCoreMvcVersioningTestBase : AbpAspNetCoreTestBase<Program>
{
}

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Builder;
using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.Mvc.Versioning;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AbpAspNetCoreMvcVersioningTestModule>();
public partial class Program
{
}

@ -1,20 +0,0 @@
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Volo.Abp.AspNetCore.Mvc.Versioning;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpAspNetCoreMvcVersioningTestModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Serilog;
@ -18,6 +19,14 @@ namespace Volo.Abp.AspNetCore.App;
)]
public class AbpSerilogTestModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<IMvcBuilder>(mvcBuilder =>
{
mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpSerilogTestModule).Assembly);
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpMultiTenancyOptions>(options => { options.IsEnabled = true; });

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Builder;
using Volo.Abp.AspNetCore;
using Volo.Abp.AspNetCore.App;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AbpSerilogTestModule>();
public partial class Program
{
}

@ -1,19 +0,0 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Volo.Abp.AspNetCore.App;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpSerilogTestModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -6,11 +6,11 @@ using Volo.Abp.AspNetCore.App;
namespace Volo.Abp.AspNetCore.Serilog;
public class AbpSerilogTestBase : AbpAspNetCoreTestBase<App.Startup>
public class AbpSerilogTestBase : AbpAspNetCoreTestBase<Program>
{
protected readonly CollectingSink CollectingSink = new CollectingSink();
protected override IHostBuilder CreateHostBuilder()
protected override IHost CreateHost(IHostBuilder builder)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
@ -19,8 +19,8 @@ public class AbpSerilogTestBase : AbpAspNetCoreTestBase<App.Startup>
.WriteTo.Sink(CollectingSink)
.CreateLogger();
return base.CreateHostBuilder()
.UseSerilog();
builder.UseSerilog();
return base.CreateHost(builder);;
}
protected LogEvent GetLogEvent(string text)

@ -33,18 +33,16 @@ public class Serilog_Enrichers_Tests : AbpSerilogTestBase
_logger = ServiceProvider.GetRequiredService<ILogger<Serilog_Enrichers_Tests>>();
}
protected override IHostBuilder CreateHostBuilder()
protected override void ConfigureServices(IServiceCollection services)
{
return base.CreateHostBuilder().ConfigureServices(services =>
services.Configure<AbpDefaultTenantStoreOptions>(options =>
{
services.Configure<AbpDefaultTenantStoreOptions>(options =>
options.Tenants = new[]
{
options.Tenants = new[]
{
new TenantConfiguration(_testTenantId, _testTenantName)
};
});
new TenantConfiguration(_testTenantId, _testTenantName)
};
});
base.ConfigureServices(services);
}
[Fact]

@ -9,13 +9,12 @@ using Volo.Abp.AspNetCore.TestBase;
namespace Volo.Abp.AspNetCore;
public class AbpAspNetCoreTestBase : AbpAspNetCoreTestBase<Startup>
public class AbpAspNetCoreTestBase : AbpAspNetCoreTestBase<Program>
{
}
public abstract class AbpAspNetCoreTestBase<TStartup> : AbpAspNetCoreIntegratedTestBase<TStartup>
where TStartup : class
public abstract class AbpAspNetCoreTestBase<TProgram> : AbpAspNetCoreWebApplicationFactoryIntegratedTestBase<TProgram>
where TProgram : class
{
protected virtual async Task<T> GetResponseAsObjectAsync<T>(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)
{

@ -1,7 +1,5 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Shouldly;
@ -9,20 +7,12 @@ using Xunit;
namespace Volo.Abp.AspNetCore;
public class AbpHostEnvironment_Tests : AbpAspNetCoreTestBase<Startup>
public class AbpHostEnvironment_Tests : AbpAspNetCoreTestBase<Program>
{
protected override IHostBuilder CreateHostBuilder()
protected override IHost CreateHost(IHostBuilder builder)
{
var builder = base.CreateHostBuilder();
builder.ConfigureHostConfiguration(x => x.Sources.Insert(0,
new MemoryConfigurationSource()
{
InitialData = new List<KeyValuePair<string, string>>
{
new(HostDefaults.EnvironmentKey, Environments.Staging),
}
}));
return builder;
builder.UseEnvironment("test");
return base.CreateHost(builder);
}
[Fact]

@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using Volo.Abp.AspNetCore;
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
EnvironmentName = Environments.Staging
});
await builder.RunAbpModuleAsync<AbpAspNetCoreTestModule>();
public partial class Program
{
}

@ -1,20 +0,0 @@
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Volo.Abp.AspNetCore;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpAspNetCoreTestModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}

@ -0,0 +1,21 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Modularity;
namespace Volo.Abp.AspNetCore;
public static class WebApplicationBuilderExtensions
{
public async static Task RunAbpModuleAsync<TModule>(this WebApplicationBuilder builder, Action<AbpApplicationCreationOptions> optionsAction = null)
where TModule : IAbpModule
{
builder.Host.UseAutofac();
await builder.AddApplicationAsync<TModule>(optionsAction);
var app = builder.Build();
await app.InitializeApplicationAsync();
await app.RunAsync();
}
}

@ -2,7 +2,7 @@ using Volo.Abp.AspNetCore;
namespace Volo.Abp.Http;
public abstract class AbpHttpClientTestBase : AbpAspNetCoreTestBase<Startup>
public abstract class AbpHttpClientTestBase : AbpAspNetCoreTestBase<Program>
{
}

@ -21,6 +21,14 @@ namespace Volo.Abp.Http;
)]
public class AbpHttpClientTestModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<IMvcBuilder>(mvcBuilder =>
{
mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpHttpClientTestModule).Assembly);
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddHttpClientProxies(typeof(TestAppModule).Assembly);

@ -20,7 +20,7 @@ public class RegularTestControllerClientProxy_AbpRemoteCallException_Tests : Abp
_controller = ServiceProvider.GetRequiredService<IRegularTestController>();
}
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
protected override void ConfigureServices(IServiceCollection services)
{
services.Replace(ServiceDescriptor.Singleton<IProxyHttpClientFactory, TestProxyHttpClientFactory>());
}

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Builder;
using Volo.Abp.AspNetCore;
using Volo.Abp.Http;
var builder = WebApplication.CreateBuilder();
await builder.RunAbpModuleAsync<AbpHttpClientTestModule>();
public partial class Program
{
}

@ -1,18 +0,0 @@
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
namespace Volo.Abp.Http;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<AbpHttpClientTestModule>();
}
public void Configure(IApplicationBuilder app)
{
app.InitializeApplication();
}
}
Loading…
Cancel
Save