using Grpc.Core;
using Mishima.Nexus.Wire.V1;
namespace Robotico.Nexus.Client.Tests.TestSupport;
///
/// In-memory fake standing in for a real Nexus document engine host — only the RPCs used by
/// (Ping + single-document CRUD).
///
public sealed class FakeDocumentEngineService : NexusDocumentEngineService.NexusDocumentEngineServiceBase
{
private readonly Dictionary<(string Collection, string Id), string> _documents = [];
///
public override Task Ping(DocumentPingRequest request, ServerCallContext context)
{
NexusStatus? failure = FakeNexusTriggers.TryStatusFailure(context);
return Task.FromResult(new DocumentPingResponse { Status = failure ?? NexusStatuses.Ok, EngineVersion = "fake" });
}
///
public override Task UpsertDocument(DocumentUpsertRequest request, ServerCallContext context)
{
_documents[(request.CollectionName, request.DocumentId)] = request.JsonBody;
return Task.FromResult(new DocumentUpsertResponse { Status = NexusStatuses.Ok });
}
///
public override Task GetDocument(DocumentGetRequest request, ServerCallContext context)
{
if (_documents.TryGetValue((request.CollectionName, request.DocumentId), out string? body))
{
return Task.FromResult(new DocumentGetResponse { Status = NexusStatuses.Ok, Found = true, JsonBody = body });
}
return Task.FromResult(new DocumentGetResponse { Status = NexusStatuses.Ok, Found = false });
}
///
public override Task DeleteDocument(DocumentDeleteRequest request, ServerCallContext context)
{
_documents.Remove((request.CollectionName, request.DocumentId));
return Task.FromResult(new DocumentDeleteResponse { Status = NexusStatuses.Ok });
}
}