using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Tnsu.ApprovalRoute.Application; using Tnsu.ApprovalRoute.Application.Common.Interfaces; using Tnsu.ApprovalRoute.Infrastructure; using Tnsu.ApprovalRoute.Infrastructure.TnsuPortal; namespace Tnsu.ApprovalRoute.IntegrationTests.Infrastructure; // Собирает такой же DI-контейнер, как реальное приложение (те же extension-методы, что в Program.cs), // но с тестовой БД, тестовым ICurrentUser и подменяемым (Moq) клиентом api.tnsu.kz. internal static class TestServiceProviderFactory { public static ServiceProvider Build( string connectionString, string? currentUserEmail = "initiator@tnsu.kz", ITnsuPortalClient? portalClient = null) { var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary { ["ConnectionStrings:Postgres"] = connectionString }) .Build(); var services = new ServiceCollection(); services.AddApprovalRouteInfrastructure(configuration); services.AddApprovalRouteApplication(); services.AddSingleton(new TestCurrentUser(currentUserEmail)); if (portalClient is not null) services.AddSingleton(portalClient); return services.BuildServiceProvider(); } }