| File: Utils\MockHttpMessageHandler.cs | Web Access |
| Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Aspire.Cli.Tests.Utils; /// <summary> /// Mock HTTP message handler for testing HTTP client interactions. /// Supports returning fixed responses, dynamic responses via factory, throwing exceptions, and request validation. /// </summary> internal sealed class MockHttpMessageHandler : HttpMessageHandler { private readonly Func<HttpRequestMessage, HttpResponseMessage>? _responseFactory; private readonly HttpResponseMessage? _response; private readonly Exception? _exception; private readonly Action<HttpRequestMessage>? _requestValidator; /// <summary> /// Gets a value indicating whether the request validator was invoked. /// </summary> public bool RequestValidated { get; private set; } /// <summary> /// Creates a handler that returns the specified response. /// </summary> /// <param name="response">The HTTP response to return.</param> /// <param name="requestValidator">Optional action to validate the request.</param> public MockHttpMessageHandler(HttpResponseMessage response, Action<HttpRequestMessage>? requestValidator = null) { _response = response; _requestValidator = requestValidator; } /// <summary> /// Creates a handler that generates responses dynamically using the provided factory. /// </summary> /// <param name="responseFactory">A function that creates responses based on the request.</param> public MockHttpMessageHandler(Func<HttpRequestMessage, HttpResponseMessage> responseFactory) { _responseFactory = responseFactory; } /// <summary> /// Creates a handler that throws the specified exception. /// </summary> /// <param name="exception">The exception to throw.</param> public MockHttpMessageHandler(Exception exception) { _exception = exception; } protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { if (_exception is not null) { throw _exception; } if (_requestValidator is not null) { _requestValidator(request); RequestValidated = true; } if (_responseFactory is not null) { return Task.FromResult(_responseFactory(request)); } return Task.FromResult(_response!); } }