47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Mvc.Testing;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Testcontainers.PostgreSql;
|
|
|
|
public class StreetWebApplicationFactory<Program> : WebApplicationFactory<Program>, IAsyncLifetime where Program : class
|
|
{
|
|
private readonly PostgreSqlContainer dbTestContainer;
|
|
|
|
public StreetWebApplicationFactory()
|
|
{
|
|
dbTestContainer = new PostgreSqlBuilder().WithImage("postgis/postgis:17-3.5").Build();
|
|
}
|
|
|
|
protected override void ConfigureWebHost(IWebHostBuilder builder)
|
|
{
|
|
builder.ConfigureServices(services =>
|
|
{
|
|
|
|
var descriptor = services.SingleOrDefault(d => d.ServiceType == typeof(DbContextOptions<StreetDbContext>));
|
|
if (descriptor != null)
|
|
{
|
|
services.Remove(descriptor);
|
|
}
|
|
|
|
// Use the test database
|
|
services.AddDbContext<StreetDbContext>(options => options.UseNpgsql(dbTestContainer.GetConnectionString(), o => o.UseNetTopologySuite()));
|
|
|
|
// Ensure the database is created before running the tests
|
|
using var scope = services.BuildServiceProvider().CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<StreetDbContext>();
|
|
db.Database.EnsureCreated();
|
|
|
|
});
|
|
}
|
|
|
|
public async Task InitializeAsync()
|
|
{
|
|
await dbTestContainer.StartAsync();
|
|
}
|
|
|
|
async Task IAsyncLifetime.DisposeAsync()
|
|
{
|
|
await dbTestContainer.DisposeAsync();
|
|
}
|
|
} |