test: Add unit tests for DocumentService.Client
This commit is contained in:
56
DocumentOperator.Tests/Unit/Client/MockHttpMessageHandler.cs
Normal file
56
DocumentOperator.Tests/Unit/Client/MockHttpMessageHandler.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace DocumentService.Tests.Unit.Client;
|
||||
|
||||
/// <summary>
|
||||
/// Reusable fake <see cref="HttpMessageHandler"/> for unit-testing HTTP clients.
|
||||
/// Captures the outgoing request and returns the configured response.
|
||||
/// </summary>
|
||||
internal sealed class MockHttpMessageHandler : HttpMessageHandler
|
||||
{
|
||||
private readonly HttpResponseMessage _response;
|
||||
|
||||
/// <summary>The last request that was sent through this handler.</summary>
|
||||
public HttpRequestMessage? LastRequest { get; private set; }
|
||||
|
||||
public MockHttpMessageHandler(HttpResponseMessage response)
|
||||
{
|
||||
_response = response;
|
||||
}
|
||||
|
||||
// ?? convenience factories ????????????????????????????????????????????????
|
||||
|
||||
/// <summary>Creates a handler that returns 200 OK with a JSON-serialised body.</summary>
|
||||
public static MockHttpMessageHandler ReturningJson<T>(T body, HttpStatusCode status = HttpStatusCode.OK)
|
||||
{
|
||||
var json = JsonSerializer.Serialize(body, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
|
||||
var response = new HttpResponseMessage(status)
|
||||
{
|
||||
Content = new StringContent(json, Encoding.UTF8, "application/json")
|
||||
};
|
||||
return new MockHttpMessageHandler(response);
|
||||
}
|
||||
|
||||
/// <summary>Creates a handler that returns 200 OK with raw bytes as the body.</summary>
|
||||
public static MockHttpMessageHandler ReturningBytes(byte[] bytes, string mediaType = "application/octet-stream", HttpStatusCode status = HttpStatusCode.OK)
|
||||
{
|
||||
var response = new HttpResponseMessage(status)
|
||||
{
|
||||
Content = new ByteArrayContent(bytes) { Headers = { ContentType = new(mediaType) } }
|
||||
};
|
||||
return new MockHttpMessageHandler(response);
|
||||
}
|
||||
|
||||
/// <summary>Creates a handler that returns the given status code with no body.</summary>
|
||||
public static MockHttpMessageHandler ReturningStatus(HttpStatusCode status)
|
||||
=> new(new HttpResponseMessage(status));
|
||||
|
||||
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
LastRequest = request;
|
||||
return Task.FromResult(_response);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user