using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using LittleShop.Data; using System.Linq; namespace LittleShop.Tests.Infrastructure; public class TestWebApplicationFactory : WebApplicationFactory { protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.ConfigureServices(services => { // Remove the existing DbContext registration var descriptor = services.SingleOrDefault( d => d.ServiceType == typeof(DbContextOptions)); if (descriptor != null) { services.Remove(descriptor); } // Add in-memory database for testing services.AddDbContext(options => { options.UseInMemoryDatabase("InMemoryDbForTesting"); }); // Build service provider var sp = services.BuildServiceProvider(); // Create scope for database initialization using (var scope = sp.CreateScope()) { var scopedServices = scope.ServiceProvider; var db = scopedServices.GetRequiredService(); var logger = scopedServices.GetRequiredService>(); // Ensure database is created db.Database.EnsureCreated(); try { // Seed test data if needed SeedTestData(db); } catch (Exception ex) { logger.LogError(ex, "An error occurred seeding the database with test data."); } } }); builder.UseEnvironment("Testing"); } private static void SeedTestData(LittleShopContext context) { // Seed test data will be added as needed for specific tests context.SaveChanges(); } }