Skip to content

Commit b90ca13

Browse files
committed
Add MockHttpMessageHandlerFactory
1 parent 61ee165 commit b90ca13

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/Devlead.Testing.MockHttp/IServiceCollectionExtensions.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Microsoft.Extensions.DependencyInjection;
2+
using System.Collections.Concurrent;
23
using System.Diagnostics.CodeAnalysis;
34
using VerifyTests.Http;
45

@@ -20,10 +21,19 @@ static MockHttpClient CreateClient(IServiceProvider provider)
2021
return client;
2122
}
2223

24+
static MockHttpMessageHandlerFactory CreateHttpMessageHandlerFactory(IServiceProvider provider)
25+
=> new(Routes<T>.GetResponseBuilder(provider));
26+
2327
return services
24-
.AddSingleton<HttpClient>(CreateClient)
28+
.AddTransient<HttpClient>(provider => provider.GetRequiredService<MockHttpClient>())
29+
.AddTransient(CreateClient)
30+
.AddSingleton(provider => new MockHttpClientFactory(() => CreateClient(provider)))
2531
.AddSingleton<IHttpClientFactory>(
26-
provider => new MockHttpClientFactory(()=>CreateClient(provider))
32+
provider => provider.GetRequiredService<MockHttpClientFactory>()
33+
)
34+
.AddSingleton(CreateHttpMessageHandlerFactory)
35+
.AddSingleton<IHttpMessageHandlerFactory>(
36+
provider => provider.GetRequiredService<MockHttpMessageHandlerFactory>()
2737
);
2838
}
2939

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Devlead.Testing.MockHttp;
2+
3+
public class MockHttpMessageHandler(Func<HttpRequestMessage, HttpResponseMessage> responseBuilder) : HttpMessageHandler
4+
{
5+
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
6+
=> Task.FromResult(
7+
responseBuilder(request)
8+
);
9+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Collections.Concurrent;
2+
3+
namespace Devlead.Testing.MockHttp;
4+
5+
public class MockHttpMessageHandlerFactory(Func<HttpRequestMessage, HttpResponseMessage> responseBuilder) : IHttpMessageHandlerFactory
6+
{
7+
private ConcurrentDictionary<string, MockHttpMessageHandler> HttpMessageHandlers { get; } = [];
8+
9+
public HttpMessageHandler CreateHandler(string name)
10+
=> HttpMessageHandlers.GetOrAdd(
11+
name,
12+
_ => new(responseBuilder)
13+
);
14+
}

0 commit comments

Comments
 (0)