using System.Net; namespace Cleanuparr.Infrastructure.Tests.TestHelpers; /// /// Test double for HttpMessageHandler since NSubstitute cannot mock protected methods. /// Captures requests and delegates to a configurable handler function. /// public class FakeHttpMessageHandler : HttpMessageHandler { private Func> _handler = (_, _) => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)); public List CapturedRequests { get; } = []; /// /// Eagerly captured request body strings (indexed the same as CapturedRequests). /// Useful because HttpClient disposes request content after SendAsync returns. /// public List CapturedRequestBodies { get; } = []; public void SetupResponse(HttpStatusCode statusCode) { _handler = (_, _) => Task.FromResult(new HttpResponseMessage(statusCode)); } public void SetupResponse(Func> handler) { _handler = handler; } public void SetupThrow(Exception exception) { _handler = (_, _) => throw exception; } protected override async Task SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { CapturedRequests.Add(request); CapturedRequestBodies.Add(request.Content != null ? await request.Content.ReadAsStringAsync(cancellationToken) : null); return await _handler(request, cancellationToken); } }