62 lines
2.1 KiB
C#
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);
|
|
} |