mirror of
https://github.com/Cleanuparr/Cleanuparr.git
synced 2026-09-13 05:47:33 -04:00
55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using System.Net;
|
|
|
|
namespace Cleanuparr.Infrastructure.Tests.TestHelpers;
|
|
|
|
/// <summary>
|
|
/// Test double for HttpMessageHandler since NSubstitute cannot mock protected methods.
|
|
/// Captures requests and delegates to a configurable handler function.
|
|
/// </summary>
|
|
public class FakeHttpMessageHandler : HttpMessageHandler
|
|
{
|
|
private Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> _handler
|
|
= (_, _) => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
|
|
|
|
public List<HttpRequestMessage> CapturedRequests { get; } = [];
|
|
|
|
/// <summary>
|
|
/// Eagerly captured request body strings (indexed the same as CapturedRequests).
|
|
/// Useful because HttpClient disposes request content after SendAsync returns.
|
|
/// </summary>
|
|
public List<string?> CapturedRequestBodies { get; } = [];
|
|
|
|
public void SetupResponse(HttpStatusCode statusCode)
|
|
{
|
|
_handler = (_, _) => Task.FromResult(new HttpResponseMessage(statusCode));
|
|
}
|
|
|
|
public void SetupResponse(Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> handler)
|
|
{
|
|
_handler = handler;
|
|
}
|
|
|
|
public void SetupThrow(Exception exception)
|
|
{
|
|
_handler = (_, _) => throw exception;
|
|
}
|
|
|
|
private readonly object _captureLock = new();
|
|
|
|
protected override async Task<HttpResponseMessage> SendAsync(
|
|
HttpRequestMessage request, CancellationToken cancellationToken)
|
|
{
|
|
string? body = request.Content != null
|
|
? await request.Content.ReadAsStringAsync(cancellationToken)
|
|
: null;
|
|
|
|
lock (_captureLock)
|
|
{
|
|
CapturedRequests.Add(request);
|
|
CapturedRequestBodies.Add(body);
|
|
}
|
|
|
|
return await _handler(request, cancellationToken);
|
|
}
|
|
}
|