Files
2025-07-03 12:17:15 +03:00

77 lines
2.3 KiB
C#

using System.Net;
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Moq.Protected;
using Nebula.Shared.Services;
namespace Nebula.UnitTest.NebulaSharedTests;
[TestFixture]
[TestOf(typeof(RestService))]
public class RestServiceTests : BaseSharedTest
{
public static readonly TestDto ExpectedObject = new()
{
Id = 1,
Name = "Test",
};
public static string ObjectString => JsonSerializer.Serialize(ExpectedObject, SerializerOptions);
public static readonly JsonSerializerOptions SerializerOptions = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
public override void BeforeServiceBuild(IServiceCollection services)
{
var mockHandler = new Mock<HttpMessageHandler>();
mockHandler
.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(ObjectString, Encoding.UTF8, "application/json")
});
var client = new HttpClient(mockHandler.Object);
services.AddSingleton(client);
}
[SetUp]
public override void Setup()
{
base.Setup();
}
[Test]
public async Task GetTest()
{
var restService = _sharedUnit.GetService<RestService>();
var result = await restService.GetAsync<TestDto>(new Uri("http://localhost/test"), CancellationToken.None);
Assert.NotNull(result);
Assert.That(result.Id, Is.EqualTo(ExpectedObject.Id));
Assert.That(result.Name, Is.EqualTo(ExpectedObject.Name));
}
[Test]
public async Task PostTest()
{
var restService = _sharedUnit.GetService<RestService>();
var result = await restService.PostAsync<TestDto, TestDto>(ExpectedObject,new Uri("http://localhost/test"), CancellationToken.None);
Assert.NotNull(result);
Assert.That(result.Id, Is.EqualTo(ExpectedObject.Id));
Assert.That(result.Name, Is.EqualTo(ExpectedObject.Name));
}
public class TestDto
{
public int Id { get; set; }
public string Name { get; set; }
}
}