using Microsoft.Extensions.Hosting; using EnvelopeGenerator.Infrastructure; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using EnvelopeGenerator.Application.Services; using Microsoft.EntityFrameworkCore; using EnvelopeGenerator.Application; namespace EnvelopeGenerator.Tests.Application; public class Mock { public static IHost CreateHost(Action? builderOptions = null, string configPath = "appsettings.json", bool useRealDb = false, params string[] args) { var builder = Host.CreateApplicationBuilder(args.Any() ? args : null); var config = builder.Configuration; builder.Configuration.AddJsonFile(configPath, optional: true, reloadOnChange: true); builder.Services .AddEnvelopeGeneratorRepositories(opt => { if (useRealDb) { var connStr = config.GetConnectionString("Default") ?? throw new InvalidOperationException("There is no default connection string in appsettings.json."); opt.UseSqlServer(connStr); } else opt.UseInMemoryDatabase("MockDB"); }) .AddEnvelopeGeneratorServices(builder.Configuration) .AddScoped(); builderOptions?.Invoke(builder); var host = builder.Build(); return host; } }