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.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"); 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"); 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); }