Files
sharp-basic/test/NetClient.Test/Tests/NetClientDiTests.cs
T
2025-12-30 09:17:25 +08:00

53 lines
1.9 KiB
C#

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<IAccessTokenProvider>(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<IHttpClient>();
var result = await client.GetStringAsync("/ping");
Assert.AreEqual("ok", result);
Assert.IsNotNull(capturedHandler);
Assert.AreEqual(1, capturedHandler!.Calls);
}
}