97 lines
3.3 KiB
C#
97 lines
3.3 KiB
C#
using Robotico.Nexus.Client.Document;
|
|
using Robotico.Nexus.Client.Tests.TestSupport;
|
|
using Robotico.Result.Errors;
|
|
using Xunit;
|
|
|
|
namespace Robotico.Nexus.Client.Tests.Document;
|
|
|
|
public class NexusDocumentClientTests : IAsyncLifetime
|
|
{
|
|
private NexusTestHost _host = null!;
|
|
private NexusClient _client = null!;
|
|
private NexusDocumentClient _documentClient = null!;
|
|
|
|
public async Task InitializeAsync()
|
|
{
|
|
_host = await NexusTestHost.StartAsync();
|
|
Robotico.Result.Result<NexusClient> connected = NexusClient.Connect(_host.ConnectionUri(NexusUriSchemes.Document));
|
|
Assert.True(connected.IsSuccess(out NexusClient? client, out _));
|
|
_client = client!;
|
|
Robotico.Result.Result<NexusDocumentClient> created = _client.CreateDocumentClient();
|
|
Assert.True(created.IsSuccess(out NexusDocumentClient? documentClient, out _));
|
|
_documentClient = documentClient!;
|
|
}
|
|
|
|
public async Task DisposeAsync()
|
|
{
|
|
_client.Dispose();
|
|
await _host.DisposeAsync();
|
|
}
|
|
|
|
[Fact]
|
|
public void CheckHealth_Succeeds()
|
|
{
|
|
Robotico.Result.Result result = _documentClient.CheckHealth();
|
|
|
|
Assert.True(result.IsSuccess());
|
|
}
|
|
|
|
[Fact]
|
|
public void UpsertDocument_ThenGetDocument_RoundTrips()
|
|
{
|
|
Robotico.Result.Result upserted = _documentClient.UpsertDocument("users", "u1", """{"name":"Ada"}""");
|
|
Assert.True(upserted.IsSuccess());
|
|
|
|
Robotico.Result.Result<string?> fetched = _documentClient.GetDocument("users", "u1");
|
|
|
|
Assert.True(fetched.IsSuccess(out string? body, out _));
|
|
Assert.Equal("""{"name":"Ada"}""", body);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetDocument_ReturnsNull_WhenNotFound()
|
|
{
|
|
Robotico.Result.Result<string?> result = _documentClient.GetDocument("users", "missing");
|
|
|
|
Assert.True(result.IsSuccess(out string? body, out _));
|
|
Assert.Null(body);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeleteDocument_RemovesDocument()
|
|
{
|
|
_documentClient.UpsertDocument("users", "u2", "{}");
|
|
|
|
Robotico.Result.Result deleted = _documentClient.DeleteDocument("users", "u2");
|
|
|
|
Assert.True(deleted.IsSuccess());
|
|
Robotico.Result.Result<string?> fetched = _documentClient.GetDocument("users", "u2");
|
|
Assert.True(fetched.IsSuccess(out string? body, out _));
|
|
Assert.Null(body);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeleteDocument_Succeeds_WhenAlreadyAbsent()
|
|
{
|
|
Robotico.Result.Result result = _documentClient.DeleteDocument("users", "never-existed");
|
|
|
|
Assert.True(result.IsSuccess());
|
|
}
|
|
|
|
[Fact]
|
|
public void CheckHealth_Fails_WhenEngineReportsFailure()
|
|
{
|
|
Robotico.Result.Result<NexusClient> connected = NexusClient.Connect(
|
|
_host.ConnectionUri(NexusUriSchemes.Document, FakeNexusTriggers.PingReportsFailure));
|
|
Assert.True(connected.IsSuccess(out NexusClient? client, out _));
|
|
using NexusClient failingClient = client!;
|
|
Robotico.Result.Result<NexusDocumentClient> created = failingClient.CreateDocumentClient();
|
|
Assert.True(created.IsSuccess(out NexusDocumentClient? failingDocumentClient, out _));
|
|
|
|
Robotico.Result.Result result = failingDocumentClient!.CheckHealth();
|
|
|
|
Assert.True(result.IsError(out IError? error));
|
|
Assert.Equal(NexusErrors.Unavailable, error!.Code);
|
|
}
|
|
}
|