using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.Data.Sqlite; namespace CartWise.Web.Tests; public class CartWiseWebApplicationFactory : WebApplicationFactory { private readonly string _dbPath = Path.Combine(Path.GetTempPath(), $"cartwise-tests-{Guid.NewGuid():N}.db"); protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.UseEnvironment("Development"); builder.UseSetting("ConnectionStrings:DefaultConnection", $"Data Source={_dbPath}"); } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) { return; } // Release SQLite's pooled native handles before deleting the temp file, or the delete fails while the // process still holds the file open. SqliteConnection.ClearAllPools(); foreach (var path in new[] { _dbPath, $"{_dbPath}-shm", $"{_dbPath}-wal" }) { if (File.Exists(path)) { File.Delete(path); } } } }