using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; public class ApiFixture : WebApplicationFactory, IAsyncLifetime { // Override configuration to point at a test database — never run tests against // the development database; a botched rollback could corrupt seed data. protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.UseEnvironment("Testing"); builder.ConfigureAppConfiguration((_, config) => { config.AddInMemoryCollection(new Dictionary { ["ConnectionStrings:DefaultConnection"] = "Host=localhost;Port=5437;Database=vigilcare_records_test;Username=postgres;Password=password", ["Redis:ConnectionString"] = "localhost:6383,defaultDatabase=1,allowAdmin=true" }); }); } public async Task InitializeAsync() { // Apply migrations against the test database on first run using var scope = Services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); await db.Database.MigrateAsync(); // Flush the test Redis database (db=1) to avoid cross-test cache pollution var redis = scope.ServiceProvider.GetRequiredService(); await redis.GetDatabase(1).ExecuteAsync("FLUSHDB"); } public new async Task DisposeAsync() { await base.DisposeAsync(); } }