using System; using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using NetClient.Abstractions; using NetClient.DependencyInjection; using NetClient.Test.TestDoubles; namespace NetClient.Test.Tests; [TestClass] public class NetClientDiTests { [TestMethod] public async Task AddNetClient_TypedClient_Applies_Options_And_Handlers() { var services = new ServiceCollection(); services.AddSingleton(new StaticTokenProvider("token-123")); TestHttpMessageHandler? capturedHandler = null; var builder = services.AddNetClient(opt => { opt.BaseAddress = new Uri("https://api.test"); opt.UseBearerToken = true; opt.IncludeCorrelationId = true; }); builder.ConfigurePrimaryHttpMessageHandler(() => { capturedHandler = new TestHttpMessageHandler(req => { // BaseAddress + Path combined StringAssert.StartsWith(req.RequestUri!.AbsoluteUri, "https://api.test"); // Correlation header present Assert.IsTrue(req.Headers.Contains("X-Correlation-Id")); // Authorization applied Assert.AreEqual("Bearer", req.Headers.Authorization!.Scheme); Assert.AreEqual("token-123", req.Headers.Authorization!.Parameter); return Task.FromResult(TestHttpMessageHandler.Text(HttpStatusCode.OK, "ok")); }); return capturedHandler; }); var sp = services.BuildServiceProvider(); var client = sp.GetRequiredService(); var result = await client.GetStringAsync("/ping"); Assert.AreEqual("ok", result); Assert.IsNotNull(capturedHandler); Assert.AreEqual(1, capturedHandler!.Calls); } }