Fixed remaining tests

- Lots of duplication zomg
This commit is contained in:
David Fowler 2023-05-01 17:43:48 -07:00
parent 2b0889f684
commit 70036a5e3c
6 changed files with 119 additions and 58 deletions

View File

@ -1,6 +1,7 @@
CreateWebHostBuilder(args).Build() // TODO: Don't do this twice...
.MigrateDbContext<WebhooksContext>((_, __) => { }) var host = CreateWebHostBuilder(args).Build();
.Run(); host.Services.MigrateDbContext<WebhooksContext>((_, __) => { });
host.Run();
IWebHostBuilder CreateWebHostBuilder(string[] args) => IWebHostBuilder CreateWebHostBuilder(string[] args) =>

View File

@ -35,10 +35,17 @@
<Content Include="Services\Ordering\appsettings.json"> <Content Include="Services\Ordering\appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Services\Basket\appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Services\Catalog\appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" /> <PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" /> <PackageReference Include="Microsoft.AspNetCore.TestHost" />
<PackageReference Include="xunit" /> <PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio"> <PackageReference Include="xunit.runner.visualstudio">

View File

@ -26,3 +26,8 @@ global using Microsoft.eShopOnContainers.Services.Ordering.API;
global using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure; global using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure;
global using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure; global using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure;
global using FunctionalTests.Services.Catalog; global using FunctionalTests.Services.Catalog;
// This is a bit of a hack, since we need to differentiate each of these app's program
global using BasketProgram = Microsoft.eShopOnContainers.Services.Basket.API.BasketSettings;
global using CatalogProgram = Microsoft.eShopOnContainers.Services.Catalog.API.CatalogSettings;
global using OrderingProgram = Microsoft.eShopOnContainers.Services.Ordering.API.OrderingSettings;

View File

@ -1,24 +1,35 @@
namespace FunctionalTests.Services.Basket; using FunctionalTests.Middleware;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Hosting;
public class BasketScenariosBase namespace FunctionalTests.Services.Basket;
public class BasketScenariosBase : WebApplicationFactory<BasketProgram>
{ {
private const string ApiUrlBase = "api/v1/basket"; private const string ApiUrlBase = "api/v1/basket";
public TestServer CreateServer() public TestServer CreateServer()
{ {
var path = Assembly.GetAssembly(typeof(BasketScenariosBase)) return Server;
.Location; }
var hostBuilder = new WebHostBuilder()
.UseContentRoot(Path.GetDirectoryName(path))
.ConfigureAppConfiguration(cb =>
{
cb.AddJsonFile("Services/Basket/appsettings.json", optional: false)
.AddEnvironmentVariables();
});
return new TestServer(hostBuilder); protected override IHost CreateHost(IHostBuilder builder)
{
builder.ConfigureServices(servies =>
{
servies.AddSingleton<IStartupFilter, AuthStartupFilter>();
});
builder.ConfigureAppConfiguration(c =>
{
var directory = Path.GetDirectoryName(typeof(BasketScenariosBase).Assembly.Location)!;
c.AddJsonFile(Path.Combine(directory, "Services/Basket/appsettings.json"), optional: false);
});
return base.CreateHost(builder);
} }
public static class Get public static class Get
@ -39,4 +50,17 @@ public class BasketScenariosBase
public static string CreateBasket = $"{ApiUrlBase}/"; public static string CreateBasket = $"{ApiUrlBase}/";
public static string CheckoutOrder = $"{ApiUrlBase}/checkout"; public static string CheckoutOrder = $"{ApiUrlBase}/checkout";
} }
private class AuthStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
app.UseMiddleware<AutoAuthorizeMiddleware>();
next(app);
};
}
}
} }

View File

