using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using NSubstitute; namespace DocumentGeneration.API.Tests; public sealed class SelfHostedApi : WebApplicationFactory<Startup> { public DocumentApi DocumentApi { get; } public HttpClient DocumentClient { get; } public SelfHostedApi() { DocumentApi = new DocumentApi(); DocumentClient = DocumentApi.CreateClient(); } protected override IHostBuilder CreateHostBuilder() { return Host .CreateDefaultBuilder() .ConfigureWebHostDefaults(builder => builder.UseStartup<Startup>()); } protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.ConfigureServices(services => { var httpClientFactory = Substitute.For<IHttpClientFactory>(); httpClientFactory.CreateClient("").ReturnsForAnyArgs(DocumentClient); services.AddTransient<IHttpClientFactory>(s => httpClientFactory); }); } protected override void Dispose(bool disposing) { DocumentApi.Dispose(); base.Dispose(disposing); } }