using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Moq; using PracticeCalendar.Domain.Common.Interfaces; using PracticeCalendar.Infrastructure.Persistence; using PracticeCalendar.Infrastructure.Services; namespace PracticeCalendar.UnitTests.Integration { public class CustomWebApplicationFactory : WebApplicationFactory { private readonly Action configServices; public CustomWebApplicationFactory(Action configServices) { this.configServices = configServices; } protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.ConfigureAppConfiguration(configurationBuilder => { var integrationConfig = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddEnvironmentVariables() .Build(); configurationBuilder.AddConfiguration(integrationConfig); }); builder.ConfigureServices((builder, services) => { services.Remove>(); services.AddDbContext(options => options.UseInMemoryDatabase("InMemoryDbForTesting") ); configServices(services); }); } } }