Files
sharp-basic/test/NetClient.Test/Tests/NetClientResultsTests.cs
T
2025-12-30 09:17:25 +08:00

62 lines
2.1 KiB
C#

using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Common.Results;
using Microsoft.Extensions.Logging.Abstractions;
using NetClient.Abstractions;
using NetClient.Implementations;
using NetClient.Test.TestDoubles;
namespace NetClient.Test.Tests;
[TestClass]
public class NetClientResultsTests
{
private static DefaultNetClient CreateClient(HttpMessageHandler handler)
{
var http = new HttpClient(handler) { BaseAddress = new Uri("https://example.com") };
IHttpContentSerializer serializer = new TestJsonSerializer();
var logger = NullLogger<DefaultNetClient>.Instance;
return new DefaultNetClient(http, serializer, logger);
}
[TestMethod]
public async Task GetResultAsync_Success_Returns_Result_With_Value()
{
var json = "{\"id\":1}";
var handler =
new TestHttpMessageHandler(_ => Task.FromResult(TestHttpMessageHandler.Json(HttpStatusCode.OK, json)));
var client = CreateClient(handler);
var res = await client.GetResultAsync<Obj>("/obj");
Assert.IsTrue(res.IsSuccess);
Assert.AreEqual(1, res.Value!.id);
}
[TestMethod]
public async Task GetResultAsync_Failure_Maps_StatusCode_And_Message()
{
var handler = new TestHttpMessageHandler(_ =>
Task.FromResult(TestHttpMessageHandler.Text(HttpStatusCode.BadRequest, "bad req")));
var client = CreateClient(handler);
var res = await client.GetResultAsync<Obj>("/obj");
Assert.IsTrue(res.IsFailure);
Assert.AreEqual((long)HttpStatusCode.BadRequest, res.ErrorCode);
StringAssert.Contains(res.ErrorMessage ?? string.Empty, "bad req");
}
[TestMethod]
public async Task DeleteResultAsync_Success_Returns_Success_Result()
{
var handler = new TestHttpMessageHandler(_ =>
Task.FromResult(TestHttpMessageHandler.Text(HttpStatusCode.NoContent, "")));
var client = CreateClient(handler);
var res = await client.DeleteResultAsync("/obj/1");
Assert.IsTrue(res.IsSuccess);
}
private sealed record Obj(int id);
}