using Robotico.Nexus.Client.Relational; using Robotico.Nexus.Client.Tests.TestSupport; using Robotico.Result.Errors; using Xunit; namespace Robotico.Nexus.Client.Tests.Relational; public class NexusRelationalClientTests : IAsyncLifetime { private NexusTestHost _host = null!; private NexusClient _client = null!; private NexusRelationalClient _relationalClient = null!; public async Task InitializeAsync() { _host = await NexusTestHost.StartAsync(); Robotico.Result.Result connected = NexusClient.Connect(_host.ConnectionUri(NexusUriSchemes.Relational)); Assert.True(connected.IsSuccess(out NexusClient? client, out _)); _client = client!; Robotico.Result.Result created = _client.CreateRelationalClient(); Assert.True(created.IsSuccess(out NexusRelationalClient? relationalClient, out _)); _relationalClient = relationalClient!; } public async Task DisposeAsync() { _client.Dispose(); await _host.DisposeAsync(); } [Fact] public void CheckHealth_Succeeds() { Robotico.Result.Result result = _relationalClient.CheckHealth(); Assert.True(result.IsSuccess()); } [Fact] public void CheckHealth_Fails_WhenEngineReportsFailure() { Robotico.Result.Result connected = NexusClient.Connect( _host.ConnectionUri(NexusUriSchemes.Relational, FakeNexusTriggers.PingReportsFailure)); Assert.True(connected.IsSuccess(out NexusClient? client, out _)); using NexusClient failingClient = client!; Robotico.Result.Result created = failingClient.CreateRelationalClient(); Assert.True(created.IsSuccess(out NexusRelationalClient? failingRelationalClient, out _)); Robotico.Result.Result result = failingRelationalClient!.CheckHealth(); Assert.True(result.IsError(out IError? error)); Assert.Equal(NexusErrors.Unavailable, error!.Code); } [Fact] public void CheckHealth_Fails_WhenTransportThrows() { Robotico.Result.Result connected = NexusClient.Connect( _host.ConnectionUri(NexusUriSchemes.Relational, FakeNexusTriggers.PingThrows)); Assert.True(connected.IsSuccess(out NexusClient? client, out _)); using NexusClient failingClient = client!; Robotico.Result.Result created = failingClient.CreateRelationalClient(); Assert.True(created.IsSuccess(out NexusRelationalClient? failingRelationalClient, out _)); Robotico.Result.Result result = failingRelationalClient!.CheckHealth(); Assert.True(result.IsError(out IError? error)); Assert.Equal(NexusErrors.Unavailable, error!.Code); } }