41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using System.Net;
|
|
using System.Text;
|
|
|
|
namespace CursorLang.Tests.Shared;
|
|
|
|
/// <summary>
|
|
/// The network as the test writes it: the answer is decided here rather than
|
|
/// by a repository somewhere.
|
|
/// </summary>
|
|
public sealed class FakeHttpHandler : HttpMessageHandler
|
|
{
|
|
private readonly Func<HttpRequestMessage, HttpResponseMessage> _reply;
|
|
|
|
public FakeHttpHandler(Func<HttpRequestMessage, HttpResponseMessage> reply) => _reply = reply;
|
|
|
|
public List<HttpRequestMessage> Requests { get; } = [];
|
|
|
|
public static FakeHttpHandler Json(string json) => new(_ => new HttpResponseMessage(HttpStatusCode.OK)
|
|
{
|
|
Content = new StringContent(json, Encoding.UTF8, "application/json"),
|
|
});
|
|
|
|
public static FakeHttpHandler Status(HttpStatusCode status) =>
|
|
new(_ => new HttpResponseMessage(status));
|
|
|
|
public static FakeHttpHandler Bytes(byte[] content) => new(_ => new HttpResponseMessage(HttpStatusCode.OK)
|
|
{
|
|
Content = new ByteArrayContent(content),
|
|
});
|
|
|
|
public HttpClient CreateClient() => new(this);
|
|
|
|
protected override Task<HttpResponseMessage> SendAsync(
|
|
HttpRequestMessage request,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
Requests.Add(request);
|
|
return Task.FromResult(_reply(request));
|
|
}
|
|
}
|