using Longbow.Data; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.AspNetCore.Mvc.Testing.Handlers; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; using UnitTest; using Xunit; namespace Bootstrap.Admin { [CollectionDefinition("SQLServerContext")] public class BootstrapAdminTestContext : ICollectionFixture { } [CollectionDefinition("SQLiteContext")] public class SQLiteContext : ICollectionFixture { } [CollectionDefinition("MySqlContext")] public class MySqlContext : ICollectionFixture { } [CollectionDefinition("MongoContext")] public class MongoContext : ICollectionFixture { } public class MySqlBAWebHost : BAWebHost { protected override void ConfigureWebHost(IWebHostBuilder builder) { base.ConfigureWebHost(builder); TestHelper.ConfigureWebHost(builder, DatabaseProviderType.MySql); } } public class SQLiteBAWebHost : BAWebHost { protected override void ConfigureWebHost(IWebHostBuilder builder) { base.ConfigureWebHost(builder); TestHelper.ConfigureWebHost(builder, DatabaseProviderType.SQLite); } } public class MongoBAWebHost : BAWebHost { protected override void ConfigureWebHost(IWebHostBuilder builder) { base.ConfigureWebHost(builder); builder.ConfigureAppConfiguration(app => app.AddInMemoryCollection(new KeyValuePair[] { new KeyValuePair("DB:0:Enabled", "false"), new KeyValuePair("DB:1:Enabled", "false"), new KeyValuePair("DB:2:Enabled", "false"), new KeyValuePair("DB:3:Enabled", "false"), new KeyValuePair("DB:4:Enabled", "true") })); } } /// /// /// public class BAWebHost : WebApplicationFactory { public BAWebHost() { var client = CreateClient("Account/Login"); var login = client.LoginAsync(); login.Wait(); } /// /// 获得已经登录的HttpClient /// /// /// public HttpClient CreateClient(string baseAddress) { var client = CreateDefaultClient(new Uri($"http://localhost/{baseAddress}/"), new RedirectHandler(7), new CookieContainerHandler(_cookie)); return client; } protected override void ConfigureClient(HttpClient client) { base.ConfigureClient(client); client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1_UnitTest) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.1 Safari/605.1.15"); } private readonly CookieContainer _cookie = new CookieContainer(); protected override void ConfigureWebHost(IWebHostBuilder builder) { base.ConfigureWebHost(builder); var config = new ConfigurationBuilder(); config.AddEnvironmentVariables(); var con = config.Build(); // 增加单元测试本身的配置文件 builder.ConfigureAppConfiguration(app => app.AddJsonFile(TestHelper.RetrievePath($"UnitTest{Path.DirectorySeparatorChar}appsettings.json"), false, true)); if (con.GetValue("Appveyor", false)) { builder.ConfigureAppConfiguration(app => app.AddJsonFile(TestHelper.RetrievePath($"UnitTest{Path.DirectorySeparatorChar}appsettings.appveyor.json"), false, true)); } TestHelper.ConfigureWebHost(builder); } } }