@ -1,37 +1,39 @@
namespace FunctionalTests.Services.Catalog; namespace FunctionalTests.Services.Catalog;
using Microsoft.eShopOnContainers.Services.Catalog.API;
public class CatalogScenariosBase using FunctionalTests.Services.Ordering;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.eShopOnContainers.Services.Catalog.API;
using Microsoft.Extensions.Hosting;
public class CatalogScenariosBase : WebApplicationFactory<CatalogProgram>
{ {
public TestServer CreateServer() public TestServer CreateServer()
{ {
var path = Assembly.GetAssembly(typeof(CatalogScenariosBase)) Services.MigrateDbContext<CatalogContext>((context, services) =>
.Location; {
var env = services.GetService<IWebHostEnvironment>();
var settings = services.GetService<IOptions<CatalogSettings>>();
var logger = services.GetService<ILogger<CatalogContextSeed>>();
var hostBuilder = new WebHostBuilder() new CatalogContextSeed()
.UseContentRoot(Path.GetDirectoryName(path)) .SeedAsync(context, env, settings, logger)
.ConfigureAppConfiguration(cb => .Wait();
{ })
cb.AddJsonFile("Services/Catalog/appsettings.json", optional: false) .MigrateDbContext<IntegrationEventLogContext>((_, __) => { });
.AddEnvironmentVariables();
});
var testServer = new TestServer(hostBuilder); return Server;
}
testServer.Host protected override IHost CreateHost(IHostBuilder builder)
.MigrateDbContext<CatalogContext>((context, services) => {
{ builder.ConfigureAppConfiguration(c =>
var env = services.GetService<IWebHostEnvironment>(); {
var settings = services.GetService<IOptions<CatalogSettings>>(); var directory = Path.GetDirectoryName(typeof(CatalogScenariosBase).Assembly.Location)!;
var logger = services.GetService<ILogger<CatalogContextSeed>>();
new CatalogContextSeed() c.AddJsonFile(Path.Combine(directory, "Services/Catalog/appsettings.json"), optional: false);
.SeedAsync(context, env, settings, logger) });
.Wait();
})
.MigrateDbContext<IntegrationEventLogContext>((_, __) => { });
return testServer; return base.CreateHost(builder);
} }
public static class Get public static class Get

View File

@ -1,23 +1,15 @@
namespace FunctionalTests.Services.Ordering; using FunctionalTests.Middleware;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Hosting;
public class OrderingScenariosBase namespace FunctionalTests.Services.Ordering;
public class OrderingScenariosBase : WebApplicationFactory<OrderingProgram>
{ {
public TestServer CreateServer() public TestServer CreateServer()
{ {
var path = Assembly.GetAssembly(typeof(OrderingScenariosBase)) Services
.Location;
var hostBuilder = new WebHostBuilder()
.UseContentRoot(Path.GetDirectoryName(path))
.ConfigureAppConfiguration(cb =>
{
cb.AddJsonFile("Services/Ordering/appsettings.json", optional: false)
.AddEnvironmentVariables();
});
var testServer = new TestServer(hostBuilder);
testServer.Host
.MigrateDbContext<OrderingContext>((context, services) => .MigrateDbContext<OrderingContext>((context, services) =>
{ {
var env = services.GetService<IWebHostEnvironment>(); var env = services.GetService<IWebHostEnvironment>();
@ -30,7 +22,24 @@ public class OrderingScenariosBase
}) })
.MigrateDbContext<IntegrationEventLogContext>((_, __) => { }); .MigrateDbContext<IntegrationEventLogContext>((_, __) => { });
return testServer; return Server;
}
protected override IHost CreateHost(IHostBuilder builder)
{
builder.ConfigureServices(servies =>
{
servies.AddSingleton<IStartupFilter, AuthStartupFilter>();
});
builder.ConfigureAppConfiguration(c =>
{
var directory = Path.GetDirectoryName(typeof(OrderingScenariosBase).Assembly.Location)!;
c.AddJsonFile(Path.Combine(directory, "Services/Ordering/appsettings.json"), optional: false);
});
return base.CreateHost(builder);
} }
public static class Get public static class Get
@ -60,4 +69,17 @@ public class OrderingScenariosBase
return $"api/v1/orders/{id}"; return $"api/v1/orders/{id}";
} }
} }
private class AuthStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
app.UseMiddleware<AutoAuthorizeMiddleware>();
next(app);
};
}
}
} }