53 lines
1.9 KiB
C#
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);
|
|
}
|
|
} |